《Python趣味工具》——文字RPG游戏的开发(附人生选择模拟器的详细讲解及其他多种RPG游戏的源码)

news2024/11/27 13:39:33

今天我们来学习如何制作一个文字RPG游戏 。

  • 内容主要分为3个部分:
    part1. 文字游戏(MUD)的趣味历史
    part2. 文字游戏的设计方法
    part3. 文字游戏功能实现

在这里插入图片描述


文章目录

  • 一、文字游戏(MUD)的趣味历史:
    • 1. 什么是MUD游戏:
    • 2. MUD游戏的趣味历史:
    • 3. 文字游戏的没落:
  • 二、文字游戏的设计方法:
    • 1. 游戏策划流程:
    • 2. 游戏主体功能:
      • :one:主要剧情:
      • :two: 游戏规则:
    • 3. 程序规划:
  • 三、文字游戏功能实现:
    • part1【游戏开篇设置】:
      • :one: 打印游戏名称:
      • :two: 优化游戏开始:
      • :three:导入时间模块:
        • :snake:停顿函数:`time.sleep()`:
        • :snake:`time`模块:
      • :four:输入用户姓名(实现与玩家的交互):
        • :snake:`input()函数`:
    • part2【天赋选择】:
      • :one:输出三种天赋的具体内容:
      • :two:请玩家输入选择:
        • :snake:`int() 取整函数`:
      • :three:根据玩家的选择输出对应剧情:
        • :snake: for循环输出剧情:
        • :snake:定义函数简化代码:
        • :snake:调用函数:
    • part3 【成年后的选择】:
      • :one:将剧情内容存储在变量中:
      • :two:剧情展开:
    • part4 【完善游戏体验】:
      • :snake:自定义设置停顿时间:
    • part5 【完结撒花~🎉🎉🎉】:
      • :heart:完整源码:


一、文字游戏(MUD)的趣味历史:

你知道国内首款很火的文字游戏是哪个大V写的吗?
你知道国内文字游戏界的活化石是什么吗?
一起来看看吧~~

1. 什么是MUD游戏:

早期的网络游戏被称为MUD游戏(Multiple User Domain多用户虚拟空间游戏)

  • 这种类型的游戏没有图形,全部用文字和字符画来构成,很多人将它戏称为“泥巴游戏”。

在这里插入图片描述

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

2. MUD游戏的趣味历史:

✨知名打假斗士方舟子在1995年和他的4位朋友开发了一款MUD游戏《侠客行》,但没想到游戏太火很快就被黑客攻破了,方舟子一怒之下公布源码。借鉴了《侠客行》的武侠思路,清华北大的一些同学业余时间一起开发了《北大侠客行

这款诞生在北大物理楼的服务器上的游戏是中文史上持续运营最久的MUD游戏。

20年过去了,直到今天每天仍有几百人在线。(嘻嘻,最近还玩过一次😄)

在这里插入图片描述


3. 文字游戏的没落:

随着现代游戏的发展,文字游戏逐渐没落,但无论是国内还是国外仍然有很多独立开发者在开发文字游戏。

🔥2021年9月一款叫做《人生重开模拟器》的游戏刷爆各大社交媒体,这款游戏的机制是在抽取天赋卡后自动生成重开的人生。

这款几乎没有UI和互动的游戏,因为文案有趣在短短3天内超过2亿访问量。
在这里插入图片描述


二、文字游戏的设计方法:

今天我们将制作一个简易版本的《人生选择模拟器》。

最终效果是这样的:
在这里插入图片描述
玩家根据不同的选择,触发相应的剧情,在短短1分钟里过完荒诞的一生。

制作这款互动文字游戏,第一步应该完成的是?

A. 立刻开始编写代码
B. 写游戏中用到的文案
C. 规划游戏剧情和游戏机制
解析
正确答案:C
原因:在开始编写游戏时,整理好游戏的剧情和核心功能会显著提高效率,降低bug率。


1. 游戏策划流程:

✨在专业的游戏设计中,通常来说需要游戏策划,制作详细的游戏功能说明书阐述玩法和关卡规则。


2. 游戏主体功能:

✨我们先来设置《人生选择模拟器》的游戏剧情和游戏机制:

1️⃣主要剧情:

模拟一个普通人,通过【天赋选择】和【职业选择】,产生不同的人生结果。

2️⃣ 游戏规则:

根据选择导向不同的分支结局,没有胜负之分。


3. 程序规划:

✨我们把主程序分为三个部分(即有3个交互的地方)

  1. 游戏开篇设置
  2. 天赋选择
  3. 成年后选择

总结到下面的流程图中:

人生选择模拟器
天赋选择
天赋1
天赋2
天赋3
剧情
剧情
剧情
选择1
选择2
结局1
结局2
选择1
选择2
结局1
结局2
选择1
选择2
结局1
结局2

每个玩家可以从3个天赋中选择一个,每个天赋又有不同的剧情选择,从而产生6种不同的结局。(当然,这这是初步设想)


三、文字游戏功能实现:

part1【游戏开篇设置】:

1️⃣ 打印游戏名称:

游戏开篇,我们在屏幕上打出游戏的名称。

在这里插入图片描述

  • 想要输出这样的效果,可以使用字符串拼接的方式: "a" + "b" + "c"

