基于Python實現(xiàn)復(fù)刻人生重開模擬器
人生重開模擬器介紹
人生重開模擬器是由VickScarlet上傳至GitHub的一款簡單的文字網(wǎng)頁游戲。
玩家點擊“立即重開”并設(shè)置角色的初始屬性后,程序就會隨機為玩家生成對應(yīng)的人生經(jīng)歷。
代碼實現(xiàn)
下面我們實現(xiàn)一個簡化版的人生重開模擬器,主要目的在于熟悉Python的語法。
打印初始界面
初始界面可以自由發(fā)揮,這里博主就隨便打印一下。
代碼如下:
# 打印初始界面 print('+-------------------------------------------+') print('| |') print('| >>人生重開模擬器<< |') print('| |') print('| 這垃圾人生一秒也不想待了 |') print('| |') print('+-------------------------------------------+')
設(shè)置初始屬性
進入游戲后第一步就是設(shè)置初始屬性,此處設(shè)定以下四個屬性:
- 顏值(face)。
- 體制(strong)。
- 智力(iq)。
- 家境(home)。
我們規(guī)定每個屬性的范圍為1 - 10,并且這四個屬性的總和不能超過20,如果玩家輸入的初始屬性不合理,則提示玩家輸入有誤并要求重新輸入。體現(xiàn)在代碼中就是,玩家輸入屬性后通過if語句判斷輸入的屬性是否合法,如果不合法則通過while語句要求玩家重新進行輸入。
代碼如下:
# 設(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)于角色的性別,我們可以隨機生成一個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之間的隨機整數(shù)。
- 在Python中,如果想引入其他模塊,需要以import 模塊名的方式將對應(yīng)的模塊導(dǎo)入進來,導(dǎo)入模塊后以模塊名.xxx的方式就能使用該模塊中的函數(shù)或變量。
設(shè)置角色出生點
設(shè)置角色的出生點時,可以根據(jù)角色的家境分為四個檔位:
- 10是第一檔,加成最高。
- 7 - 9是第二檔,有一些加成。
- 4 - 6是第三檔,加成較少。
- 1 - 3是第四檔,會扣掉屬性。
除了將角色的出生點按照家境分為四個檔位之外,還可以再生成一個隨機數(shù),對每一檔的內(nèi)部再進行一次細分,最終得到角色的出生點,此處涉及的也就是一些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è)置角色出生點時引入隨機數(shù)的目的就是為了增加隨機的因素,畢竟人生本來就充滿了很多的隨機性。
- 這里的代碼只是起一個示意的作用,因此生成隨機數(shù)的范圍只是1 - 3,如果你愿意也可以生成更大范圍的隨機數(shù),將每一檔的內(nèi)部進行更細粒度的劃分,這樣就能更大的保證每次運行程序后得到的出生點都是不一樣的。
針對每一歲,生成人生經(jīng)歷
人生經(jīng)歷的四個階段
設(shè)置完角色的性別和出生點后,就可以針對每一歲生成對應(yīng)的人生經(jīng)歷了,這里我們按照年齡將人生經(jīng)歷分為以下四個階段:
- 1 - 10歲:幼年階段。
- 11 - 20歲:青年階段。
- 21 - 50歲:壯年階段。
- 50歲以后:老年階段。
在人生的每個階段都會有不同的經(jīng)歷和事件發(fā)生:
- 幼年階段:可塑性強,體制、顏值、智力都會有較快的變化。
- 青年階段:主要是求學(xué),同時父母一輩會有明顯變化,智力和家境會有明顯變化。
- 壯年階段:相對平穩(wěn),屬性變化不大,主要是一些隨機事件影響到屬性。
- 老年階段:體質(zhì)、顏值、智力都會顯著退化,并且隨著年齡的上升,疾病和死亡的風(fēng)險逐漸升高。
這時就可以發(fā)揮我們的想象力,編寫一些合理的人生經(jīng)歷,并在合適的條件下觸發(fā)這些事件即可。
人生經(jīng)歷生成
這里我們以幼年為例,簡單演示一下處理邏輯:
- 使用for循環(huán),按照年齡從1循環(huán)到10,每次循環(huán)生成對應(yīng)年齡的人生經(jīng)歷。
- 在生成每一年的人生經(jīng)歷之前,先生成一個隨機數(shù)(充當人生中的隨機因素),根據(jù)得到的隨機數(shù)以及角色的性別、年齡和各種屬性來觸發(fā)不同的事件。
- 不同的事件被觸發(fā)后,可能會對角色的屬性有正面或負面的影響,因此角色的各個屬性會隨著事件的觸發(fā)而不斷發(fā)生變化。
- 在這一年的最后打印出所觸發(fā)的事件,為了方便觀察,也可以將這一年后角色的各個屬性進行打印。
代碼如下:
# 幼年階段 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 += '你的家里人重男輕女思想非常嚴重, 你被遺棄了!' print(info) print('游戲結(jié)束!') sys.exit(0) # 體制觸發(fā)的事件 elif strong < 6 and point < 3: info += '你生了一場病, ' if home >= 5: info += '在父母的細心照料下, 你康復(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)常被別的小朋友欺負' 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 += '你的父母鼓勵你多運動, 爭取成為運動員' 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ù))
的方式讓程序暫停若干秒。
效果展示
說明一下:
- 由于當前代碼中編寫的人生經(jīng)歷還是比較少的,并且隨機數(shù)也只是1 - 3,因此生成的人生經(jīng)歷的隨機性比較差,并且生成的事件也就那么幾個,如果想要讓生成的人生經(jīng)歷更加隨機更加豐富,就需要將生成隨機數(shù)的范圍調(diào)大,并且編寫更多的人生經(jīng)歷用于觸發(fā)。
- 此外,青年階段、壯年階段和老年階段的人生經(jīng)歷生成方式與幼年階段相同,這里就不再進行實現(xiàn)了,想象力比較豐富的博友可以自行編寫,但博主認為這里的目的是為了熟悉Python的語法,繼續(xù)編寫其他階段的人生經(jīng)歷的意義不大。
到此這篇關(guān)于基于Python實現(xiàn)復(fù)刻人生重開模擬器的文章就介紹到這了,更多相關(guān)Python人生重開模擬器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)批量生成,重命名和刪除word文件
這篇文章主要為大家詳細介紹了Python如何利用第三方庫實現(xiàn)批量生成、重命名和刪除word文件的功能,文中的示例代碼講解詳細,需要的可以參考一下2023-03-03python linecache 處理固定格式文本數(shù)據(jù)的方法
今天小編就為大家分享一篇python linecache 處理固定格式文本數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01pytorch實現(xiàn)mnist數(shù)據(jù)集的圖像可視化及保存
今天小編就為大家分享一篇pytorch實現(xiàn)mnist數(shù)據(jù)集的圖像可視化及保存,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python中numpy數(shù)組與list相互轉(zhuǎn)換實例方法
在本篇文章里小編給大家整理的是一篇關(guān)于python中numpy數(shù)組與list相互轉(zhuǎn)換實例方法,對此有興趣的朋友們可以學(xué)習(xí)下。2021-01-01Python使用Selenium、PhantomJS爬取動態(tài)渲染頁面
本文主要介紹了Python使用Selenium、PhantomJS爬取動態(tài)渲染頁面,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05