<人生重开模拟器>——《Python项目实战》
?目錄
1.模擬實現 "人生重開模擬器"
1.1?問題導引:
1.2?問題分析:
2.?模擬實現分析及步驟:?
3.完整源碼:
4.寫在最后的話:
后記:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——By 作者:新曉·故知
1.模擬實現 "人生重開模擬器"
1.1?問題導引:
GIF演示: “人生重開模擬器”是一款文字類小游戲. 玩家可根據提示輸入角色的初始屬性之后, 就可以開啟不同的人生經歷.? 具體可以網上搜索“人生重啟模擬器”,就能找到這款游戲的許多版本。?
這里我們找到了一款版本用于演示:(以下圖片源于網絡,這里只用于演示學習) 鏈接網址:人生重啟模擬器 游戲界面:?這里我們選擇“技能”拉滿選項(幻想一下那些我們所羨慕的故事里的開掛人生):
?根據個人選擇調整初始屬性:
?自動生成“重啟”的人生:
?人生總結:
以上就是我們在網上搜索用于演示的“人生重啟模擬器”游戲,原來故事里的“開掛人生”是如此的順利平坦,令人羨慕,作者自愧不如,而那終究是幻想,認清現實,依舊負重前行!?
友情提示:適當參與游戲放松,過度游戲有害健康!
1.2?問題分析:
其實這款游戲的底層邏輯就是編程語言語句的交互運用。通過不同的語句交互(例如順序語句、循環語句、判斷語句等)根據不同的數據數值,執行相應的語句,打印相應的文字。
那么我們接下來就使用Python語言模擬實現這款游戲。由于完整的程序代碼較多, 此處我們只實現其中的一部分邏輯,用于演示并鞏固我們之前所學的Python的知識。
2.?模擬實現分析及步驟:?
(1)設置角色初始屬性 在游戲中我們設定四個屬性.- 顏值 (face)
- 體質 (strong)
- 智力 (iq)
- 家境 (home)
- 如果是單數, 則性別設為男孩
- 如果是雙數, 則性別設為女孩.
- 10 是第一檔. 加成最高
- [7, 9] 是第二檔. 也有一些加成
- [4, 6] 是第三檔. 加成較少
- [1, 3] 是第四檔. 會扣掉屬性.
- 童年階段 [1, 10]
- 青年階段 [11, 20]
- 壯年階段 [20, 50]
- 老年階段 50 歲以上.
- 童年階段可塑性強, 體質, 顏值, 智力都會有較快變化
- 青年階段主要是求學, 同時父母一輩會有明顯變化, 智力和家境會有明顯變化.
- 壯年階段相對平穩, 屬性變化不大, 主要是一些隨機事件影響到屬性.
- 老年階段體質, 顏值, 智力都會顯著退化, 并且隨著年齡的上升, 疾病/死亡的風險逐漸升高.
- 使用 for 循環, 按照年齡循環起來.
- 針對每一年, 先生成[1, 3]檔,??根據不同的隨機數值, 來觸發不同的事件.
- 根據性別, 年齡, 各種屬性, 來觸發不同的事件. 這里都使用 if - else 的方式來組織.
- 不同的事件可能會對屬性有正面/負面的影響.
- 在每一年的最后, 打印這一年遇到的事情.
- 如果夭折, 則直接 sys.exit(0) 退出程序.
- 使用 time.sleep(1) 使程序暫停執行 1s, 方便觀察程序結果.
童年階段:
說明:由于是模擬實現“人生重啟模擬器”,因此我們把基本原理學會后,可自行添加“腦洞大開”的人生經歷,這里只簡單的舉例用于演示。
青年階段:
?壯年階段:
?老年階段:
3.完整源碼:
# 人生重開模擬器import random import sys import timeprint("***************************************************") print('* *') print('* 《人生模擬重啟器》——Python版 *') print('* *') print('* *') print('* 但惜今生,不問來世 *') print('* ——By 作者:新曉·故知 *') print('* *') print("***************************************************")#1. 設置角色初始屬性 # 顏值、體質、智力、家境,這幾項屬性點數總和不能超過設定的閾值(這里我們設置為20), 每一項取值都是 1-10 之間# 使用循環, 使玩家在輸入錯誤的時候, 可以重新輸入. while True:#盡管是while True,但不一定是死循環,可以在代碼塊里使用break跳出整個循環print("請設置初始屬性(可用屬性點總數為 20)")face = int(input("請輸入顏值屬性點數(1-10):"))strong = int(input("請輸入體質屬性點數(1-10):"))iq = int(input("請輸入智力屬性點數(1-10):"))home = int(input("請輸入家境屬性點數(1-10):"))# 通過使用條件語句, 對于玩家輸入的屬性值做出校驗檢查# 以下這段邏輯, 也可以使用elif:使用 elif 則是多個分支只能進一個, 一旦某個條件滿足了, 就不會再走其他的分支了.# 這里雖然沒有使用 elif , 但是使用了 continue, 一旦某個條件滿足, continue 就會跳出本次循環, 后續的條件判定不再執行if face < 1 or face > 10:print("顏值屬性點數設置有誤!")continueif strong < 1 or strong > 10:print("體質屬性點數設置有誤!")continueif iq < 1 or iq > 10:print("智力屬性點數設置有誤!")continueif home < 1 or home > 10:print("家境屬性點數設置有誤!")continueif face + strong + iq + home > 20: # 如果當前的條件都沒有被觸發, 則認為玩家輸入的數據是合法的.print("屬性點數設置錯誤!屬性點數之和超出閾值(20)")continue# 此時就可以跳出循環結束輸入了print("初始屬性設置完成!")print(f"顏值: {face}, 體質: {strong}, 智力: {iq}, 家境: {home}")break# 2.設置生成角色的性別 # 使用 random.randint(beg, end), 就能生成 [beg, end] 隨機整數point = random.randint(1, 6) #此處的random是python中的一個模塊! 相當于C++中的STL(封裝好的代碼塊,我們直接使用即可!) #這里使用其他模塊,需要先使用import語句,把模塊的名字“導入”進來,pycharm有自動導入的功能 # print(f'point = {point}') if point % 2 == 1:gender = 'boy'print('你出生了,是個男孩。') else:gender = 'girl'print('你出生了,是個女孩。')# 3.設置角色的出生環境及背景 # 為了簡單方便, 這里我們就直接生成 1-3 的隨機數進行模擬 #這里我們將角色的家庭背景及環境設置四個檔位梯度,不同檔位會對屬性有加成或減低 point = random.randint(1, 3) if home == 10:# 第一檔print('你出生在首都, 你的父母是高官政要')home += 1iq += 1face += 1 elif 7 <= home <= 9:# 第二檔if point == 1:print('你出生在大城市, 父母是公務員')face += 2elif point == 2:print('你出生在大城市, 父母是企業高管')home += 2else:print('你出生在大城市, 父母是大學教授')iq += 2 elif 4 <= home <= 6:# 第三檔if point == 1:print('你出生在縣城, 你的父母是醫生')strong += 1elif point == 2:print('你出生在鄉鎮, 你的父母是老師')iq += 1else:print('你出生在鄉鎮, 你的父母是個體戶')home += 1 else:# 第四檔if point == 1:print('你出生在農村, 你的父母是辛苦勞作的農民')strong += 1face -= 2elif point == 2:print('你出生在農村, 你的父母奔波勞碌,家庭狀況不是很好')home -= 1else:print('你出生在窮鄉僻壤, 你的父母艱辛茹苦,撫養你長大')strong -= 1 print(f'顏值: {face}, 體質: {strong}, 智力: {iq}, 家境: {home}')# 4.童年階段 for age in range(1, 11):# 把一整年的打印都整理到一個字符串中, 在這一年的結尾統一打印info = f'你今年 {age} 歲. '# 生成一個 [1, 3] 的隨機整數.point = random.randint(1, 3)# 接下來編寫各種事件的代碼# 性別觸發的事件if gender == 'girl' and home <= 3 and point == 1:info += '你的家庭封建思想重男輕女,你不幸被遺棄!'print(info)print('游戲結束!')sys.exit(0)#sys也是python中提供的一個模塊,直接使用即可# 體質觸發的事件# 使用 elif 是為了保證每年只觸發一個事件!elif strong < 6 and point < 3:info += '你患了一場大病'if home >= 5:info += '在父母的悉心照料下, 你康復了'strong += 1home -= 1else:info += '你的父母無法照料你, 你的身體每況愈下'strong -= 1# 顏值觸發的事件elif face <= 4 and age >= 7:info += '你由于很丑, 其他小朋友不喜歡你. 'if iq > 5:info += '你決定通過學習提升自己!'iq += 1else:if gender == 'boy':info += '你和別的小朋友經常打架!'strong += 1iq -= 1else:info += '你經常被別的小朋友欺負!'strong -= 1# 智商觸發的事件elif iq < 5:info += '你有點呆呆的 'if home >= 8 and age >= 6:info += '你的父母把你送到更好的學校學習'iq += 1elif 4 <= home <= 7:if gender == 'boy':info += '你有運動天賦,立志成為運動員'strong += 1else:info += '你學會了提升外在形象'face += 1else:# 家境 < 4info += '你雖然出身條件不好,但卻有快樂的童年'if point == 1:strong -= 1elif point == 2:iq -= 1else:pass# 健康成長事件else:info += '你一生健康,沒有患過大病 'if point == 1:info += '你的身體很強壯'strong += 1elif point == 2:info += '你的自身條件不斷提升'face += 1else:# 無事發生pass# 打印這一年發生的事情print(info)print(f'顏值: {face}, 體質: {strong}, 智力: {iq}, 家境: {home}')print('------------------------------------------------------')# 為了方便觀察, 加一個小小的暫停操作time.sleep(1)#5.青年階段 for age in range(11,20):info = f'你今年{age}歲.'point = random.randint(1,3)#性別觸發的事件if gender == 'boy' and home <= 3 and point == 1:info += '你愛而不得,你喜歡的人很討厭你...'#體質觸發的事件elif strong > 6 and point < 3:info += '你參加省級運動會,并獲得了金牌'if home >= 5:info += '你被以"體育特長生"的名義保送到頂尖大學深造'home += 1strong += 1else:info += '你的體育天賦被埋沒...'home -= 2face -= 1#顏值觸發的事件elif face >=5 and home >= 7:info += '你被許多人喜歡,如眾星捧月'if iq > 5:info += '你顏值、家境、才華并存,人生順利平坦'home += 1else:info += '你出身條件好,但卻不能自立自強'iq -= 2# 打印這一年發生的事情print(info)print(f'顏值: {face}, 體質: {strong}, 智力: {iq}, 家境: {home}')print('------------------------------------------------------')# 為了方便觀察, 加一個小小的暫停操作time.sleep(1) #6.壯年階段 for age in range(20,50):info = f'你今年{age}歲.'point = random.randint(1,3)#性別觸發的事件if gender == 'boy' and iq > 7:info +='你事業有成,家庭和睦'home += 2face += 1else:if home <= 3:info += '你自立自強,不接受命運安排'home +=2strong +=2else:info += '你平庸一生...'# 打印這一年發生的事情print(info)print(f'顏值: {face}, 體質: {strong}, 智力: {iq}, 家境: {home}')print('------------------------------------------------------')# 為了方便觀察, 加一個小小的暫停操作time.sleep(1) #7.老年階段 for age in range(50,110):info = f'你今年{age}歲.'point = random.randint(1,3)#性別觸發的事件if gender == 'girl' and home >= 6:info += '你子孫滿堂,晚年享福'home += 1strong += 1#體質觸發的事件elif strong > 5 and iq > 6:info += '你是工作單位骨干,領導成員攻堅克難'if face >= 5:info += '你被應邀擔任單位發言人'home += 2else:#Do Nothing!pass# 打印這一年發生的事情print(info)print(f'顏值: {face}, 體質: {strong}, 智力: {iq}, 家境: {home}')print('------------------------------------------------------')# 為了方便觀察, 加一個小小的暫停操作time.sleep(1)說明:
import random
import sys
import time
這是導入的封裝好的模塊,直接使用,方便簡單。
4.寫在最后的話:
?
?
“從某一方面來說,人生是選擇出來的。雖然我們不能選擇和決定我們的原生家庭,但是我們以后的人生走向卻取決于我們此刻的選擇與努力! 不必抱怨命運不公,我們從底層一路走來,見識過許許多多的人和事,也學會從不同角度看待這個社會。我們所經歷的困苦與磨難,從某種角度而言,何嘗不是獨特的人生經歷呢? 我們的人生,非言語所能概括和衡量!那些外人看不出、猜不透的故事才組成了我們的這一生!不要輕易否定一切,從不同角度看待,或許又是另一種理解。 我們的未來就在我們的腳下,但行好事,負重前行,別停留!” ?后記:
●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——By 作者:新曉·故知
總結
以上是生活随笔為你收集整理的<人生重开模拟器>——《Python项目实战》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Lucene的中文文本分词
- 下一篇: python字典创建、使用字典保存中国主