小tips:字符串拼接是指在输出时用"+"号连接需要输出的各部分内容。

示例如下:

# 使用print()函数在屏幕中打印出名称
print("*"*23+"人生选择模拟器"+"*"*23)

2️⃣ 优化游戏开始:

一个最简单的交互已经生成好啦。不过作为小游戏,我们可以把开篇游戏做得更炫酷些~

让我们一起试一试吧~

# 游戏开篇设置

# 游戏开篇显示游戏标题
print("*"*30)
print(" "*5+"人生选择模拟器")
print("*"*30)

👉想必你也发现了,文字都是同时打印出来的,感觉过于流畅了!不符合人生重开的那种意境!如果能每隔几秒打印一句就完美了!在这里插入图片描述
哈哈,time模块里的sleep()函数就很好地解决了这个问题!


3️⃣导入时间模块:

🐍停顿函数:time.sleep():

time.sleep()time模块的内置函数,作用是让当前程序停顿一段时间后继续运行。和C语言中的Sleep()有点像,但这个函数中填写的数字代表停顿的秒数(sec),而C语言中是毫秒(ms)。
例如:

time.sleep(5)# 表示停顿5秒
time.sleep(3)# 表示停顿3秒

🐍time模块:

time 模块是 Python 的内置模块,要使用 time.sleep() 函数,需要先导入 time 模块。(import time)

time.time()返回当前时间的时间戳;
time.clock()以浮点数计算的秒数返回当前的CPU时间
time.sleep()让当前程序停顿一段时间后继续运行。

修改后的代码如下:

# 游戏开篇设置

# 游戏开篇显示游戏标题
# 导入time模块
import time
print("*"*30)
# 停顿1s
time.sleep(1)  
print(" "*5+"人生选择模拟器")
# 再停顿1s
time.sleep(1)
print("*"*30)

现在让我们尝试再编写一段代码,看看使用停顿函数的效果😋

poem = [“《春夜洛城闻笛》(李白)”,“谁家玉笛暗飞声”,“散入春风满洛城”,“此夜曲中闻折柳”,“何人不起故园情”]

1.使用for循环遍历并输出列表poem中的诗歌。
2.使用停顿函数,设置每停顿2秒输出一句诗歌。

对比两种输出,感受设置了停顿的效果。

poem = ["《春夜洛城闻笛》(李白)","谁家玉笛暗飞声","散入春风满洛城","此夜曲中闻折柳","何人不起故园情"]

# 1.使用for循环遍历并输出列表poem中的诗歌
for i in poem:
    print(i)
    
# 2.使用停顿函数,设置每停顿2秒输出一句诗歌
# 导入time模块
import time
# 遍历列表poem
for i in poem:
    # 使用time.sleep()设置停顿2秒
    time.sleep(2)
    # 输出诗歌
    print(i)

4️⃣输入用户姓名(实现与玩家的交互):

接下来,我们需要玩家输入姓名,实现这样的效果:
在这里插入图片描述
那我们如何实现跟玩家的交互呢?

🐍input()函数:

input()函数是Python的内置函数。它是实现人机交互的一个关键。它的执行过程分为以下3步:

  1. 搜集信息——在终端区输入内容
  2. 赋值——将输入内容赋值给一个变量
  3. 返回类型——字符串

在这里插入图片描述

使用input()函数后,我们可以在终端输入信息,该函数接收到数据,会返回string(字符串)类型

  • 输入:字符串,数字(包含整型和浮点型)都可以。
  • 输出:字符串。也就是说无论input()中输入什么内容,都会转换为字符串类型。

隐喻:连接现实世界与代码世界的一个信箱。
我们可以把input()函数当作一个连接现实世界与代码世界的信箱。当问题从代码世界传递给我们,可我们却没有回答时,等待输入的input()信箱,就会一直处于敞开状态,等着你往里送回答。而当我们输入信息后,信箱门便会关上,继续执行下面的命令。

good!有了input()函数之后,我们就可以进行简单的人机交互了!
在这里插入图片描述

# 游戏开篇设置

# 游戏开篇显示游戏标题
# 导入time模块
import time
# 打印30个"*"
print("*"*30)
# 停顿1s
time.sleep(1)  
print(" "*5+"人生选择模拟器")
# 再停顿1s
time.sleep(1)
# 再打印30个"*"
print("*"*30)

# 使用input()函数接收玩家输入名字,并将输入的名字赋值給变量name
name = input("在输入框中给自己取一个名字吧:")
# 使用print()函数格式化输出f"好的,谢谢你{name}"
print(f"好的,谢谢你{name}")

  • name一个变量,存储输入的内容。
  • =一个等号,表示将输入的字符串赋值给变量name

注意:输入名字后记得按回车键哦~


part2【天赋选择】:

✨进行天赋选择,并触发对应的剧情的流程如下:

  • step1:展示三种天赋的具体内容
  • step2:请玩家输入选择
  • step3:根据玩家的选择输出对应剧情

1️⃣输出三种天赋的具体内容:

✨因为文字较多,所以我们使用变量talent_choice来存储选择天赋的文案内容,存储形式为列表。

