今天我們來學(xué)習(xí)如何制作一個文字RPG
游戲 。
- 內(nèi)容主要分為3個部分:
part1. 文字游戲(MUD
)的趣味歷史
part2. 文字游戲的設(shè)計方法
part3. 文字游戲功能實現(xiàn)
一、文字游戲(MUD)的趣味歷史:
你知道國內(nèi)首款很火的文字游戲是哪個大V寫的嗎?
你知道國內(nèi)文字游戲界的活化石是什么嗎?
一起來看看吧~~
1. 什么是MUD游戲:
早期的網(wǎng)絡(luò)游戲被稱為MUD
游戲(Multiple User Domain
多用戶虛擬空間游戲)
- 這種類型的游戲沒有圖形,全部用文字和字符畫來構(gòu)成,很多人將它戲稱為“泥巴游戲”。
- 比如美劇《生活大爆炸》里Sheldon玩的《Zork》就是1980年的一款純文字游戲。
2. MUD游戲的趣味歷史:
?知名打假斗士方舟子在1995年和他的4位朋友開發(fā)了一款MUD
游戲《俠客行
》,但沒想到游戲太火很快就被黑客攻破了,方舟子一怒之下公布源碼。借鑒了《俠客行》的武俠思路,清華北大的一些同學(xué)業(yè)余時間一起開發(fā)了《北大俠客行
》
這款誕生在北大物理樓的服務(wù)器上的游戲是中文史上持續(xù)運營最久的MUD
游戲。
20年過去了,直到今天每天仍有幾百人在線。(嘻嘻,最近還玩過一次??)
3. 文字游戲的沒落:
隨著現(xiàn)代游戲的發(fā)展,文字游戲逐漸沒落,但無論是國內(nèi)還是國外仍然有很多獨立開發(fā)者在開發(fā)文字游戲。
??2021年9月一款叫做《人生重開模擬器》的游戲刷爆各大社交媒體,這款游戲的機制是在抽取天賦卡后自動生成重開的人生。
這款幾乎沒有UI和互動的游戲,因為文案有趣在短短3天內(nèi)超過2億訪問量。
二、文字游戲的設(shè)計方法:
今天我們將制作一個簡易版本的《人生選擇模擬器》。
最終效果是這樣的:
玩家根據(jù)不同的選擇,觸發(fā)相應(yīng)的劇情,在短短1分鐘里過完荒誕的一生。
制作這款互動文字游戲,第一步應(yīng)該完成的是?
A. 立刻開始編寫代碼
B. 寫游戲中用到的文案
C. 規(guī)劃游戲劇情和游戲機制
解析
正確答案:C
原因:在開始編寫游戲時,整理好游戲的劇情和核心功能會顯著提高效率,降低bug率。
1. 游戲策劃流程:
?在專業(yè)的游戲設(shè)計中,通常來說需要游戲策劃,制作詳細的游戲功能說明書闡述玩法和關(guān)卡規(guī)則。
2. 游戲主體功能:
?我們先來設(shè)置《人生選擇模擬器》的游戲劇情和游戲機制:
1??主要劇情:
模擬一個普通人,通過【天賦選擇】和【職業(yè)選擇】,產(chǎn)生不同的人生結(jié)果。
2?? 游戲規(guī)則:
根據(jù)選擇導(dǎo)向不同的分支結(jié)局,沒有勝負之分。
3. 程序規(guī)劃:
?我們把主程序分為三個部分(即有3個交互的地方)
- 游戲開篇設(shè)置
- 天賦選擇
- 成年后選擇
總結(jié)到下面的流程圖中:
每個玩家可以從3個天賦中選擇一個,每個天賦又有不同的劇情選擇,從而產(chǎn)生6種不同的結(jié)局。(當然,這這是初步設(shè)想)
三、文字游戲功能實現(xiàn):
part1【游戲開篇設(shè)置】:
1?? 打印游戲名稱:
游戲開篇,我們在屏幕上打出游戲的名稱。
- 想要輸出這樣的效果,可以使用字符串拼接的方式:
"a" + "b" + "c"
小tips:字符串拼接是指在輸出時用"+"號連接需要輸出的各部分內(nèi)容。
示例如下:
# 使用print()函數(shù)在屏幕中打印出名稱
print("*"*23+"人生選擇模擬器"+"*"*23)
2?? 優(yōu)化游戲開始:
一個最簡單的交互已經(jīng)生成好啦。不過作為小游戲,我們可以把開篇游戲做得更炫酷些~
讓我們一起試一試吧~
# 游戲開篇設(shè)置
# 游戲開篇顯示游戲標題
print("*"*30)
print(" "*5+"人生選擇模擬器")
print("*"*30)
??想必你也發(fā)現(xiàn)了,文字都是同時打印出來的,感覺過于流暢了!不符合人生重開的那種意境!如果能每隔幾秒打印一句就完美了!
哈哈,time模塊里的sleep()函數(shù)就很好地解決了這個問題!
3??導(dǎo)入時間模塊:
??停頓函數(shù):time.sleep()
:
time.sleep()
是time模塊
的內(nèi)置函數(shù),作用是讓當前程序停頓
一段時間后繼續(xù)運行。和C語言中的Sleep()有點像,但這個函數(shù)中填寫的數(shù)字
代表停頓的秒數(shù)
(sec),而C語言中是毫秒(ms)。
例如:
time.sleep(5)# 表示停頓5秒
time.sleep(3)# 表示停頓3秒
??time
模塊:
time
模塊是 Python
的內(nèi)置模塊,要使用 time.sleep()
函數(shù),需要先導(dǎo)入 time
模塊。(import time)
time.time()
返回當前時間的時間戳;time.clock()
以浮點數(shù)計算的秒數(shù)返回當前的CPU時間time.sleep()
讓當前程序停頓一段時間后繼續(xù)運行。
修改后的代碼如下:
# 游戲開篇設(shè)置
# 游戲開篇顯示游戲標題
# 導(dǎo)入time模塊
import time
print("*"*30)
# 停頓1s
time.sleep(1)
print(" "*5+"人生選擇模擬器")
# 再停頓1s
time.sleep(1)
print("*"*30)
現(xiàn)在讓我們嘗試再編寫一段代碼,看看使用停頓函數(shù)的效果??
poem = [“《春夜洛城聞笛》(李白)”,“誰家玉笛暗飛聲”,“散入春風(fēng)滿洛城”,“此夜曲中聞?wù)哿?“何人不起故園情”]
1.使用for循環(huán)遍歷并輸出列表poem中的詩歌。
2.使用停頓函數(shù),設(shè)置每停頓2秒輸出一句詩歌。
對比兩種輸出,感受設(shè)置了停頓的效果。
poem = ["《春夜洛城聞笛》(李白)","誰家玉笛暗飛聲","散入春風(fēng)滿洛城","此夜曲中聞?wù)哿?,"何人不起故園情"]
# 1.使用for循環(huán)遍歷并輸出列表poem中的詩歌
for i in poem:
print(i)
# 2.使用停頓函數(shù),設(shè)置每停頓2秒輸出一句詩歌
# 導(dǎo)入time模塊
import time
# 遍歷列表poem
for i in poem:
# 使用time.sleep()設(shè)置停頓2秒
time.sleep(2)
# 輸出詩歌
print(i)
4??輸入用戶姓名(實現(xiàn)與玩家的交互):
接下來,我們需要玩家輸入姓名,實現(xiàn)這樣的效果:
那我們?nèi)绾螌崿F(xiàn)跟玩家的交互呢?
??input()函數(shù)
:
input()
函數(shù)是Python的內(nèi)置函數(shù)。它是實現(xiàn)人機交互的一個關(guān)鍵。它的執(zhí)行過程分為以下3步:
- 搜集信息——在終端區(qū)輸入內(nèi)容
- 賦值——將輸入內(nèi)容賦值給一個變量
- 返回類型——字符串
使用input()
函數(shù)后,我們可以在終端輸入信息,該函數(shù)接收到數(shù)據(jù),會返回string(字符串)類型
。
- 輸入:字符串,數(shù)字(包含整型和浮點型)都可以。
- 輸出:字符串。也就是說無論input()中輸入什么內(nèi)容,都會轉(zhuǎn)換為字符串類型。
隱喻:連接現(xiàn)實世界與代碼世界的一個信箱。
我們可以把input()函數(shù)當作一個連接現(xiàn)實世界與代碼世界的信箱。當問題從代碼世界傳遞給我們,可我們卻沒有回答時,等待輸入的input()信箱,就會一直處于敞開狀態(tài),等著你往里送回答。而當我們輸入信息后,信箱門便會關(guān)上,繼續(xù)執(zhí)行下面的命令。
good!有了input()函數(shù)之后,我們就可以進行簡單的人機交互了!
# 游戲開篇設(shè)置
# 游戲開篇顯示游戲標題
# 導(dǎo)入time模塊
import time
# 打印30個"*"
print("*"*30)
# 停頓1s
time.sleep(1)
print(" "*5+"人生選擇模擬器")
# 再停頓1s
time.sleep(1)
# 再打印30個"*"
print("*"*30)
# 使用input()函數(shù)接收玩家輸入名字,并將輸入的名字賦值給變量name
name = input("在輸入框中給自己取一個名字吧:")
# 使用print()函數(shù)格式化輸出f"好的,謝謝你{name}"
print(f"好的,謝謝你{name}")
-
name
一個變量,存儲輸入的內(nèi)容。 -
=
一個等號,表示將輸入的字符串賦值給變量name
。
注意:輸入名字后記得按回車鍵哦~
part2【天賦選擇】:
?進行天賦選擇,并觸發(fā)對應(yīng)的劇情的流程如下:
- step1:展示三種天賦的具體內(nèi)容
- step2:請玩家輸入選擇
- step3:根據(jù)玩家的選擇輸出對應(yīng)劇情
1??輸出三種天賦的具體內(nèi)容:
?因為文字較多,所以我們使用變量talent_choice來存儲選擇天賦的文案內(nèi)容,存儲形式為列表。
talent_choice = ["現(xiàn)有以下三種天賦可供選擇:",
"1.中產(chǎn)離異家庭,樂觀,網(wǎng)絡(luò)狂魔",
"2.中法混血,超凡美貌,家道中落",
"3.早產(chǎn)兒,天資聰慧,生于鄉(xiāng)村"]
- 之后涉及到文字內(nèi)容的部分,也都以列表的形式存儲,一方面使代碼更整潔美觀,一方面也方便debug以及修改文案內(nèi)容。
接下來我們需要輸出三種天賦的具體內(nèi)容:
- 我們可以使用for循環(huán),依次從列表talent_choice提取元素,使用print()函數(shù)打印在屏幕上:
for i in talent_choice:
print(i)
2??請玩家輸入選擇:
talent = input("請選擇一種天賦:")
??咦?input()函數(shù)返回的數(shù)據(jù)類型為字符串(“str”)??!難道我選擇的時候要把那行字都打印進去嗎?離譜?。∵@可不行,太麻煩了!有沒有什么簡單一點的辦法呢?如果能將字符串類型轉(zhuǎn)化為整型, 也就是將字符串"1",“2”,"3"轉(zhuǎn)化為整型1,2,3,再進行判斷,輸出對應(yīng)的劇情,豈不美哉?
??int() 取整函數(shù)
:
int()函數(shù),將一個字符串或數(shù)字轉(zhuǎn)換為整型。
- 舉例:
int() :結(jié)果為0
int(“3”):結(jié)果為整型3
int(3.6):結(jié)果為整型3
哈哈,神器在手,天下我有!有了int()函數(shù)后,一切就簡便了起來,我們現(xiàn)在只需要兩步就可以搞定上面的問題了:
- 使用input()函數(shù)接收玩家輸入的天賦。
- 使用int()函數(shù)將輸入的內(nèi)容轉(zhuǎn)化為整型,并賦值給變量talent。
示例代碼如下:
talent = int(input("請選擇一種天賦:"))
? int()函數(shù)傳入小數(shù)后,小數(shù)點后的內(nèi)容會全部“截斷”(不會四舍五入哦~),只會保留整數(shù)部分
3??根據(jù)玩家的選擇輸出對應(yīng)劇情:
我們根據(jù)玩家的選擇設(shè)置了3種不同的劇情:
talent_answer1 = ["4歲上幼兒園","5歲羨慕鄰居一家三口去游樂場,而你只能在自己家的電影院獨自看動畫片","7歲老師在班上進行了IQ測試,你IQ平平","12歲努力學(xué)習(xí)的一年希望得到父親的認可,但父親只關(guān)注小三的兒子","13歲開始追星,在粉絲應(yīng)援群中感受到了溫暖","15歲考上重點中學(xué),翹課去看愛豆演唱會,翻墻中摔斷了腿","16歲收到第一封情書,開啟了第一次戀愛","17歲愛豆被評為劣跡藝人,你哭著哭著禿頭了","18歲遭遇初戀男友出柜,從此一心搞事業(yè)","20歲只身前往外國深造"]
talent_answer2 = ["3歲回到上海","5歲被星探挖掘,成為廣告模特","6歲父親欠下巨額債務(wù)并消失","7歲一邊上學(xué)一邊還債","9歲母親運營自媒體賬號,成為百萬粉絲大V","10歲你被同班同學(xué)霸凌","12歲抑郁沒考上中學(xué)","13歲在家修養(yǎng)一年,愛上畫畫","15歲一邊學(xué)畫畫一邊做模特","16歲回到學(xué)校,再次成為話題人物","17歲終于還清父親欠下的債務(wù)","18歲搬家到成都","19歲以藝術(shù)生的方式考入大學(xué)","20歲和當紅流量明星一起拍廣告"]
talent_answer3 = ["剛出生父母雙亡","3歲吃不起拉面,被預(yù)言是天選之子","6歲用放大鏡對著太陽,把家里的院子燒了","9歲用彈弓打馬蜂窩,蟄了自己一臉包","12歲以優(yōu)異的成績前往縣城讀中學(xué)","18歲考上名牌大學(xué),成為全村的驕傲","19歲沉迷網(wǎng)游無法自拔,和名叫“阿美”網(wǎng)游戀愛","21歲網(wǎng)游面基發(fā)現(xiàn)對方和自己同為男性,一氣之下戒了網(wǎng)癮"]
?? for循環(huán)輸出劇情:
通過if……elif……else判斷輸入的內(nèi)容為1,2,3時,分別使用for循環(huán)遍歷列表輸出talent_answer1,talent_answer2,talent_answer3中的元素。
if talent == 1:
for i in talent_answer1:
print(i)
elif talent == 2:
for i in talent_answer2:
print(i)
elif talent == 3:
for i in talent_answer3:
print(i)
else:
print("輸入錯誤,請重新檢查代碼")
??這樣做的確是一種方法,但我們現(xiàn)在只有3種情況,那如果有30種情況呢?我們是否還要一個一個地輸出,如果還一個一個輸出,豈不麻煩?想必你也想到了一種更為合理的解決方法——>使用函數(shù)!
??定義函數(shù)簡化代碼:
for循環(huán)的部分都是相同的,我們可以通過定義函數(shù)的方法來簡化代碼。
定義一個get_list
函數(shù),函數(shù)的參數(shù)是一個列表
,調(diào)用get_list函數(shù)可以實現(xiàn)將列表中的元素依次輸出。
#定義get_list函數(shù),參數(shù)為list,作用是依次獲取列表中的元素并輸出
def get_list(list):
# 函數(shù)主體部分:依次從列表中提取元素
for i in list:
# 輸出元素
print(i)
使用關(guān)鍵字def
定義函數(shù),函數(shù)名為get_list
,用()
將參數(shù)list
括起來后,添加冒號:
接著是函數(shù)的主體部分,需要用四個空格
縮進。
??調(diào)用函數(shù):
可以直接使用函數(shù)名(參數(shù))
的格式,進行函數(shù)的調(diào)用。參數(shù)分別設(shè)置為talent_answer1
,talent_answer2
,talent_answer3
調(diào)用get_list
函數(shù),并結(jié)合判斷語句
,實現(xiàn)根據(jù)用戶選擇的天賦不同,輸入不同的劇情作為get_list函數(shù)的參數(shù),從而輸出相應(yīng)的劇情。
#使用if elif else條件判斷,判斷選擇的天賦并輸出相應(yīng)的劇請
if talent == 1:
get_list(talent_answer1)
elif talent == 2:
get_list(talent_answer2)
elif talent == 3:
get_list(talent_answer3)
else:
print("輸入錯誤,請重新檢查代碼")
part3 【成年后的選擇】:
編寫這部分代碼的流程和【天賦選擇】是一樣的。不過對應(yīng)的選擇更多。
?成年后的選擇有兩個:1.逐夢天涯
2.找一份安穩(wěn)的工作
(3種天賦,每種天賦對應(yīng)2種選擇,所以總共有6條分支劇情。)
1??將劇情內(nèi)容存儲在變量中:
-
用變量
choice1_talent1
,choice1_talent2
,choice1_talent3
存儲選擇“逐夢天涯
”時會觸發(fā)的劇情 -
用變量
choice2_talent1
,choice2_talent2
,choice2_talent3
存儲選擇“找一份安穩(wěn)工作
”時會觸發(fā)的劇情
注意:一般起變量名的時候最好和其實際意義掛鉤,不要總是用a,b,c,str,name啥的作為變量名。
示例代碼如下:
#將選擇“逐夢天涯”的劇情分別存儲在變量choice1_talent1,choice1_talent2,choice1_talent3中
choice1_talent1 = ["23歲畢業(yè),選擇留美生活","25歲和同學(xué)一起創(chuàng)業(yè),不斷打怪升級","30歲公司做大做強,逐步實現(xiàn)財富自由","33歲拒絕了合伙人的求婚,去澳門賭場消費一個億","35歲領(lǐng)養(yǎng)了一個10歲的小男孩,并取了初戀的名字","40歲,小三的兒子賭博,你拒絕幫他還債,并暴打他一頓","50歲重回祖國,在鄉(xiāng)下買了塊土地,種的西瓜被當?shù)厝送盗?,"60歲兒子宣布出家當和尚,放棄繼承家業(yè)","65歲住進了養(yǎng)老院,和老太太因為當紅明星誰最帥而大打出手","70歲患了癌癥","71歲在睡夢中平靜離世"]
choice1_talent2 = ["21歲和頂流拍廣告成為話題女星","23歲放棄學(xué)業(yè)參加選秀","25歲出演偶像劇女主,但劇情拉垮被網(wǎng)友嘲諷","26歲和男明星隱婚生子","27歲離婚成為單親媽媽","28歲,回法國學(xué)設(shè)計","32歲開設(shè)親子服裝網(wǎng)店","35歲在8個城市開了超過30家店鋪","38歲財務(wù)自由","40歲兒子在學(xué)校遭遇校園霸凌","42歲成立基金會,幫扶被霸凌的兒童","44歲投資并參演校園霸凌題材的電影","45歲遭遇疫情,關(guān)閉20家實體店鋪","50歲資產(chǎn)縮水但沒有減少公益投入","60歲兒子去教堂當神父,你表示支持","70歲在海邊別墅平靜離開"]
choice1_talent3 = ["23歲和朋友炒期貨,賺了人生第一桶金","24歲迷上了喝奶茶,利用第一桶金開了奶茶店","26歲奶茶店火了,你把業(yè)務(wù)拓展到了海外","30歲因長期喝太多奶茶,得了過度肥胖癥","32歲努力減肥,重新變?yōu)閹浶』?,"40歲回到家鄉(xiāng),建設(shè)美麗鄉(xiāng)村"]
#將選擇“找份安穩(wěn)工作”的劇情分別存儲在變量choice2_talent1,choice2_talent2,choice2_talent3中
choice2_talent1 = ["23歲研究生畢業(yè)選擇回國發(fā)展","24歲被家長催考公務(wù)員","25歲考上地方財政局,成為父親酒局上最大的談資","27歲拒絕了所有相親,成為恐婚一族","30歲下鄉(xiāng)支教","31歲被同為支教老師的同事溫暖,結(jié)婚,老公話不多但顧家","33歲老公希望你們有個孩子,但你堅決不生","35歲買了第二套房,同年生下龍鳳胎","40歲老公沖動創(chuàng)業(yè)虧了一套","45歲每天下班雞娃","女兒學(xué)霸兒子學(xué)渣","60歲退休給兒子帶娃","65歲給女兒帶娃","70歲國家補貼3胎家庭每月2萬","75歲癌癥已被攻克","80歲老伴離世","你吃齋念佛活到99"]
choice2_talent2 = ["21歲放棄演藝圈生活,安心讀書","22歲進入傳媒公司打工","25歲連升2級成為部門主管","27歲你養(yǎng)了1只貓咪","29歲你養(yǎng)了8只貓咪","32歲傳媒公司不景氣被裁員","33歲開啟了自己的網(wǎng)店,并進行開啟直播賣貨","35歲因為直播賣貨大火,成為某寶首席主播","40歲因常年高強度工作,身患乳腺癌","45歲癌癥治愈,開始加入流浪寵物公益組織","60歲創(chuàng)立了流浪動物保護組織”,”70歲,在社會各界的贊揚聲中安然去世”]
choice2_talent3 = ["23歲為資本家打工,天天996","27歲憑借996的超高薪資,為父母在鄉(xiāng)村買了大房子,并資助了兩個窮苦大學(xué)生","35歲失業(yè),在原公司樓下賣手抓餅","50歲發(fā)現(xiàn)當年資助的學(xué)生如今成為大學(xué)教授,每個月都來看望你"]
2??劇情展開:
最后我們完成選擇后劇情展開的部分:
?當選擇為1時,再判斷天賦值為1、2或3,輸出對應(yīng)的劇情:
?當選擇為2時,再判斷天賦值為1、2或3,輸出對應(yīng)的劇情
示例代碼如下:
# 使用input()函數(shù)接收選擇,并將選擇的內(nèi)容存儲到變量choice中,并使用int()函數(shù)將輸入的內(nèi)容轉(zhuǎn)化為整型
choice = int(input("成年后你面臨兩種選擇:1.逐夢天涯 2.找一份安穩(wěn)的工作,你的選擇是:"))
# 使用if elif else條件判斷,判斷玩家選擇逐夢天涯時(choice == 1)
# 輸出對應(yīng)玩家天賦的劇情
if choice == 1:
# 輸出"你選擇了逐夢天涯。"
print("你選擇了逐夢天涯。")
# 判斷當天賦選擇為1時
if talent == 1:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent1中的劇情
get_list(choice1_talent1)
# 判斷當天賦選擇為2時
elif talent ==2:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent2中的劇情
get_list(choice1_talent2)
# 判斷當選擇情況為3時
elif talent ==3:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent3中的劇情
get_list(choice1_talent3)
# 使用if elif else條件判斷,判斷玩家選擇安穩(wěn)工作時(choice == 2)輸出對應(yīng)玩家天賦的劇情
elif choice == 2:
# 輸出"你選擇了找一份安穩(wěn)工作。"
print("你選擇了找一份安穩(wěn)工作。")
# 判斷當天賦選擇為1時
if talent == 1:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent1中的劇情
get_list(choice2_talent1)
# 判斷當天賦選擇為2時
elif talent ==2:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent2中的劇情
get_list(choice2_talent2)
# 判斷當選擇情況為3時
elif talent ==3:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent3中的劇情
get_list(choice2_talent3)
else:
print("輸入錯誤,請重新檢查代碼")
part4 【完善游戲體驗】:
現(xiàn)在我們的人生選擇模擬器已經(jīng)基本完成啦~不過游戲還有很多需要提升的空間。
比如,現(xiàn)在的文字信息出現(xiàn)的很快,閱讀體驗不好。
?可以在for循環(huán)依次遍歷列表元素并輸出的時候,使用time.sleep(2),可以使每次輸出前,停頓2s
# 使用print()函數(shù)依次輸出變量talent_choice中存儲的內(nèi)容
for i in talent_choice:
print(i)
#停頓2s
time.sleep(2)
??自定義設(shè)置停頓時間:
只要有文案輸出的部分,我們都想自定義設(shè)置停頓時間該怎么辦呢?
?還記得我們定義了輸出列表元素的函數(shù)get_list()嗎~~~我們可以在函數(shù)中增加停頓時間的設(shè)置time.sleep(s)。即只需要再為get_list()增加一個時間參數(shù)就好了!之后在調(diào)用函數(shù)時,自定義設(shè)置停頓的秒數(shù)即可,例如:
get_list(talent_answer1,1),停頓1秒
get_list(talent_answer1,2),停頓2秒
get_list(talent_answer1,3),停頓3秒
示例代碼如下:
# 定義get_list函數(shù),參數(shù)為list,s作用是依次獲取列表list中的元素并輸出,每次輸出前停頓s秒
def get_list(list,s):
# 函數(shù)主體部分:依次從列表中提取元素
for i in list:
# 每次輸出前,停頓s秒
time.sleep(s)
# 輸出元素
print(i)
# 使用if elif else條件判斷,判斷選擇的天賦并輸出相應(yīng)的劇請
if talent == 1:
get_list(talent_answer1,1)
elif talent == 2:
get_list(talent_answer2,1)
elif talent == 3:
get_list(talent_answer3,1)
else:
print("輸入錯誤,請重新檢查代碼")
#第二個劇情點:成年后的選擇
# 使用input()函數(shù)接收選擇,并將選擇的內(nèi)容存儲到變量choice中,并使用int()函數(shù)將輸入的內(nèi)容轉(zhuǎn)化為整型
choice = int(input("成年后你面臨兩種選擇:1.逐夢天涯 2.找一份安穩(wěn)的工作,你的選擇是:"))
# 使用if elif else條件判斷,判斷玩家選擇逐夢天涯時(choice == 1)輸出對應(yīng)玩家天賦的劇情
if choice == 1:
# 輸出"你選擇了逐夢天涯。"
print("你選擇了逐夢天涯。")
# 判斷當天賦選擇為1時
if talent == 1:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent1中的劇情
get_list(choice1_talent1,1)
# 判斷當天賦選擇為2時
elif talent ==2:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent2中的劇情
get_list(choice1_talent2,1)
# 判斷當選擇情況為3時
elif talent ==3:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent3中的劇情
get_list(choice1_talent3,1)
# 使用條件判斷,判斷玩家選擇安穩(wěn)工作時(choice == 2)輸出對應(yīng)天賦的劇情
elif choice == 2:
# 輸出"你選擇了找一份安穩(wěn)工作。"
print("你選擇了找一份安穩(wěn)工作。")
# 判斷當天賦選擇為1時
if talent == 1:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent1中的劇情
get_list(choice2_talent1,1)
# 判斷當天賦選擇為2時
elif talent ==2:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent2中的劇情
get_list(choice2_talent2,1)
# 判斷當選擇情況為3時
elif talent ==3:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent3中的劇情
get_list(choice2_talent3,1)
else:
print("輸入錯誤,請重新檢查代碼")
part5 【完結(jié)撒花~??????】:
到此為止,我們已經(jīng)完成了第一個文字RPG游戲,太棒啦!
回顧代碼編寫的過程:
1.我們通過input()函數(shù)來進行交互。
2.使用條件判斷來引導(dǎo)分支劇情。
3.定義函數(shù)get_list(list,s)來簡化代碼。
4.使用time.sleep()來設(shè)置停頓。
當然,你也可以在此基礎(chǔ)上設(shè)置更加復(fù)雜的劇情哦~
下面就讓我們附上完整的源碼:
??完整源碼:
#-*- coding:utf-8 -*-
# 將選擇三種天賦的文案存儲在變量talent_choice中
talent_choice = ["現(xiàn)有以下三種天賦可供選擇:",
"1.中產(chǎn)離異家庭,樂觀,網(wǎng)絡(luò)狂魔",
"2.中法混血,超凡美貌,家道中落",
"3.早產(chǎn)兒,天資聰慧,生于鄉(xiāng)村"]
# 將選擇3種天賦所觸發(fā)的劇情分別存儲在變量talent_answer1,talent_answer2,talent_answer3中
talent_answer1 = ["4歲上幼兒園","5歲羨慕鄰居一家三口去游樂場,而你只能在自己家的電影院獨自看動畫片","7歲老師在班上進行了IQ測試,你IQ平平","12歲努力學(xué)習(xí)的一年希望得到父親的認可,但父親只關(guān)注小三的兒子","13歲開始追星,在粉絲應(yīng)援群中感受到了溫暖","15歲考上重點中學(xué),翹課去看愛豆演唱會,翻墻中摔斷了腿","16歲收到第一封情書,開啟了第一次戀愛","17歲愛豆被評為劣跡藝人,你哭著哭著禿頭了","18歲遭遇初戀男友出柜,從此一心搞事業(yè)","20歲只身前往外國深造"]
talent_answer2 = ["3歲回到上海","5歲被星探挖掘,成為廣告模特","6歲父親欠下巨額債務(wù)并消失","7歲一邊上學(xué)一邊還債","9歲母親運營自媒體賬號,成為百萬粉絲大V","10歲你被同班同學(xué)霸凌","12歲抑郁沒考上中學(xué)","13歲在家修養(yǎng)一年,愛上畫畫","15歲一邊學(xué)畫畫一邊做模特","16歲回到學(xué)校,再次成為話題人物","17歲終于還清父親欠下的債務(wù)","18歲搬家到成都","19歲以藝術(shù)生的方式考入大學(xué)","20歲和當紅流量明星一起拍廣告"]
talent_answer3 = ["剛出生父母雙亡","3歲吃不起拉面,被預(yù)言是天選之子","6歲用放大鏡對著太陽,把家里的院子燒了","9歲用彈弓打馬蜂窩,蟄了自己一臉包","12歲以優(yōu)異的成績前往縣城讀中學(xué)","18歲考上名牌大學(xué),成為全村的驕傲","19歲沉迷網(wǎng)游無法自拔,和名叫“阿美”網(wǎng)游戀愛","21歲網(wǎng)游面基發(fā)現(xiàn)對方和自己同為男性,一氣之下戒了網(wǎng)癮"]
# 將選擇“逐夢天涯”的劇情分別存儲在變量choice1_talent1,choice1_talent2,choice1_talent3中
choice1_talent1 = ["23歲畢業(yè),選擇留美生活","25歲和同學(xué)一起創(chuàng)業(yè),不斷打怪升級","30歲公司做大做強,逐步實現(xiàn)財富自由","33歲拒絕了合伙人的求婚,去澳門賭場消費一個億","35歲領(lǐng)養(yǎng)了一個10歲的小男孩,并取了初戀的名字","40歲,小三的兒子賭博,你拒絕幫他還債,并暴打他一頓","50歲重回祖國,在鄉(xiāng)下買了塊土地,種的西瓜被當?shù)厝送盗?,"60歲兒子宣布出家當和尚,放棄繼承家業(yè)","65歲住進了養(yǎng)老院,和老太太因為當紅明星誰最帥而大打出手","70歲患了癌癥","71歲在睡夢中平靜離世"]
choice1_talent2 = ["21歲和頂流拍廣告成為話題女星","23歲放棄學(xué)業(yè)參加選秀","25歲出演偶像劇女主,但劇情拉垮被網(wǎng)友嘲諷","26歲和男明星隱婚生子","27歲離婚成為單親媽媽","28歲,回法國學(xué)設(shè)計","32歲開設(shè)親子服裝網(wǎng)店","35歲在8個城市開了超過30家店鋪","38歲財務(wù)自由","40歲兒子在學(xué)校遭遇校園霸凌","42歲成立基金會,幫扶被霸凌的兒童","44歲投資并參演校園霸凌題材的電影","45歲遭遇疫情,關(guān)閉20家實體店鋪","50歲資產(chǎn)縮水但沒有減少公益投入","60歲兒子去教堂當神父,你表示支持","70歲在海邊別墅平靜離開"]
choice1_talent3 = ["23歲和朋友炒期貨,賺了人生第一桶金","24歲迷上了喝奶茶,利用第一桶金開了奶茶店","26歲奶茶店火了,你把業(yè)務(wù)拓展到了海外","30歲因長期喝太多奶茶,得了過度肥胖癥","32歲努力減肥,重新變?yōu)閹浶』?,"40歲回到家鄉(xiāng),建設(shè)美麗鄉(xiāng)村"]
# 將選擇“找份安穩(wěn)工作”的劇情分別存儲在變量choice2_talent1,choice2_talent2,choice2_talent3中
choice2_talent1 = ["23歲研究生畢業(yè)選擇回國發(fā)展","24歲被家長催考公務(wù)員","25歲考上地方財政局,成為父親酒局上最大的談資","27歲拒絕了所有相親,成為恐婚一族","30歲下鄉(xiāng)支教","31歲被同為支教老師的同事溫暖,結(jié)婚,老公話不多但顧家","33歲老公希望你們有個孩子,但你堅決不生","35歲買了第二套房,同年生下龍鳳胎","40歲老公沖動創(chuàng)業(yè)虧了一套","45歲每天下班雞娃","女兒學(xué)霸兒子學(xué)渣","60歲退休給兒子帶娃","65歲給女兒帶娃","70歲國家補貼3胎家庭每月2萬","75歲癌癥已被攻克","80歲老伴離世","你吃齋念佛活到99"]
choice2_talent2 = ["21歲放棄演藝圈生活,安心讀書","22歲進入傳媒公司打工","25歲連升2級成為部門主管","27歲你養(yǎng)了1只貓咪","29歲你養(yǎng)了8只貓咪","32歲傳媒公司不景氣被裁員","33歲開啟了自己的網(wǎng)店,并進行開啟直播賣貨","35歲因為直播賣貨大火,成為某寶首席主播","40歲因常年高強度工作,身患乳腺癌","45歲癌癥治愈,開始加入流浪寵物公益組織","60歲創(chuàng)立了流浪動物保護組織","70歲,在社會各界的贊揚聲中安然去世"]
choice2_talent3 = ["23歲為資本家打工,天天996","27歲憑借996的超高薪資,為父母在鄉(xiāng)村買了大房子,并資助了兩個窮苦大學(xué)生","35歲失業(yè),在原公司樓下賣手抓餅","50歲發(fā)現(xiàn)當年資助的學(xué)生如今成為大學(xué)教授,每個月都來看望你"]
# 游戲開篇設(shè)置
# 游戲開篇顯示游戲標題
# 導(dǎo)入time模塊
import time
# 打印30個"*"
print("*"*30)
# 停頓1s
time.sleep(1)
print(" "*5+"人生選擇模擬器")
# 再停頓1s
time.sleep(1)
# 再打印30個"*"
print("*"*30)
# 使用input()函數(shù)接收玩家輸入名字,并將輸入的名字賦值給變量name
name = input("在輸入框中給自己取一個名字吧:")
# 使用print()函數(shù)格式化輸出f"好的,謝謝你{name}"
print(f"好的,謝謝你{name}")
# 第一個劇情點;天賦選擇
# for循環(huán)依次輸出變量talent_choice中存儲的內(nèi)容
for i in talent_choice:
# 每次輸出前,停頓1秒
time.sleep(2)
# 輸出元素
print(i)
# 使用input()函數(shù)接收玩家輸入選擇的天賦,使用int()函數(shù)轉(zhuǎn)化為整型,并賦值給變量talent
talent = int(input("請選擇一種天賦:"))
# 定義get_list函數(shù),參數(shù)為list,s作用是依次獲取列表list中的元素并輸出,每次輸出前停頓s秒
def get_list(list,s):
# 函數(shù)主體部分:依次從列表中提取元素
for i in list:
# 每次輸出前,停頓s秒
time.sleep(s)
# 輸出元素
print(i)
# 使用if elif else條件判斷,判斷選擇的天賦并輸出相應(yīng)的劇請
if talent == 1:
get_list(talent_answer1,1)
elif talent == 2:
get_list(talent_answer2,1)
elif talent == 3:
get_list(talent_answer3,1)
else:
print("輸入錯誤,請重新檢查代碼")
# 第二個劇情點:成年后的選擇
# 使用input()函數(shù)接收選擇,并將選擇的內(nèi)容存儲到變量choice中,并使用int()函數(shù)將輸入的內(nèi)容轉(zhuǎn)化為整型
choice = int(input("成年后你面臨兩種選擇:1.逐夢天涯 2.找一份安穩(wěn)的工作,你的選擇是:"))
# 使用if elif else條件判斷,判斷玩家選擇逐夢天涯時(choice == 1)輸出對應(yīng)玩家天賦的劇情
if choice == 1:
# 輸出"你選擇了逐夢天涯。"
print("你選擇了逐夢天涯。")
# 判斷當天賦選擇為1時
if talent == 1:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent1中的劇情
get_list(choice1_talent1,1)
# 判斷當天賦選擇為2時
elif talent ==2:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent2中的劇情
get_list(choice1_talent2,1)
# 判斷當選擇情況為其他時
elif talent ==3:
# 調(diào)用get_list函數(shù)依次輸出choice1_talent3中的劇情
get_list(choice1_talent3,1)
# 使用條件判斷,判斷玩家選擇安穩(wěn)工作時(choice == 2)輸出對應(yīng)天賦的劇情
elif choice == 2:
# 輸出"你選擇了找一份安穩(wěn)工作。"
print("你選擇了找一份安穩(wěn)工作。")
# 判斷當天賦選擇為1時
if talent == 1:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent1中的劇情
get_list(choice2_talent1,1)
# 判斷當天賦選擇為2時
elif talent ==2:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent2中的劇情
get_list(choice2_talent2,1)
# 判斷當選擇情況為其他時
elif talent ==3:
# 調(diào)用get_list函數(shù)依次輸出choice2_talent3中的劇情
get_list(choice2_talent3,1)
else:
print("輸入錯誤,請重新檢查代碼")
如果你仔細觀察的話,會發(fā)現(xiàn)我在第一行加了這么一句話:
#-*- coding:utf-8 -*-
?本來python3默認使用UTF-8格式,所以開頭一般不用加 # – coding:utf-8 –
但是有的中文中還是會出現(xiàn)無法識別的情況,這時候就需要在第一行加上這句。我們這里主要是因為文字列表里文字中間的英文逗號可能和中文逗號混淆的問題,如果不加的話可能就無法運行:
??好了,到這里第一個項目算是完美結(jié)束了,相信你對RPG游戲也有了一定的了解,或許你已經(jīng)準備著手制作自己的RPG游戲了?。?!哈哈,如果是這樣的話那就恭喜你了,我中華游戲界又將新添一位大神了!??????后續(xù)還會陸續(xù)發(fā)布新的項目,敬請期待吧!文章來源:http://www.zghlxwxcb.cn/news/detail-826080.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-826080.html
到了這里,關(guān)于《Python趣味工具》——文字RPG游戲的開發(fā)(附人生選擇模擬器的詳細講解及其他多種RPG游戲的源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!