基于Python實現(xiàn)復(fù)刻人生重開模擬器
人生重開模擬器介紹
人生重開模擬器是由VickScarlet上傳至GitHub的一款簡單的文字網(wǎng)頁游戲。

玩家點擊“立即重開”并設(shè)置角色的初始屬性后,程序就會隨機(jī)為玩家生成對應(yīng)的人生經(jīng)歷。

代碼實現(xiàn)
下面我們實現(xiàn)一個簡化版的人生重開模擬器,主要目的在于熟悉Python的語法。
打印初始界面
初始界面可以自由發(fā)揮,這里博主就隨便打印一下。
代碼如下:
# 打印初始界面
print('+-------------------------------------------+')
print('| |')
print('| >>人生重開模擬器<< |')
print('| |')
print('| 這垃圾人生一秒也不想待了 |')
print('| |')
print('+-------------------------------------------+')
設(shè)置初始屬性
進(jìn)入游戲后第一步就是設(shè)置初始屬性,此處設(shè)定以下四個屬性:
- 顏值(face)。
- 體制(strong)。
- 智力(iq)。
- 家境(home)。
我們規(guī)定每個屬性的范圍為1 - 10,并且這四個屬性的總和不能超過20,如果玩家輸入的初始屬性不合理,則提示玩家輸入有誤并要求重新輸入。體現(xiàn)在代碼中就是,玩家輸入屬性后通過if語句判斷輸入的屬性是否合法,如果不合法則通過while語句要求玩家重新進(jìn)行輸入。
代碼如下:
# 設(shè)置初始屬性
# 顏值、體質(zhì)、智力、家境(總和不能超過20,每一項取值在1-10之間)
while True:
print('請設(shè)置初始屬性(可用點數(shù)總數(shù)為20)')
face = int(input('請輸入顏值(1-10): '))
strong = int(input('請輸入體制(1-10): '))
iq = int(input('請輸入智力(1-10): '))
home = int(input('請輸入家境(1-10): '))
if face < 1 or face > 10:
print('顏值設(shè)置有誤!')
continue
if strong < 1 or strong > 10:
print('體制設(shè)置有誤!')
continue
if iq < 1 or iq > 10:
print('智力設(shè)置有誤!')
continue
if home < 1 or home > 10:
print('家境設(shè)置有誤!')
continue
if face + strong + iq + home > 20:
print('屬性總和超過了20,設(shè)置有誤!')
continue
print('初始屬性輸入完畢!')
print(f'顏值: {face}, 體制: {strong}, 智力: {iq}, 家境: {home}')
break
設(shè)置角色性別
關(guān)于角色的性別,我們可以隨機(jī)生成一個1 - 6的整數(shù),類似于擲色子。
如果是單數(shù),則性別設(shè)為男孩。
如果是雙數(shù),則性別設(shè)為女孩。
性別設(shè)置后需要借助一個變量將角色的性別保存起來,因為后續(xù)男孩和女孩可能會觸發(fā)不同的事件。
代碼如下:
# 設(shè)置角色性別
point = random.randint(1, 6)
if point % 2 == 1:
gender = 'boy'
print('你是個男孩')
else:
gender = 'girl'
print('你是個女孩')
說明一下:
- 代碼中使用的randint是random模塊中的一個函數(shù),random.randint(begin, end)可以生成一個begin - end之間的隨機(jī)整數(shù)。
- 在Python中,如果想引入其他模塊,需要以import 模塊名的方式將對應(yīng)的模塊導(dǎo)入進(jìn)來,導(dǎo)入模塊后以模塊名.xxx的方式就能使用該模塊中的函數(shù)或變量。
設(shè)置角色出生點
設(shè)置角色的出生點時,可以根據(jù)角色的家境分為四個檔位:
- 10是第一檔,加成最高。
- 7 - 9是第二檔,有一些加成。
- 4 - 6是第三檔,加成較少。
- 1 - 3是第四檔,會扣掉屬性。
除了將角色的出生點按照家境分為四個檔位之外,還可以再生成一個隨機(jī)數(shù),對每一檔的內(nèi)部再進(jìn)行一次細(xì)分,最終得到角色的出生點,此處涉及的也就是一些if條件判斷而已。
代碼如下:
# 設(shè)置角色出生點
point = random.randint(1, 3)
if home == 10:
# 第一檔
print('你出生在帝都, 你的父母是高官政要')
home += 1
iq += 1
face += 1
elif 7 <= home <= 9:
# 第二檔
if point == 1:
print('你出生在大城市,父母是公務(wù)員')
face += 2
elif point == 2:
print('你出生在大城市,父母是企業(yè)高管')
home += 2
else:
print('你出生在大城市,父母是大學(xué)教授')
iq += 2
elif 4 <= home <= 6:
# 第三檔
if point == 1:
print('你出生在三線城市,你的父母是醫(yī)生')
strong += 1
elif point == 2:
print('你出生在鎮(zhèn)上,你的父母是老師')
iq += 1
else:
print('你出生在鎮(zhèn)上,你的父母是個體戶')
home += 1
else:
# 第四檔
if point == 1:
print('你出生在農(nóng)村,父母是辛苦勞作的農(nóng)民')
strong += 1
face -= 2
elif point == 2:
print('你出生在窮鄉(xiāng)僻壤,你的父母是無業(yè)游民')
home -= 1
else:
print('你出生在鎮(zhèn)上,你的父母感情不和')
strong -= 1
print(f'顏值: {face}, 體制: {strong}, 智力: {iq}, 家境: {home}')
說明一下:
- 角色的出生點不能僅由家境決定,此處在設(shè)置角色出生點時引入隨機(jī)數(shù)的目的就是為了增加隨機(jī)的因素,畢竟人生本來就充滿了很多的隨機(jī)性。
- 這里的代碼只是起一個示意的作用,因此生成隨機(jī)數(shù)的范圍只是1 - 3,如果你愿意也可以生成更大范圍的隨機(jī)數(shù),將每一檔的內(nèi)部進(jìn)行更細(xì)粒度的劃分,這樣就能更大的保證每次運(yùn)行程序后得到的出生點都是不一樣的。
針對每一歲,生成人生經(jīng)歷
人生經(jīng)歷的四個階段
設(shè)置完角色的性別和出生點后,就可以針對每一歲生成對應(yīng)的人生經(jīng)歷了,這里我們按照年齡將人生經(jīng)歷分為以下四個階段:
- 1 - 10歲:幼年階段。
- 11 - 20歲:青年階段。
- 21 - 50歲:壯年階段。
- 50歲以后:老年階段。
在人生的每個階段都會有不同的經(jīng)歷和事件發(fā)生:
- 幼年階段:可塑性強(qiáng),體制、顏值、智力都會有較快的變化。
- 青年階段:主要是求學(xué),同時父母一輩會有明顯變化,智力和家境會有明顯變化。
- 壯年階段:相對平穩(wěn),屬性變化不大,主要是一些隨機(jī)事件影響到屬性。
- 老年階段:體質(zhì)、顏值、智力都會顯著退化,并且隨著年齡的上升,疾病和死亡的風(fēng)險逐漸升高。
這時就可以發(fā)揮我們的想象力,編寫一些合理的人生經(jīng)歷,并在合適的條件下觸發(fā)這些事件即可。
人生經(jīng)歷生成
這里我們以幼年為例,簡單演示一下處理邏輯:
- 使用for循環(huán),按照年齡從1循環(huán)到10,每次循環(huán)生成對應(yīng)年齡的人生經(jīng)歷。
- 在生成每一年的人生經(jīng)歷之前,先生成一個隨機(jī)數(shù)(充當(dāng)人生中的隨機(jī)因素),根據(jù)得到的隨機(jī)數(shù)以及角色的性別、年齡和各種屬性來觸發(fā)不同的事件。
- 不同的事件被觸發(fā)后,可能會對角色的屬性有正面或負(fù)面的影響,因此角色的各個屬性會隨著事件的觸發(fā)而不斷發(fā)生變化。
- 在這一年的最后打印出所觸發(fā)的事件,為了方便觀察,也可以將這一年后角色的各個屬性進(jìn)行打印。
代碼如下:
# 幼年階段
for age in range(1, 11):
info = f'你今年{age}歲, '
point = random.randint(1, 3)
# 性別觸發(fā)的事件
if gender == 'girl' and home <= 3 and point == 1:
info += '你的家里人重男輕女思想非常嚴(yán)重, 你被遺棄了!'
print(info)
print('游戲結(jié)束!')
sys.exit(0)
# 體制觸發(fā)的事件
elif strong < 6 and point < 3:
info += '你生了一場病, '
if home >= 5:
info += '在父母的細(xì)心照料下, 你康復(fù)了'
strong += 1
home -= 1
else:
info += '你的父母沒精力管你, 你的身體狀況更遭了'
strong -= 1
# 顏值觸發(fā)的事件
elif face <= 4 and age >= 7:
info += '你長得太丑了, 別的小朋友不喜歡你, '
if iq > 5:
info += '你決定用學(xué)習(xí)填充自己!'
iq += 1
else:
if gender == 'boy':
info += '你和別的小朋友經(jīng)常打架!'
strong += 1
iq -= 1
else:
info += '你經(jīng)常被別的小朋友欺負(fù)'
strong -= 1
# 智力觸發(fā)的事件
elif iq < 5:
info += '你看起來傻傻的, '
if home >= 7 and age >= 6:
info += '你的父母把你送到更好的學(xué)校學(xué)習(xí)'
iq += 1
elif 4 <= home <= 6:
if gender == 'boy':
info += '你的父母鼓勵你多運(yùn)動, 爭取成為運(yùn)動員'
strong += 1
else:
info += '你的父母鼓勵你多打扮自己'
face += 1
else:
info += '你的父母為此經(jīng)常吵架'
if point == 1:
strong -= 1
elif point == 2:
iq -= 1
else:
pass
# 健康成長事件
else:
info += '你健康成長, '
if point == 1:
info += '你看起來更結(jié)實了'
strong += 1
elif point == 2:
info += '你看起來更好看了'
face += 1
else:
info += '這一年沒有特別的事情發(fā)生'
# 打印這一年發(fā)生的事情
print(info)
print(f'顏值: {face}, 體制: {strong}, 智力: {iq}, 家境: {home}')
print('---------------------------------------------')
# 為了方便觀察, 加一個sleep
time.sleep(2)
說明一下:
- 代碼中使用的exit是sys模塊中的一個函數(shù),如果角色因為觸發(fā)某些事件而夭折,那么就可以以
sys.exit(退出碼)的方式讓程序直接退出。 - 代碼中使用的sleep是time模塊中的一個函數(shù),為了方便觀察生成的人生經(jīng)歷,可以以
time.sleep(秒數(shù))的方式讓程序暫停若干秒。
效果展示