talent_choice = ["现有以下三种天赋可供选择:",
"1.中产离异家庭,乐观,网络狂魔",
"2.中法混血,超凡美貌,家道中落",
"3.早产儿,天资聪慧,生于乡村"]
  • 之后涉及到文字内容的部分,也都以列表的形式存储,一方面使代码更整洁美观,一方面也方便debug以及修改文案内容。

接下来我们需要输出三种天赋的具体内容:

  • 我们可以使用for循环,依次从列表talent_choice提取元素,使用print()函数打印在屏幕上:
for i in talent_choice:    
    print(i)

2️⃣请玩家输入选择:

talent = input("请选择一种天赋:")

💔咦?input()函数返回的数据类型为字符串(“str”)啊!难道我选择的时候要把那行字都打印进去吗?离谱啊!这可不行,太麻烦了!有没有什么简单一点的办法呢?如果能将字符串类型转化为整型, 也就是将字符串"1",“2”,"3"转化为整型1,2,3,再进行判断,输出对应的剧情,岂不美哉?
在这里插入图片描述

🐍int() 取整函数:

int()函数,将一个字符串或数字转换为整型。

  • 举例:
    int() :结果为0
    int(“3”):结果为整型3
    int(3.6):结果为整型3

哈哈,神器在手,天下我有!有了int()函数后,一切就简便了起来,我们现在只需要两步就可以搞定上面的问题了:

  1. 使用input()函数接收玩家输入的天赋。
  2. 使用int()函数将输入的内容转化为整型,并赋值给变量talent。

示例代码如下:

talent = int(input("请选择一种天赋:"))

⚠ int()函数传入小数后,小数点后的内容会全部“截断”(不会四舍五入哦~),只会保留整数部分


3️⃣根据玩家的选择输出对应剧情:

我们根据玩家的选择设置了3种不同的剧情:

talent_answer1 = ["4岁上幼儿园","5岁羡慕邻居一家三口去游乐场,而你只能在自己家的电影院独自看动画片","7岁老师在班上进行了IQ测试,你IQ平平","12岁努力学习的一年希望得到父亲的认可,但父亲只关注小三的儿子","13岁开始追星,在粉丝应援群中感受到了温暖","15岁考上重点中学,翘课去看爱豆演唱会,翻墙中摔断了腿","16岁收到第一封情书,开启了第一次恋爱","17岁爱豆被评为劣迹艺人,你哭着哭着秃头了","18岁遭遇初恋男友出柜,从此一心搞事业","20岁只身前往外国深造"]
talent_answer2 = ["3岁回到上海","5岁被星探挖掘,成为广告模特","6岁父亲欠下巨额债务并消失","7岁一边上学一边还债","9岁母亲运营自媒体账号,成为百万粉丝大V","10岁你被同班同学霸凌","12岁抑郁没考上中学","13岁在家修养一年,爱上画画","15岁一边学画画一边做模特","16岁回到学校,再次成为话题人物","17岁终于还清父亲欠下的债务","18岁搬家到成都","19岁以艺术生的方式考入大学","20岁和当红流量明星一起拍广告"]
talent_answer3 = ["刚出生父母双亡","3岁吃不起拉面,被预言是天选之子","6岁用放大镜对着太阳,把家里的院子烧了","9岁用弹弓打马蜂窝,蛰了自己一脸包","12岁以优异的成绩前往县城读中学","18岁考上名牌大学,成为全村的骄傲","19岁沉迷网游无法自拔,和名叫“阿美”网游恋爱","21岁网游面基发现对方和自己同为男性,一气之下戒了网瘾"]

🐍 for循环输出剧情:

通过if……elif……else判断输入的内容为1,2,3时,分别使用for循环遍历列表输出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("输入错误,请重新检查代码")

☝️这样做的确是一种方法,但我们现在只有3种情况,那如果有30种情况呢?我们是否还要一个一个地输出,如果还一个一个输出,岂不麻烦?想必你也想到了一种更为合理的解决方法——>使用函数!


🐍定义函数简化代码:

for循环的部分都是相同的,我们可以通过定义函数的方法来简化代码。

定义一个get_list函数,函数的参数是一个列表,调用get_list函数可以实现将列表中的元素依次输出。

#定义get_list函数,参数为list,作用是依次获取列表中的元素并输出
def get_list(list):
    # 函数主体部分:依次从列表中提取元素
    for i in list:
        # 输出元素
        print(i)

使用关键字def定义函数,函数名为get_list,用()将参数list括起来后,添加冒号:

接着是函数的主体部分,需要用四个空格缩进。


🐍调用函数:

可以直接使用函数名(参数)的格式,进行函数的调用。参数分别设置为talent_answer1talent_answer2talent_answer3

调用get_list函数,并结合判断语句,实现根据用户选择的天赋不同,输入不同的剧情作为get_list函数的参数,从而输出相应的剧情。

#使用if elif else条件判断,判断选择的天赋并输出相应的剧请
if talent == 1:
    get_list(talent_answer1)
elif talent == 2:
    get_list(talent_answer2)
elif talent == 3:
    get_list(talent_answer3)
else:
    print("输入错误,请重新检查代码")

part3 【成年后的选择】:

编写这部分代码的流程和【天赋选择】是一样的。不过对应的选择更多。

✨成年后的选择有两个:1.逐梦天涯 2.找一份安稳的工作(3种天赋,每种天赋对应2种选择,所以总共有6条分支剧情。)

