国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《Python趣味工具》——文字RPG游戲的開發(fā)(附人生選擇模擬器的詳細講解及其他多種RPG游戲的源碼)

這篇具有很好參考價值的文章主要介紹了《Python趣味工具》——文字RPG游戲的開發(fā)(附人生選擇模擬器的詳細講解及其他多種RPG游戲的源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今天我們來學(xué)習(xí)如何制作一個文字RPG游戲 。

  • 內(nèi)容主要分為3個部分:
    part1. 文字游戲(MUD)的趣味歷史
    part2. 文字游戲的設(shè)計方法
    part3. 文字游戲功能實現(xiàn)

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言



一、文字游戲(MUD)的趣味歷史:

你知道國內(nèi)首款很火的文字游戲是哪個大V寫的嗎?
你知道國內(nèi)文字游戲界的活化石是什么嗎?
一起來看看吧~~

1. 什么是MUD游戲:

早期的網(wǎng)絡(luò)游戲被稱為MUD游戲(Multiple User Domain多用戶虛擬空間游戲)

  • 這種類型的游戲沒有圖形,全部用文字和字符畫來構(gòu)成,很多人將它戲稱為“泥巴游戲”。

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言

  • 比如美劇《生活大爆炸》里Sheldon玩的《Zork》就是1980年的一款純文字游戲。

2. MUD游戲的趣味歷史:

?知名打假斗士方舟子在1995年和他的4位朋友開發(fā)了一款MUD游戲《俠客行》,但沒想到游戲太火很快就被黑客攻破了,方舟子一怒之下公布源碼。借鑒了《俠客行》的武俠思路,清華北大的一些同學(xué)業(yè)余時間一起開發(fā)了《北大俠客行

這款誕生在北大物理樓的服務(wù)器上的游戲是中文史上持續(xù)運營最久的MUD游戲。

20年過去了,直到今天每天仍有幾百人在線。(嘻嘻,最近還玩過一次??)

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言


3. 文字游戲的沒落:

隨著現(xiàn)代游戲的發(fā)展,文字游戲逐漸沒落,但無論是國內(nèi)還是國外仍然有很多獨立開發(fā)者在開發(fā)文字游戲。

??2021年9月一款叫做《人生重開模擬器》的游戲刷爆各大社交媒體,這款游戲的機制是在抽取天賦卡后自動生成重開的人生。

這款幾乎沒有UI和互動的游戲,因為文案有趣在短短3天內(nèi)超過2億訪問量。
文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言


二、文字游戲的設(shè)計方法:

今天我們將制作一個簡易版本的《人生選擇模擬器》。

最終效果是這樣的:
文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言
玩家根據(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個交互的地方)

  1. 游戲開篇設(shè)置
  2. 天賦選擇
  3. 成年后選擇

總結(jié)到下面的流程圖中:

每個玩家可以從3個天賦中選擇一個,每個天賦又有不同的劇情選擇,從而產(chǎn)生6種不同的結(jié)局。(當然,這這是初步設(shè)想)


三、文字游戲功能實現(xiàn):

part1【游戲開篇設(shè)置】:

1?? 打印游戲名稱:

游戲開篇,我們在屏幕上打出游戲的名稱。

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言

  • 想要輸出這樣的效果,可以使用字符串拼接的方式: "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)了,文字都是同時打印出來的,感覺過于流暢了!不符合人生重開的那種意境!如果能每隔幾秒打印一句就完美了!文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言
哈哈,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)這樣的效果:
文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言
那我們?nèi)绾螌崿F(xiàn)跟玩家的交互呢?

??input()函數(shù):

input()函數(shù)是Python的內(nèi)置函數(shù)。它是實現(xiàn)人機交互的一個關(guān)鍵。它的執(zhí)行過程分為以下3步:

  1. 搜集信息——在終端區(qū)輸入內(nèi)容
  2. 賦值——將輸入內(nèi)容賦值給一個變量
  3. 返回類型——字符串

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言

使用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ù)之后,我們就可以進行簡單的人機交互了!
文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言

# 游戲開篇設(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)的劇情,豈不美哉?
文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言

??int() 取整函數(shù):

int()函數(shù),將一個字符串或數(shù)字轉(zhuǎn)換為整型。

  • 舉例:
    int() :結(jié)果為0
    int(“3”):結(jié)果為整型3
    int(3.6):結(jié)果為整型3

哈哈,神器在手,天下我有!有了int()函數(shù)后,一切就簡便了起來,我們現(xiàn)在只需要兩步就可以搞定上面的問題了:

  1. 使用input()函數(shù)接收玩家輸入的天賦。
  2. 使用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_answer1talent_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)容存儲在變量中:

  1. 用變量choice1_talent1,choice1_talent2,choice1_talent3存儲選擇“逐夢天涯”時會觸發(fā)的劇情

  2. 用變量choice2_talent1,choice2_talent2choice2_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)無法識別的情況,這時候就需要在第一行加上這句。我們這里主要是因為文字列表里文字中間的英文逗號可能和中文逗號混淆的問題,如果不加的話可能就無法運行:

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言


??好了,到這里第一個項目算是完美結(jié)束了,相信你對RPG游戲也有了一定的了解,或許你已經(jīng)準備著手制作自己的RPG游戲了?。?!哈哈,如果是這樣的話那就恭喜你了,我中華游戲界又將新添一位大神了!??????后續(xù)還會陸續(xù)發(fā)布新的項目,敬請期待吧!

