小言_互联网的博客

<人生重开模拟器>——《Python项目实战》

328人阅读  评论(0)

 目录

1.模拟实现 "人生重开模拟器"

1.1 问题导引:

1.2 问题分析:

2. 模拟实现分析及步骤: 

3.完整源码:

4.写在最后的话:

后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                           ——By 作者:新晓·故知


1.模拟实现 "人生重开模拟器"

1.1 问题导引:

GIF演示:
“人生重开模拟器”是一款文字类小游戏. 玩家可根据提示输入角色的初始属性之后, 就可以开启不同的人生经历.  具体可以网上搜索“人生重启模拟器”,就能找到这款游戏的许多版本。

 

这里我们找到了一款版本用于演示: (以下图片源于网络,这里只用于演示学习)
链接网址:人生重启模拟器
游戏界面:

 这里我们选择“技能”拉满选项(幻想一下那些我们所羡慕的故事里的开挂人生):

 根据个人选择调整初始属性:

 自动生成“重启”的人生:

 人生总结:

以上就是我们在网上搜索用于演示的“人生重启模拟器”游戏,原来故事里的“开挂人生”是如此的顺利平坦,令人羡慕,作者自愧不如,而那终究是幻想,认清现实,依旧负重前行! 

友情提示:适当参与游戏放松,过度游戏有害健康!

1.2 问题分析:

其实这款游戏的底层逻辑就是编程语言语句的交互运用。通过不同的语句交互(例如顺序语句、循环语句、判断语句等)根据不同的数据数值,执行相应的语句,打印相应的文字。

那么我们接下来就使用Python语言模拟实现这款游戏。由于完整的程序代码较多, 此处我们只实现其中的一部分逻辑,用于演示并巩固我们之前所学的Python的知识。

2. 模拟实现分析及步骤: 

(1) 设置角色初始属性
在游戏中我们设定四个属性 .
  • 颜值 (face)
  • 体质 (strong)
  • 智力 (iq)
  • 家境 (home)
我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20.
如果玩家输入的初始属性不合理 , 就提示输入有误 , 重新输入。

(2)  设置生成角色的性别
通过 random.randint(1, 6) 生成一个 [1, 6] 的随机整数。
  • 如果是单数, 则性别设为男孩
  • 如果是双数, 则性别设为女孩.
男孩和女孩会遇到不同的事件 .

(3) 设置角色的出生环境及背景
首先按照家境 (home), 分成四个档位 .
  • 10 是第一档. 加成最高
  • [7, 9] 是第二档. 也有一些加成
  • [4, 6] 是第三档. 加成较少
  • [1, 3] 是第四档. 会扣掉属性.
生成 [1, 3] 的随机数 , 用来表示每一种细分情况 .
这里的代码主要就是各种 if else 构成

(4)对角色的不同人生阶段添加测试用例:
按照年龄 , 把人生经历分成四个阶段 :
  • 童年阶段 [1, 10]
  • 青年阶段 [11, 20]
  • 壮年阶段 [20, 50]
  • 老年阶段 50 岁以上.
每个阶段都会有不同的精力和事件发生 .
  • 童年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
  • 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化.
  • 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性.
  • 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高.
此处我们以童年为例 , 简单实现一下这里的处理逻辑 .
  • 使用 for 循环, 按照年龄循环起来.
  • 针对每一年, 先生成[1, 3]档,  根据不同的随机数值, 来触发不同的事件.
  • 根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else 的方式来组织.
  • 不同的事件可能会对属性有正面/负面的影响.
  • 在每一年的最后, 打印这一年遇到的事情.
  • 如果夭折, 则直接 sys.exit(0) 退出程序.
  • 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果.

童年阶段:

说明:由于是模拟实现“人生重启模拟器”,因此我们把基本原理学会后,可自行添加“脑洞大开”的人生经历,这里只简单的举例用于演示。

青年阶段:

 壮年阶段

 老年阶段:

3.完整源码:


   
  1. # 人生重开模拟器
  2. import random
  3. import sys
  4. import time
  5. print( "***************************************************")
  6. print( '* *')
  7. print( '* 《人生模拟重启器》——Python版 *')
  8. print( '* *')
  9. print( '* *')
  10. print( '* 但惜今生,不问来世 *')
  11. print( '* ——By 作者:新晓·故知 *')
  12. print( '* *')
  13. print( "***************************************************")
  14. #1. 设置角色初始属性
  15. # 颜值、体质、智力、家境,这几项属性点数总和不能超过设定的阈值(这里我们设置为20), 每一项取值都是 1-10 之间
  16. # 使用循环, 使玩家在输入错误的时候, 可以重新输入.
  17. while True:
  18. #尽管是while True,但不一定是死循环,可以在代码块里使用break跳出整个循环
  19. print( "请设置初始属性(可用属性点总数为 20)")
  20. face = int( input( "请输入颜值属性点数(1-10):"))
  21. strong = int( input( "请输入体质属性点数(1-10):"))
  22. iq = int( input( "请输入智力属性点数(1-10):"))
  23. home = int( input( "请输入家境属性点数(1-10):"))
  24. # 通过使用条件语句, 对于玩家输入的属性值做出校验检查
  25. # 以下这段逻辑, 也可以使用elif:使用 elif 则是多个分支只能进一个, 一旦某个条件满足了, 就不会再走其他的分支了.
  26. # 这里虽然没有使用 elif , 但是使用了 continue, 一旦某个条件满足, continue 就会跳出本次循环, 后续的条件判定不再执行
  27. if face < 1 or face > 10:
  28. print( "颜值属性点数设置有误!")
  29. continue
  30. if strong < 1 or strong > 10:
  31. print( "体质属性点数设置有误!")
  32. continue
  33. if iq < 1 or iq > 10:
  34. print( "智力属性点数设置有误!")
  35. continue
  36. if home < 1 or home > 10:
  37. print( "家境属性点数设置有误!")
  38. continue
  39. if face + strong + iq + home > 20: # 如果当前的条件都没有被触发, 则认为玩家输入的数据是合法的.
  40. print( "属性点数设置错误!属性点数之和超出阈值(20)")
  41. continue
  42. # 此时就可以跳出循环结束输入了
  43. print( "初始属性设置完成!")
  44. print( f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
  45. break
  46. # 2.设置生成角色的性别
  47. # 使用 random.randint(beg, end), 就能生成 [beg, end] 随机整数
  48. point = random.randint( 1, 6)
  49. #此处的random是python中的一个模块! 相当于C++中的STL(封装好的代码块,我们直接使用即可!)
  50. #这里使用其他模块,需要先使用import语句,把模块的名字“导入”进来,pycharm有自动导入的功能
  51. # print(f'point = {point}')
  52. if point % 2 == 1:
  53. gender = 'boy'
  54. print( '你出生了,是个男孩。')
  55. else:
  56. gender = 'girl'
  57. print( '你出生了,是个女孩。')
  58. # 3.设置角色的出生环境及背景
  59. # 为了简单方便, 这里我们就直接生成 1-3 的随机数进行模拟
  60. #这里我们将角色的家庭背景及环境设置四个档位梯度,不同档位会对属性有加成或减低
  61. point = random.randint( 1, 3)
  62. if home == 10:
  63. # 第一档
  64. print( '你出生在首都, 你的父母是高官政要')
  65. home += 1
  66. iq += 1
  67. face += 1
  68. elif 7 <= home <= 9:
  69. # 第二档
  70. if point == 1:
  71. print( '你出生在大城市, 父母是公务员')
  72. face += 2
  73. elif point == 2:
  74. print( '你出生在大城市, 父母是企业高管')
  75. home += 2
  76. else:
  77. print( '你出生在大城市, 父母是大学教授')
  78. iq += 2
  79. elif 4 <= home <= 6:
  80. # 第三档
  81. if point == 1:
  82. print( '你出生在县城, 你的父母是医生')
  83. strong += 1
  84. elif point == 2:
  85. print( '你出生在乡镇, 你的父母是老师')
  86. iq += 1
  87. else:
  88. print( '你出生在乡镇, 你的父母是个体户')
  89. home += 1
  90. else:
  91. # 第四档
  92. if point == 1:
  93. print( '你出生在农村, 你的父母是辛苦劳作的农民')
  94. strong += 1
  95. face -= 2
  96. elif point == 2:
  97. print( '你出生在农村, 你的父母奔波劳碌,家庭状况不是很好')
  98. home -= 1
  99. else:
  100. print( '你出生在穷乡僻壤, 你的父母艰辛茹苦,抚养你长大')
  101. strong -= 1
  102. print( f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
  103. # 4.童年阶段
  104. for age in range( 1, 11):
  105. # 把一整年的打印都整理到一个字符串中, 在这一年的结尾统一打印
  106. info = f'你今年 {age} 岁. '
  107. # 生成一个 [1, 3] 的随机整数.
  108. point = random.randint( 1, 3)
  109. # 接下来编写各种事件的代码
  110. # 性别触发的事件
  111. if gender == 'girl' and home <= 3 and point == 1:
  112. info += '你的家庭封建思想重男轻女,你不幸被遗弃!'
  113. print(info)
  114. print( '游戏结束!')
  115. sys.exit( 0)
  116. #sys也是python中提供的一个模块,直接使用即可
  117. # 体质触发的事件
  118. # 使用 elif 是为了保证每年只触发一个事件!
  119. elif strong < 6 and point < 3:
  120. info += '你患了一场大病'
  121. if home >= 5:
  122. info += '在父母的悉心照料下, 你康复了'
  123. strong += 1
  124. home -= 1
  125. else:
  126. info += '你的父母无法照料你, 你的身体每况愈下'
  127. strong -= 1
  128. # 颜值触发的事件
  129. elif face <= 4 and age >= 7:
  130. info += '你由于很丑, 其他小朋友不喜欢你. '
  131. if iq > 5:
  132. info += '你决定通过学习提升自己!'
  133. iq += 1
  134. else:
  135. if gender == 'boy':
  136. info += '你和别的小朋友经常打架!'
  137. strong += 1
  138. iq -= 1
  139. else:
  140. info += '你经常被别的小朋友欺负!'
  141. strong -= 1
  142. # 智商触发的事件
  143. elif iq < 5:
  144. info += '你有点呆呆的 '
  145. if home >= 8 and age >= 6:
  146. info += '你的父母把你送到更好的学校学习'
  147. iq += 1
  148. elif 4 <= home <= 7:
  149. if gender == 'boy':
  150. info += '你有运动天赋,立志成为运动员'
  151. strong += 1
  152. else:
  153. info += '你学会了提升外在形象'
  154. face += 1
  155. else:
  156. # 家境 < 4
  157. info += '你虽然出身条件不好,但却有快乐的童年'
  158. if point == 1:
  159. strong -= 1
  160. elif point == 2:
  161. iq -= 1
  162. else:
  163. pass
  164. # 健康成长事件
  165. else:
  166. info += '你一生健康,没有患过大病 '
  167. if point == 1:
  168. info += '你的身体很强壮'
  169. strong += 1
  170. elif point == 2:
  171. info += '你的自身条件不断提升'
  172. face += 1
  173. else:
  174. # 无事发生
  175. pass
  176. # 打印这一年发生的事情
  177. print(info)
  178. print( f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
  179. print( '------------------------------------------------------')
  180. # 为了方便观察, 加一个小小的暂停操作
  181. time.sleep( 1)
  182. #5.青年阶段
  183. for age in range( 11, 20):
  184. info = f'你今年{age}岁.'
  185. point = random.randint( 1, 3)
  186. #性别触发的事件
  187. if gender == 'boy' and home <= 3 and point == 1:
  188. info += '你爱而不得,你喜欢的人很讨厌你...'
  189. #体质触发的事件
  190. elif strong > 6 and point < 3:
  191. info += '你参加省级运动会,并获得了金牌'
  192. if home >= 5:
  193. info += '你被以"体育特长生"的名义保送到顶尖大学深造'
  194. home += 1
  195. strong += 1
  196. else:
  197. info += '你的体育天赋被埋没...'
  198. home -= 2
  199. face -= 1
  200. #颜值触发的事件
  201. elif face >= 5 and home >= 7:
  202. info += '你被许多人喜欢,如众星捧月'
  203. if iq > 5:
  204. info += '你颜值、家境、才华并存,人生顺利平坦'
  205. home += 1
  206. else:
  207. info += '你出身条件好,但却不能自立自强'
  208. iq -= 2
  209. # 打印这一年发生的事情
  210. print(info)
  211. print( f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
  212. print( '------------------------------------------------------')
  213. # 为了方便观察, 加一个小小的暂停操作
  214. time.sleep( 1)
  215. #6.壮年阶段
  216. for age in range( 20, 50):
  217. info = f'你今年{age}岁.'
  218. point = random.randint( 1, 3)
  219. #性别触发的事件
  220. if gender == 'boy' and iq > 7:
  221. info += '你事业有成,家庭和睦'
  222. home += 2
  223. face += 1
  224. else:
  225. if home <= 3:
  226. info += '你自立自强,不接受命运安排'
  227. home += 2
  228. strong += 2
  229. else:
  230. info += '你平庸一生...'
  231. # 打印这一年发生的事情
  232. print(info)
  233. print( f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
  234. print( '------------------------------------------------------')
  235. # 为了方便观察, 加一个小小的暂停操作
  236. time.sleep( 1)
  237. #7.老年阶段
  238. for age in range( 50, 110):
  239. info = f'你今年{age}岁.'
  240. point = random.randint( 1, 3)
  241. #性别触发的事件
  242. if gender == 'girl' and home >= 6:
  243. info += '你子孙满堂,晚年享福'
  244. home += 1
  245. strong += 1
  246. #体质触发的事件
  247. elif strong > 5 and iq > 6:
  248. info += '你是工作单位骨干,领导成员攻坚克难'
  249. if face >= 5:
  250. info += '你被应邀担任单位发言人'
  251. home += 2
  252. else:
  253. #Do Nothing!
  254. pass
  255. # 打印这一年发生的事情
  256. print(info)
  257. print( f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
  258. print( '------------------------------------------------------')
  259. # 为了方便观察, 加一个小小的暂停操作
  260. time.sleep( 1)

说明:

import random
import sys
import time

这是导入的封装好的模块,直接使用,方便简单。

4.写在最后的话:

 

 

“从某一方面来说,人生是选择出来的。虽然我们不能选择和决定我们的原生家庭,但是我们以后的人生走向却取决于我们此刻的选择与努力!
不必抱怨命运不公,我们从底层一路走来,见识过许许多多的人和事,也学会从不同角度看待这个社会。我们所经历的困苦与磨难,从某种角度而言,何尝不是独特的人生经历呢?
我们的人生,非言语所能概括和衡量!那些外人看不出、猜不透的故事才组成了我们的这一生!不要轻易否定一切,从不同角度看待,或许又是另一种理解。
我们的未来就在我们的脚下,但行好事,负重前行,别停留!”
 

后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                           ——By 作者:新晓·故知


转载:https://blog.csdn.net/m0_57859086/article/details/127464321
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场