人生选择模拟器
天赋选择
天赋1
天赋2
天赋3
剧情
剧情
剧情
选择1
选择2
结局1
结局2
选择1
选择2
结局1
结局2
选择1
选择2
结局1
结局2

1️⃣将剧情内容存储在变量中:

  1. 用变量choice1_talent1choice1_talent2choice1_talent3存储选择“逐梦天涯”时会触发的剧情

  2. 用变量choice2_talent1choice2_talent2choice2_talent3存储选择“找一份安稳工作”时会触发的剧情

注意:一般起变量名的时候最好和其实际意义挂钩,不要总是用a,b,c,str,name啥的作为变量名。

示例代码如下:

#将选择“逐梦天涯”的剧情分别存储在变量choice1_talent1,choice1_talent2,choice1_talent3中
choice1_talent1 = ["23岁毕业,选择留美生活","25岁和同学一起创业,不断打怪升级","30岁公司做大做强,逐步实现财富自由","33岁拒绝了合伙人的求婚,去澳门赌场消费一个亿","35岁领养了一个10岁的小男孩,并取了初恋的名字","40岁,小三的儿子赌博,你拒绝帮他还债,并暴打他一顿","50岁重回祖国,在乡下买了块土地,种的西瓜被当地人偷了","60岁儿子宣布出家当和尚,放弃继承家业","65岁住进了养老院,和老太太因为当红明星谁最帅而大打出手","70岁患了癌症","71岁在睡梦中平静离世"]
choice1_talent2 = ["21岁和顶流拍广告成为话题女星","23岁放弃学业参加选秀","25岁出演偶像剧女主,但剧情拉垮被网友嘲讽","26岁和男明星隐婚生子","27岁离婚成为单亲妈妈","28岁,回法国学设计","32岁开设亲子服装网店","35岁在8个城市开了超过30家店铺","38岁财务自由","40岁儿子在学校遭遇校园霸凌","42岁成立基金会,帮扶被霸凌的儿童","44岁投资并参演校园霸凌题材的电影","45岁遭遇疫情,关闭20家实体店铺","50岁资产缩水但没有减少公益投入","60岁儿子去教堂当神父,你表示支持","70岁在海边别墅平静离开"]
choice1_talent3 = ["23岁和朋友炒期货,赚了人生第一桶金","24岁迷上了喝奶茶,利用第一桶金开了奶茶店","26岁奶茶店火了,你把业务拓展到了海外","30岁因长期喝太多奶茶,得了过度肥胖症","32岁努力减肥,重新变为帅小伙","40岁回到家乡,建设美丽乡村"]

