人生重開模擬器介紹
人生重開模擬器是由VickScarlet上傳至GitHub的一款簡單的文字網(wǎng)頁游戲。
玩家點(diǎn)擊“立即重開”并設(shè)置角色的初始屬性后,程序就會隨機(jī)為玩家生成對應(yīng)的人生經(jīng)歷。
代碼實(shí)現(xiàn)
下面我們實(shí)現(xiàn)一個(gè)簡化版的人生重開模擬器,主要目的在于熟悉Python的語法。
打印初始界面
初始界面可以自由發(fā)揮,這里博主就隨便打印一下。
代碼如下:
# 打印初始界面
print('+-------------------------------------------+')
print('| |')
print('| >>人生重開模擬器<< |')
print('| |')
print('| 這垃圾人生一秒也不想待了 |')
print('| |')
print('+-------------------------------------------+')
設(shè)置初始屬性
進(jìn)入游戲后第一步就是設(shè)置初始屬性,此處設(shè)定以下四個(gè)屬性:
- 顏值(face)。
- 體制(strong)。
- 智力(iq)。
- 家境(home)。
我們規(guī)定每個(gè)屬性的范圍為1 - 10,并且這四個(gè)屬性的總和不能超過20,如果玩家輸入的初始屬性不合理,則提示玩家輸入有誤并要求重新輸入。體現(xiàn)在代碼中就是,玩家輸入屬性后通過if語句判斷輸入的屬性是否合法,如果不合法則通過while語句要求玩家重新進(jìn)行輸入。
代碼如下:
# 設(shè)置初始屬性
# 顏值、體質(zhì)、智力、家境(總和不能超過20,每一項(xiàng)取值在1-10之間)
while True:
print('請?jiān)O(shè)置初始屬性(可用點(diǎn)數(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ī)生成一個(gè)1 - 6的整數(shù),類似于擲色子。
- 如果是單數(shù),則性別設(shè)為男孩。
- 如果是雙數(shù),則性別設(shè)為女孩。
性別設(shè)置后需要借助一個(gè)變量將角色的性別保存起來,因?yàn)楹罄m(xù)男孩和女孩可能會觸發(fā)不同的事件。
代碼如下:
# 設(shè)置角色性別
point = random.randint(1, 6)
if point % 2 == 1:
gender = 'boy'
print('你是個(gè)男孩')
else:
gender = 'girl'
print('你是個(gè)女孩')
說明一下:
- 代碼中使用的randint是random模塊中的一個(gè)函數(shù),
random.randint(begin, end)
可以生成一個(gè)begin - end之間的隨機(jī)整數(shù)。 - 在Python中,如果想引入其他模塊,需要以
import 模塊名
的方式將對應(yīng)的模塊導(dǎo)入進(jìn)來,導(dǎo)入模塊后以模塊名.xxx
的方式就能使用該模塊中的函數(shù)或變量。
設(shè)置角色出生點(diǎn)
設(shè)置角色的出生點(diǎn)時(shí),可以根據(jù)角色的家境分為四個(gè)檔位:
- 10是第一檔,加成最高。
- 7 - 9是第二檔,有一些加成。
- 4 - 6是第三檔,加成較少。
- 1 - 3是第四檔,會扣掉屬性。
除了將角色的出生點(diǎn)按照家境分為四個(gè)檔位之外,還可以再生成一個(gè)隨機(jī)數(shù),對每一檔的內(nèi)部再進(jìn)行一次細(xì)分,最終得到角色的出生點(diǎn),此處涉及的也就是一些if條件判斷而已。
代碼如下:
# 設(shè)置角色出生點(diǎn)
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)上,你的父母是個(gè)體戶')
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}')
說明一下:
- 角色的出生點(diǎn)不能僅由家境決定,此處在設(shè)置角色出生點(diǎn)時(shí)引入隨機(jī)數(shù)的目的就是為了增加隨機(jī)的因素,畢竟人生本來就充滿了很多的隨機(jī)性。
- 這里的代碼只是起一個(gè)示意的作用,因此生成隨機(jī)數(shù)的范圍只是1 - 3,如果你愿意也可以生成更大范圍的隨機(jī)數(shù),將每一檔的內(nèi)部進(jìn)行更細(xì)粒度的劃分,這樣就能更大的保證每次運(yùn)行程序后得到的出生點(diǎn)都是不一樣的。
針對每一歲,生成人生經(jīng)歷
人生經(jīng)歷的四個(gè)階段
設(shè)置完角色的性別和出生點(diǎn)后,就可以針對每一歲生成對應(yīng)的人生經(jīng)歷了,這里我們按照年齡將人生經(jīng)歷分為以下四個(gè)階段:
- 1 - 10歲:幼年階段。
- 11 - 20歲:青年階段。
- 21 - 50歲:壯年階段。
- 50歲以后:老年階段。
在人生的每個(gè)階段都會有不同的經(jīng)歷和事件發(fā)生:
- 幼年階段:可塑性強(qiáng),體制、顏值、智力都會有較快的變化。
- 青年階段:主要是求學(xué),同時(shí)父母一輩會有明顯變化,智力和家境會有明顯變化。
- 壯年階段:相對平穩(wěn),屬性變化不大,主要是一些隨機(jī)事件影響到屬性。
- 老年階段:體質(zhì)、顏值、智力都會顯著退化,并且隨著年齡的上升,疾病和死亡的風(fēng)險(xiǎn)逐漸升高。
這時(shí)就可以發(fā)揮我們的想象力,編寫一些合理的人生經(jīng)歷,并在合適的條件下觸發(fā)這些事件即可。
人生經(jīng)歷生成
這里我們以幼年為例,簡單演示一下處理邏輯:
- 使用for循環(huán),按照年齡從1循環(huán)到10,每次循環(huán)生成對應(yīng)年齡的人生經(jīng)歷。
- 在生成每一年的人生經(jīng)歷之前,先生成一個(gè)隨機(jī)數(shù)(充當(dāng)人生中的隨機(jī)因素),根據(jù)得到的隨機(jī)數(shù)以及角色的性別、年齡和各種屬性來觸發(fā)不同的事件。
- 不同的事件被觸發(fā)后,可能會對角色的屬性有正面或負(fù)面的影響,因此角色的各個(gè)屬性會隨著事件的觸發(fā)而不斷發(fā)生變化。
- 在這一年的最后打印出所觸發(fā)的事件,為了方便觀察,也可以將這一年后角色的各個(gè)屬性進(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 += '你的父母鼓勵(lì)你多運(yùn)動, 爭取成為運(yùn)動員'
strong += 1
else:
info += '你的父母鼓勵(lì)你多打扮自己'
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é)實(shí)了'
strong += 1
elif point == 2:
info += '你看起來更好看了'
face += 1
else:
info += '這一年沒有特別的事情發(fā)生'
# 打印這一年發(fā)生的事情
print(info)
print(f'顏值: {face}, 體制: {strong}, 智力: {iq}, 家境: {home}')
print('---------------------------------------------')
# 為了方便觀察, 加一個(gè)sleep
time.sleep(2)
說明一下:
- 代碼中使用的exit是sys模塊中的一個(gè)函數(shù),如果角色因?yàn)橛|發(fā)某些事件而夭折,那么就可以以
sys.exit(退出碼)
的方式讓程序直接退出。 - 代碼中使用的sleep是time模塊中的一個(gè)函數(shù),為了方便觀察生成的人生經(jīng)歷,可以以
time.sleep(秒數(shù))
的方式讓程序暫停若干秒。
效果展示文章來源:http://www.zghlxwxcb.cn/news/detail-787582.html
說明一下:文章來源地址http://www.zghlxwxcb.cn/news/detail-787582.html
- 由于當(dāng)前代碼中編寫的人生經(jīng)歷還是比較少的,并且隨機(jī)數(shù)也只是1 - 3,因此生成的人生經(jīng)歷的隨機(jī)性比較差,并且生成的事件也就那么幾個(gè),如果想要讓生成的人生經(jīng)歷更加隨機(jī)更加豐富,就需要將生成隨機(jī)數(shù)的范圍調(diào)大,并且編寫更多的人生經(jīng)歷用于觸發(fā)。
- 此外,青年階段、壯年階段和老年階段的人生經(jīng)歷生成方式與幼年階段相同,這里就不再進(jìn)行實(shí)現(xiàn)了,想象力比較豐富的博友可以自行編寫,但博主認(rèn)為這里的目的是為了熟悉Python的語法,繼續(xù)編寫其他階段的人生經(jīng)歷的意義不大。
到了這里,關(guān)于人生重開模擬器(Python實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!