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

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

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


文章目录


一、文字游戏(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:字符串拼接是指在输出时用"+"号连接需要输出的各部分内容。

示例如下:

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

2️⃣ 优化游戏开始:

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

让我们一起试一试吧~

py 复制代码
# 游戏开篇设置

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

👉想必你也发现了,文字都是同时打印出来的,感觉过于流畅了!不符合人生重开的那种意境!如果能每隔几秒打印一句就完美了!

哈哈,time模块里的sleep()函数就很好地解决了这个问题!


3️⃣导入时间模块:

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

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

例如:

py 复制代码
time.sleep(5)# 表示停顿5秒
time.sleep(3)# 表示停顿3秒

🐍time模块:

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

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

修改后的代码如下:

py 复制代码
# 游戏开篇设置

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

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

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

1.使用for循环遍历并输出列表poem中的诗歌。

2.使用停顿函数,设置每停顿2秒输出一句诗歌。

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

py 复制代码
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()函数之后,我们就可以进行简单的人机交互了!

py 复制代码
# 游戏开篇设置

# 游戏开篇显示游戏标题
# 导入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来存储选择天赋的文案内容,存储形式为列表。

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

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

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

2️⃣请玩家输入选择:

py 复制代码
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。

示例代码如下:

py 复制代码
talent = int(input("请选择一种天赋:"))

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


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

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

py 复制代码
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中的元素。

py 复制代码
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函数可以实现将列表中的元素依次输出。

py 复制代码
#定义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函数的参数,从而输出相应的剧情。

py 复制代码
#使用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啥的作为变量名。

示例代码如下:

py 复制代码
#将选择"逐梦天涯"的剧情分别存储在变量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

示例代码如下:

py 复制代码
# 使用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

py 复制代码
# 使用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秒

示例代码如下:

py 复制代码
# 定义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()来设置停顿。

当然,你也可以在此基础上设置更加复杂的剧情哦~

下面就让我们附上完整的源码:

❤️完整源码:

py 复制代码
#-*- 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("输入错误,请重新检查代码") 

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

py 复制代码
#-*- coding:utf-8 -*-

✨本来python3默认使用UTF-8格式,所以开头一般不用加 # -- coding:utf-8 --

但是有的中文中还是会出现无法识别的情况,这时候就需要在第一行加上这句。我们这里主要是因为文字列表里文字中间的英文逗号可能和中文逗号混淆的问题,如果不加的话可能就无法运行:


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

相关推荐
时光の尘3 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
以后不吃煲仔饭16 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师17 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者21 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟23 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟41 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光1 小时前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用1 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
B站计算机毕业设计超人1 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
Dola_Pan1 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法