#将选择“找份安稳工作”的剧情分别存储在变量choice2_talent1,choice2_talent2,choice2_talent3中
choice2_talent1 = ["23岁研究生毕业选择回国发展","24岁被家长催考公务员","25岁考上地方财政局,成为父亲酒局上最大的谈资","27岁拒绝了所有相亲,成为恐婚一族","30岁下乡支教","31岁被同为支教老师的同事温暖,结婚,老公话不多但顾家","33岁老公希望你们有个孩子,但你坚决不生","35岁买了第二套房,同年生下龙凤胎","40岁老公冲动创业亏了一套","45岁每天下班鸡娃","女儿学霸儿子学渣","60岁退休给儿子带娃","65岁给女儿带娃","70岁国家补贴3胎家庭每月2万","75岁癌症已被攻克","80岁老伴离世","你吃斋念佛活到99"]
choice2_talent2 = ["21岁放弃演艺圈生活,安心读书","22岁进入传媒公司打工","25岁连升2级成为部门主管","27岁你养了1只猫咪","29岁你养了8只猫咪","32岁传媒公司不景气被裁员","33岁开启了自己的网店,并进行开启直播卖货","35岁因为直播卖货大火,成为某宝首席主播","40岁因常年高强度工作,身患乳腺癌","45岁癌症治愈,开始加入流浪宠物公益组织","60岁创立了流浪动物保护组织”,70岁,在社会各界的赞扬声中安然去世”]
choice2_talent3 = ["23岁为资本家打工,天天996","27岁凭借996的超高薪资,为父母在乡村买了大房子,并资助了两个穷苦大学生","35岁失业,在原公司楼下卖手抓饼","50岁发现当年资助的学生如今成为大学教授,每个月都来看望你"]

2️⃣剧情展开:

最后我们完成选择后剧情展开的部分:

✨当选择为1时,再判断天赋值为1、2或3,输出对应的剧情:

choice==1:逐梦天涯
talent==1:天赋选择1
talent==2:天赋选择2
talent==3:天赋选择3
choice1_talent1:剧情支线1
choice1_talent2:剧情支线2
choice1_talent3:剧情支线3

✨当选择为2时,再判断天赋值为1、2或3,输出对应的剧情

choice==1:安稳工作
talent==1:天赋选择1
talent==2:天赋选择2
talent==3:天赋选择3
choice2_talent1:剧情支线1
choice2_talent2:剧情支线2
choice2_talent3:剧情支线3

示例代码如下:

# 使用input()函数接收选择,并将选择的内容存储到变量choice中,并使用int()函数将输入的内容转化为整型
choice = int(input("成年后你面临两种选择:1.逐梦天涯  2.找一份安稳的工作,你的选择是:")) 

# 使用if elif else条件判断,判断玩家选择逐梦天涯时(choice == 1)
# 输出对应玩家天赋的剧情

if choice == 1:
    # 输出"你选择了逐梦天涯。"
    print("你选择了逐梦天涯。")
    # 判断当天赋选择为1时
    if talent == 1:
        # 调用get_list函数依次输出choice1_talent1中的剧情
        get_list(choice1_talent1)
    # 判断当天赋选择为2时
    elif talent ==2:
        # 调用get_list函数依次输出choice1_talent2中的剧情
        get_list(choice1_talent2)
    # 判断当选择情况为3时    
    elif talent ==3:
        # 调用get_list函数依次输出choice1_talent3中的剧情
        get_list(choice1_talent3)
# 使用if elif else条件判断,判断玩家选择安稳工作时(choice == 2)输出对应玩家天赋的剧情
elif choice == 2:
    # 输出"你选择了找一份安稳工作。"
    print("你选择了找一份安稳工作。")
    # 判断当天赋选择为1时
    if talent == 1:
        # 调用get_list函数依次输出choice2_talent1中的剧情
        get_list(choice2_talent1)
    # 判断当天赋选择为2时   
    elif talent ==2:
        # 调用get_list函数依次输出choice2_talent2中的剧情
        get_list(choice2_talent2)
    # 判断当选择情况为3时    
    elif talent ==3:
        # 调用get_list函数依次输出choice2_talent3中的剧情
        get_list(choice2_talent3)
else:
    print("输入错误,请重新检查代码")  

part4 【完善游戏体验】:

现在我们的人生选择模拟器已经基本完成啦~不过游戏还有很多需要提升的空间。

比如,现在的文字信息出现的很快,阅读体验不好。

✨可以在for循环依次遍历列表元素并输出的时候,使用time.sleep(2),可以使每次输出前,停顿2s

# 使用print()函数依次输出变量talent_choice中存储的内容
for i in talent_choice:    
    print(i)
    #停顿2s
    time.sleep(2)

🐍自定义设置停顿时间:

只要有文案输出的部分,我们都想自定义设置停顿时间该怎么办呢?

✨还记得我们定义了输出列表元素的函数get_list()吗~~~我们可以在函数中增加停顿时间的设置time.sleep(s)。即只需要再为get_list()增加一个时间参数就好了!之后在调用函数时,自定义设置停顿的秒数即可,例如:

get_list(talent_answer1,1),停顿1秒
get_list(talent_answer1,2),停顿2秒
get_list(talent_answer1,3),停顿3秒

示例代码如下:

# 定义get_list函数,参数为list,s作用是依次获取列表list中的元素并输出,每次输出前停顿s秒
def get_list(list,s):
    # 函数主体部分:依次从列表中提取元素
    for i in list:
        # 每次输出前,停顿s秒
        time.sleep(s)
        # 输出元素
        print(i)
# 使用if elif else条件判断,判断选择的天赋并输出相应的剧请
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()函数接收选择,并将选择的内容存储到变量choice中,并使用int()函数将输入的内容转化为整型
choice = int(input("成年后你面临两种选择:1.逐梦天涯  2.找一份安稳的工作,你的选择是:")) 

# 使用if elif else条件判断,判断玩家选择逐梦天涯时(choice == 1)输出对应玩家天赋的剧情
if choice == 1:
    # 输出"你选择了逐梦天涯。"
    print("你选择了逐梦天涯。")
    # 判断当天赋选择为1时
    if talent == 1:
        # 调用get_list函数依次输出choice1_talent1中的剧情
        get_list(choice1_talent1,1)
    # 判断当天赋选择为2时
    elif talent ==2:
        # 调用get_list函数依次输出choice1_talent2中的剧情
        get_list(choice1_talent2,1)
    # 判断当选择情况为3时    
    elif talent ==3:
        # 调用get_list函数依次输出choice1_talent3中的剧情
        get_list(choice1_talent3,1)
        
# 使用条件判断,判断玩家选择安稳工作时(choice == 2)输出对应天赋的剧情
elif choice == 2:
    # 输出"你选择了找一份安稳工作。"
    print("你选择了找一份安稳工作。")
    # 判断当天赋选择为1时
    if talent == 1:
        # 调用get_list函数依次输出choice2_talent1中的剧情
        get_list(choice2_talent1,1)
    # 判断当天赋选择为2时   
    elif talent ==2:
        # 调用get_list函数依次输出choice2_talent2中的剧情
        get_list(choice2_talent2,1)
    # 判断当选择情况为3时    
    elif talent ==3:
        # 调用get_list函数依次输出choice2_talent3中的剧情
        get_list(choice2_talent3,1)
else:
    print("输入错误,请重新检查代码") 

part5 【完结撒花~🎉🎉🎉】:

到此为止,我们已经完成了第一个文字RPG游戏,太棒啦!

回顾代码编写的过程:

1.我们通过input()函数来进行交互。

2.使用条件判断来引导分支剧情。

3.定义函数get_list(list,s)来简化代码。

4.使用time.sleep()来设置停顿。

当然,你也可以在此基础上设置更加复杂的剧情哦~
下面就让我们附上完整的源码:

❤️完整源码:

#-*- coding:utf-8 -*-
# 将选择三种天赋的文案存储在变量talent_choice中
talent_choice = ["现有以下三种天赋可供选择:",
"1.中产离异家庭,乐观,网络狂魔",
"2.中法混血,超凡美貌,家道中落",
"3.早产儿,天资聪慧,生于乡村"]
# 将选择3种天赋所触发的剧情分别存储在变量talent_answer1,talent_answer2,talent_answer3中
talent_answer1 = ["4岁上幼儿园","5岁羡慕邻居一家三口去游乐场,而你只能在自己家的电影院独自看动画片","7岁老师在班上进行了IQ测试,你IQ平平","12岁努力学习的一年希望得到父亲的认可,但父亲只关注小三的儿子","13岁开始追星,在粉丝应援群中感受到了温暖","15岁考上重点中学,翘课去看爱豆演唱会,翻墙中摔断了腿","16岁收到第一封情书,开启了第一次恋爱","17岁爱豆被评为劣迹艺人,你哭着哭着秃头了","18岁遭遇初恋男友出柜,从此一心搞事业","20岁只身前往外国深造"]
talent_answer2 = ["3岁回到上海","5岁被星探挖掘,成为广告模特","6岁父亲欠下巨额债务并消失","7岁一边上学一边还债","9岁母亲运营自媒体账号,成为百万粉丝大V","10岁你被同班同学霸凌","12岁抑郁没考上中学","13岁在家修养一年,爱上画画","15岁一边学画画一边做模特","16岁回到学校,再次成为话题人物","17岁终于还清父亲欠下的债务","18岁搬家到成都","19岁以艺术生的方式考入大学","20岁和当红流量明星一起拍广告"]
talent_answer3 = ["刚出生父母双亡","3岁吃不起拉面,被预言是天选之子","6岁用放大镜对着太阳,把家里的院子烧了","9岁用弹弓打马蜂窝,蛰了自己一脸包","12岁以优异的成绩前往县城读中学","18岁考上名牌大学,成为全村的骄傲","19岁沉迷网游无法自拔,和名叫“阿美”网游恋爱","21岁网游面基发现对方和自己同为男性,一气之下戒了网瘾"]

# 将选择“逐梦天涯”的剧情分别存储在变量choice1_talent1,choice1_talent2,choice1_talent3中
choice1_talent1 = ["23岁毕业,选择留美生活","25岁和同学一起创业,不断打怪升级","30岁公司做大做强,逐步实现财富自由","33岁拒绝了合伙人的求婚,去澳门赌场消费一个亿","35岁领养了一个10岁的小男孩,并取了初恋的名字","40岁,小三的儿子赌博,你拒绝帮他还债,并暴打他一顿","50岁重回祖国,在乡下买了块土地,种的西瓜被当地人偷了","60岁儿子宣布出家当和尚,放弃继承家业","65岁住进了养老院,和老太太因为当红明星谁最帅而大打出手","70岁患了癌症","71岁在睡梦中平静离世"]
choice1_talent2 = ["21岁和顶流拍广告成为话题女星","23岁放弃学业参加选秀","25岁出演偶像剧女主,但剧情拉垮被网友嘲讽","26岁和男明星隐婚生子","27岁离婚成为单亲妈妈","28岁,回法国学设计","32岁开设亲子服装网店","35岁在8个城市开了超过30家店铺","38岁财务自由","40岁儿子在学校遭遇校园霸凌","42岁成立基金会,帮扶被霸凌的儿童","44岁投资并参演校园霸凌题材的电影","45岁遭遇疫情,关闭20家实体店铺","50岁资产缩水但没有减少公益投入","60岁儿子去教堂当神父,你表示支持","70岁在海边别墅平静离开"]
choice1_talent3 = ["23岁和朋友炒期货,赚了人生第一桶金","24岁迷上了喝奶茶,利用第一桶金开了奶茶店","26岁奶茶店火了,你把业务拓展到了海外","30岁因长期喝太多奶茶,得了过度肥胖症","32岁努力减肥,重新变为帅小伙","40岁回到家乡,建设美丽乡村"]

# 将选择“找份安稳工作”的剧情分别存储在变量choice2_talent1,choice2_talent2,choice2_talent3中
choice2_talent1 = ["23岁研究生毕业选择回国发展","24岁被家长催考公务员","25岁考上地方财政局,成为父亲酒局上最大的谈资","27岁拒绝了所有相亲,成为恐婚一族","30岁下乡支教","31岁被同为支教老师的同事温暖,结婚,老公话不多但顾家","33岁老公希望你们有个孩子,但你坚决不生","35岁买了第二套房,同年生下龙凤胎","40岁老公冲动创业亏了一套","45岁每天下班鸡娃","女儿学霸儿子学渣","60岁退休给儿子带娃","65岁给女儿带娃","70岁国家补贴3胎家庭每月2万","75岁癌症已被攻克","80岁老伴离世","你吃斋念佛活到99"]
choice2_talent2 = ["21岁放弃演艺圈生活,安心读书","22岁进入传媒公司打工","25岁连升2级成为部门主管","27岁你养了1只猫咪","29岁你养了8只猫咪","32岁传媒公司不景气被裁员","33岁开启了自己的网店,并进行开启直播卖货","35岁因为直播卖货大火,成为某宝首席主播","40岁因常年高强度工作,身患乳腺癌","45岁癌症治愈,开始加入流浪宠物公益组织","60岁创立了流浪动物保护组织","70岁,在社会各界的赞扬声中安然去世"]
choice2_talent3 = ["23岁为资本家打工,天天996","27岁凭借996的超高薪资,为父母在乡村买了大房子,并资助了两个穷苦大学生","35岁失业,在原公司楼下卖手抓饼","50岁发现当年资助的学生如今成为大学教授,每个月都来看望你"]

# 游戏开篇设置

# 游戏开篇显示游戏标题
# 导入time模块
import time
# 打印30个"*"
print("*"*30)
# 停顿1s
time.sleep(1)  
print(" "*5+"人生选择模拟器")
# 再停顿1s
time.sleep(1)
# 再打印30个"*"
print("*"*30)

# 使用input()函数接收玩家输入名字,并将输入的名字赋值给变量name
name = input("在输入框中给自己取一个名字吧:")
# 使用print()函数格式化输出f"好的,谢谢你{name}"
print(f"好的,谢谢你{name}")

# 第一个剧情点;天赋选择
# for循环依次输出变量talent_choice中存储的内容
for i in talent_choice:  
    # 每次输出前,停顿1秒
    time.sleep(2)
    # 输出元素
    print(i)
# 使用input()函数接收玩家输入选择的天赋,使用int()函数转化为整型,并赋值给变量talent
talent = int(input("请选择一种天赋:"))

# 定义get_list函数,参数为list,s作用是依次获取列表list中的元素并输出,每次输出前停顿s秒
def get_list(list,s):
    # 函数主体部分:依次从列表中提取元素
    for i in list:
        # 每次输出前,停顿s秒
        time.sleep(s)
        # 输出元素
        print(i)
# 使用if elif else条件判断,判断选择的天赋并输出相应的剧请
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()函数接收选择,并将选择的内容存储到变量choice中,并使用int()函数将输入的内容转化为整型
choice = int(input("成年后你面临两种选择:1.逐梦天涯  2.找一份安稳的工作,你的选择是:")) 

# 使用if elif else条件判断,判断玩家选择逐梦天涯时(choice == 1)输出对应玩家天赋的剧情
if choice == 1:
    # 输出"你选择了逐梦天涯。"
    print("你选择了逐梦天涯。")
    # 判断当天赋选择为1时
    if talent == 1:
        # 调用get_list函数依次输出choice1_talent1中的剧情
        get_list(choice1_talent1,1)
    # 判断当天赋选择为2时
    elif talent ==2:
        # 调用get_list函数依次输出choice1_talent2中的剧情
        get_list(choice1_talent2,1)
    # 判断当选择情况为其他时    
    elif talent ==3:
        # 调用get_list函数依次输出choice1_talent3中的剧情
        get_list(choice1_talent3,1)
        
# 使用条件判断,判断玩家选择安稳工作时(choice == 2)输出对应天赋的剧情
elif choice == 2:
    # 输出"你选择了找一份安稳工作。"
    print("你选择了找一份安稳工作。")
    # 判断当天赋选择为1时
    if talent == 1:
        # 调用get_list函数依次输出choice2_talent1中的剧情
        get_list(choice2_talent1,1)
    # 判断当天赋选择为2时   
    elif talent ==2:
        # 调用get_list函数依次输出choice2_talent2中的剧情
        get_list(choice2_talent2,1)
    # 判断当选择情况为其他时    
    elif talent ==3:
        # 调用get_list函数依次输出choice2_talent3中的剧情
        get_list(choice2_talent3,1)
else:
    print("输入错误,请重新检查代码") 

如果你仔细观察的话,会发现我在第一行加了这么一句话:

#-*- coding:utf-8 -*-

✨本来python3默认使用UTF-8格式,所以开头一般不用加 # – coding:utf-8 –
但是有的中文中还是会出现无法识别的情况,这时候就需要在第一行加上这句。我们这里主要是因为文字列表里文字中间的英文逗号可能和中文逗号混淆的问题,如果不加的话可能就无法运行:

在这里插入图片描述


🐍好了,到这里第一个项目算是完美结束了,相信你对RPG游戏也有了一定的了解,或许你已经准备着手制作自己的RPG游戏了!!!哈哈,如果是这样的话那就恭喜你了,我中华游戏界又将新添一位大神了!🎉🎉🎉后续还会陆续发布新的项目,敬请期待吧!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/952510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未找到System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid) 方法错误