文字游戲開發(fā),《Python項目實戰(zhàn)》,python,游戲,開發(fā)語言文章來源地址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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python趣味編程-使用 Tkinter 進行 RPS 游戲

    python趣味編程-使用 Tkinter 進行 RPS 游戲

    ? 使用 Tkinter 的 RPS 游戲是用 Python 編程語言編碼的應(yīng)用程序。該項目使用 tkinter 庫來顯示游戲應(yīng)用程序的 GUI。游戲機制包括選擇一個符號來擊敗對手。 在 Python 中使用 Tkinter 的 RPS 游戲 是一種基于隨機機會的游戲,您通過簡單的運氣獲勝。這個 使用 Tkinter 的 RPS 游戲 可以引

    2024年02月05日
    瀏覽(23)
  • 《人生苦短——我學(xué)Python》條件判斷->雙向選擇(if--else)

    《人生苦短——我學(xué)Python》條件判斷->雙向選擇(if--else)

    今天我們來學(xué)習(xí)雙向選擇判斷。顧名思義,雙向就是兩種選擇選其一,即 if----else 。如果If的條件不成立,則執(zhí)行 else 下的語句,否則執(zhí)行 if 下面的語句。顯然,它們是 互斥 的!下面就讓我們來詳細看看吧! if 后面的語句是當判斷 條件成立 時, 需要執(zhí)行 的操作。 else 后面

    2024年02月10日
    瀏覽(44)
  • Python 實現(xiàn)經(jīng)典游戲“貪吃蛇”:從零開始的趣味編程之旅

    在計算機科學(xué)和編程教育中,通過實現(xiàn)小游戲是學(xué)習(xí)和掌握一門編程語言的重要實踐方式。今天,我們將一起探索如何使用Python來打造一款經(jīng)典的、風(fēng)靡全球的游戲——貪吃蛇。這個項目不僅涵蓋了Python的基礎(chǔ)語法、面向?qū)ο缶幊趟枷?,還會涉及pygame庫的使用以及游戲循環(huán)、

    2024年02月21日
    瀏覽(28)
  • 《Python趣味工具》——自制emoji3

    《Python趣味工具》——自制emoji3

    今日目標 在上次,我們繪制了靜態(tài)的emoji圖。并且總結(jié)了turtle中的常用函數(shù)。 本次我們將嘗試制作一個動態(tài)的emoji,讓你的表情包動起來! 動畫的原理簡單來說就是一張張圖片快速切換而成。 要在turtle中實現(xiàn)動畫的效果,同樣可以通過圖片快速切換的方式來實現(xiàn)。 那怎么制

    2024年02月07日
    瀏覽(13)
  • 《Python趣味工具》——ppt的操作(1)

    《Python趣味工具》——ppt的操作(1)

    前面我們學(xué)習(xí)了如何利用 turtle 模塊制作 emoji ,今天來看看PPT的相關(guān)操作: 小L想要把 PPT 中的文本全部粘貼到 Word 文檔中,該怎么辦,一頁一頁的復(fù)制粘貼么,emmm,想想都很麻煩,還是交給 Python 吧! 即要把 PPT 中的文本內(nèi)容讀取出來,再寫入 Word 文檔中。 我們想要使用

    2024年02月07日
    瀏覽(17)
  • 【六一特別文章】Python編寫一個六一兒童節(jié)問答小游戲及趣味比賽

    【六一特別文章】Python編寫一個六一兒童節(jié)問答小游戲及趣味比賽

    隨著六一兒童節(jié)的到來,我們可以為孩子們編寫一個有趣的小游戲,讓他們在游戲中學(xué)習(xí)有關(guān)六一兒童節(jié)的知識。本文將介紹如何用Python編寫一個六一兒童節(jié)問答小游戲及趣味比賽。 首先,我們需要準備一些有關(guān)六一兒童節(jié)的問題和答案。這里我準備了三個問題和對應(yīng)的答案

    2024年02月07日
    瀏覽(20)
  • 3D~RPG游戲的制作

    3D~RPG游戲的制作

    @作者 : SYFStrive @博客首頁 : HomePage @創(chuàng)建時間 : 2022/7/29 10:00 ??: UnityRPG核心文章(代碼加起來7萬字??) ??: 個人社區(qū)(歡迎大佬們加入) ??: 社區(qū)鏈接?? ??: 覺得文章不錯可以點點關(guān)注 ??: 專欄連接?? ??: 程序員每天堅持鍛煉?? ??: 點擊直接閱讀文章

    2024年02月03日
    瀏覽(23)
  • pygame制作rpg類游戲或者模擬經(jīng)營類游戲的思路

    Pygame 能夠支持開發(fā) RPG 類或者模擬經(jīng)營類游戲。Pygame 提供了圖形界面、事件處理、音頻處理等基礎(chǔ)功能,開發(fā)者可以利用這些功能實現(xiàn)自己的游戲邏輯。 例如,開發(fā)者可以利用 Pygame 實現(xiàn)以下功能: 地圖繪制和移動:通過 Pygame 提供的繪圖函數(shù)和事件處理函數(shù),實現(xiàn)地圖的繪

    2024年02月05日
    瀏覽(17)
  • Unity 3D RPG游戲的設(shè)計與實現(xiàn)

    Unity 3D RPG游戲的設(shè)計與實現(xiàn)

    public class PlayerInput : MonoBehaviour { ? ? public float horizontalInput; ? ? public float verticalInput; ? ?public bool mouseDown; ? ? ? ? ? ? // Update is called once per frame ? ? void Update() ? ? { ///在游戲運行且鼠標當前未被按下的情況下,檢測鼠標左鍵是否被用戶按下,并記錄這一交互狀態(tài)。 ? ?

    2024年03月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包