說明一下:
- 由于當(dāng)前代碼中編寫的人生經(jīng)歷還是比較少的,并且隨機(jī)數(shù)也只是1 - 3,因此生成的人生經(jīng)歷的隨機(jī)性比較差,并且生成的事件也就那么幾個,如果想要讓生成的人生經(jīng)歷更加隨機(jī)更加豐富,就需要將生成隨機(jī)數(shù)的范圍調(diào)大,并且編寫更多的人生經(jīng)歷用于觸發(fā)。
- 此外,青年階段、壯年階段和老年階段的人生經(jīng)歷生成方式與幼年階段相同,這里就不再進(jìn)行實現(xiàn)了,想象力比較豐富的博友可以自行編寫,但博主認(rèn)為這里的目的是為了熟悉Python的語法,繼續(xù)編寫其他階段的人生經(jīng)歷的意義不大。
到此這篇關(guān)于基于Python實現(xiàn)復(fù)刻人生重開模擬器的文章就介紹到這了,更多相關(guān)Python人生重開模擬器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)的NN神經(jīng)網(wǎng)絡(luò)算法完整示例
這篇文章主要介紹了Python實現(xiàn)的NN神經(jīng)網(wǎng)絡(luò)算法,結(jié)合完整實例形式分析了Python使用numpy、matplotlib及sklearn模塊實現(xiàn)NN神經(jīng)網(wǎng)絡(luò)相關(guān)算法實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2018-06-06
如何利用Python+Vue實現(xiàn)簡單的前后端分離
因為python開發(fā)的高效性,python web開發(fā)也受到越來越多人的關(guān)注,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+Vue實現(xiàn)簡單的前后端分離的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
pandas?dataframe?drop函數(shù)介紹
這篇文章主要介紹了pandas?dataframe?drop函數(shù)介紹,文章通圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Python基于pygame實現(xiàn)單機(jī)版五子棋對戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了Python基于pygame實現(xiàn)單機(jī)版五子棋對戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12
使用虛擬環(huán)境實現(xiàn)Python版本和依賴庫的兼容
這篇文章主要介紹了使用虛擬環(huán)境實現(xiàn)Python版本和依賴庫的兼容的相關(guān)資料,需要的朋友可以參考下2022-12-12
Python Sweetviz輕松實現(xiàn)探索性數(shù)據(jù)分析
Sweetviz是一個開放源代碼Python庫,可生成精美的高密度可視化文件,以單行代碼啟動EDA(探索性數(shù)據(jù)分析)。輸出是一個完全獨(dú)立的HTML應(yīng)用程序,該系統(tǒng)圍繞快速可視化目標(biāo)值和比較數(shù)據(jù)集而構(gòu)建。其目標(biāo)是幫助快速分析目標(biāo)特征,訓(xùn)練與測試數(shù)據(jù)以及其他此類數(shù)據(jù)表征任務(wù)2021-11-11
Python中unittest模塊做UT(單元測試)使用實例
這篇文章主要介紹了Python中unittest模塊做UT(單元測試)使用實例,本文直接給出待測試的類、測試類和測試結(jié)果以及測試總結(jié),需要的朋友可以參考下2015-06-06