记录此问题实际上是由于.netFrame框架配置太高引起的,一般常见于二次开发中,因为二次开发一般都是引用的com组件,在引用过程中后台代码调用了 Method not found: System.Type System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(Syste…

研发规范第十三讲:阿里 - 如何进行项目稳定性建设

研发规范第十三讲:阿里 - 如何进行项目稳定性建设 本文是研发规范第13讲,阿里巴巴高级技术专家云狄将结合自己多年的经验,从开发规范、开发流程、技术规划与管理三个角度出发,分享对技术TL这一角色的理解与思考,欢迎一…

2、QT的信号与槽

一、什么是信号与槽 一个对象发送一个信号出去,另外一个对象接收到该信号后,会触发相应的槽函数 二、信号与槽的语法 connect(信号的发送者,SIGNAL(信号名称),信号的接收者,SLOT(槽函数)); 1、写法: QT 4 的写法 connect(sende…

Python爬虫:一个爬取豆瓣电影人像的小案例

从谷歌浏览器的开发工具进入 选择图片右键点击检查 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1b38c2a942c441fb8cb545a28bb35015.png 翻页之后发现网址变化的只有start数值,每次变化值为30 Python代码 import requests from bs4 import BeautifulSou…

零基础安装pycuda

零基础安装pycuda 前言安装Visual Studio安装C/C环境添加环境变量 安装pycuda查看系统位数查看python版本下载whl文件 前言 最近开始学习基于python的cuda编程,记录一下pycuda的安装。 在安装pycuda之前,首先需要有NVIDIA的独立显卡并且要安装CUDA和CUD…

程序与进程

一、程序是怎么被执行的 1.在程序中,由引导代码去调用程序中得main函数,而这个过程由链接器完成,链接器将引导代码链接到我们的应用程序构成可执行文件。 2.程序运行需要通过操作系统的加载器来实现,加载器是操作系统中的程序&a…

【javascript实操记录】

功能描述: 1. 利用split()方法对测试数据进行解析:学科,日期 2. 将测试数据封装成对象数组的格式 3. 使用数组的sort()方法和Date对象,将测试数据按照日期从早到晚进行排序 4. 表格数据的静态填充 5. 距离最近考试的倒计时天…

使用 NestJS 和 Prisma 构建 REST API

NestJS是Node.js框架之一,它最近获得了很多开发人员的喜爱和牵引力。本文将教你如何使用NestJS,Prisma,PostgreSQL和Swagger构建后端REST API。 文章目录 介绍您将使用的技术 先决条件假定的知识开发环境 生成 NestJS 项目创建 PostgreSQL 实…

链路聚合原理

文章目录 一、定义二、功能三、负载分担四、分类五、常用命令 首先可以看下思维导图,以便更好的理解接下来的内容。 一、定义 在网络中,端口聚合是一种将连接到同一台交换机的多个物理端口捆绑在一起,形成一个逻辑端口的技术。通过端口聚合&…

数据结构--5.0.1图的存储结构

目录 一、邻接矩阵(无向图) 二、邻接矩阵(有向图) 三、邻接矩阵(网) 四、邻接表(无向图) 五、邻接表(有向图) ——图的存储结构相比较线性表与树来说就复…

AIGC全流程赋能:从剧本到宣发,影视内容全新呈现

“猕猴桃”视频平台在今日发布了2023年第二季度财报,首次公布引入AIGC辅助剧本评估。内部数据显示,AIGC帮助提升剧本评估、预算规划等效率超过90%。“猕猴桃”视频平台还通过AIGC技术实现对影视剧的剧情理解,从而改进搜索结果、推荐和用户互动…

kubernetes deploy standalone mysql demo

kubernetes 集群内部署 单节点 mysql ansible all -m shell -a "mkdir -p /mnt/mysql/data"cat mysql-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volumelabels:type: local spec:storageClassName: manualcapacity:storage: 5Gi…

IAR 编译优化 #pragma optimize

在IAR工具菜单栏中 点击 【help】-> 【Serach】 搜索optimize #pragma optimize[goal][level][vectorize][disable] 如果想设置优化速度到最高等级,则如下设置即可 #pragma optimizespeed high int SmallAndUsedOften() { /* Do something here. */ }

分布式事务学习笔记

MySQL事务 1、 MySQL事务隔离级别 读未提交 (READ UNCOMMITTED) (存在脏读的问题)读已提交(READ COMMITTED)可重复读(REPEATABLE READ)串行化(SERIALIZABLE)…

LCD驱动

一、Linux 下 LCD 驱动简析 1.与裸机的异同 在 Linux 中应用程序最终也是通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息,但是Linux系统的内存管理严格,使用显存需要申请,因为虚拟内存的存在,驱动程序设置的显存和应…

python 栈、用栈实现综合计算器

栈的基本介绍 出栈(pop)示意图 入栈(push)示意图 栈的应用场景 数组模拟栈 思路分析 代码实现 # 用数组模拟栈 class ArrayStack:def __init__(self, size):self.max_size size # 栈的最大容量self.top -1 # top 表示栈顶…

Python项目实战之《飞机大战游戏》

目录 一、Pygame库包简介 二、Pygame安装 三、项目开发思路 3.1前言 3.2飞机大战开发步骤 一、Pygame库包简介 Pygame是一个基于python的游戏开发库,它提供一系列的工具和接口,使开发人员能够轻松的创建各种类型的游戏,包括2D游戏和简单…

ptmalloc源码分析 - _int_malloc函数实现fastbins(06)

目录 一、_int_malloc内存分配的核心函数 二、bins的管理和chunk的结构 三、_int_malloc函数分配前的两个检查 四、REMOVE_FB原子实现fastbins的链表操作 五、fastbins的具体分配实现 一、_int_malloc内存分配的核心函数 前几章节,我们主要讲解了状态机malloc_…

xml

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…

nginx反向代理 负载均衡

一、反向代理: 1.反向代理介绍: 反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。 Nginx 除了可以在企业提供高性能的web…