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

news2024/11/20 0:22:26

 目录

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.完整源码:

# 人生重开模拟器

import random
import sys
import time

print("***************************************************")
print('*                                                 *')
print('*             《人生模拟重启器》——Python版            *')
print('*                                                 *')
print('*                                                 *')
print('*              但惜今生,不问来世                    *')
print('*                             ——By  作者:新晓·故知 *')
print('*                                                 *')
print("***************************************************")

#1. 设置角色初始属性
# 颜值、体质、智力、家境,这几项属性点数总和不能超过设定的阈值(这里我们设置为20), 每一项取值都是 1-10 之间

# 使用循环, 使玩家在输入错误的时候, 可以重新输入.
while True:
    #尽管是while True,但不一定是死循环,可以在代码块里使用break跳出整个循环
    print("请设置初始属性(可用属性点总数为 20)")
    face = int(input("请输入颜值属性点数(1-10):"))
    strong = int(input("请输入体质属性点数(1-10):"))
    iq = int(input("请输入智力属性点数(1-10):"))
    home = int(input("请输入家境属性点数(1-10):"))

    # 通过使用条件语句, 对于玩家输入的属性值做出校验检查
    # 以下这段逻辑, 也可以使用elif:使用 elif 则是多个分支只能进一个, 一旦某个条件满足了, 就不会再走其他的分支了.
    # 这里虽然没有使用 elif , 但是使用了 continue, 一旦某个条件满足, continue 就会跳出本次循环, 后续的条件判定不再执行
    if face < 1 or face > 10:
        print("颜值属性点数设置有误!")
        continue
    if strong < 1 or strong > 10:
        print("体质属性点数设置有误!")
        continue
    if iq < 1 or iq > 10:
        print("智力属性点数设置有误!")
        continue
    if home < 1 or home > 10:
        print("家境属性点数设置有误!")
        continue
    if face + strong + iq + home > 20:  # 如果当前的条件都没有被触发, 则认为玩家输入的数据是合法的.
        print("属性点数设置错误!属性点数之和超出阈值(20)")
        continue

    # 此时就可以跳出循环结束输入了
    print("初始属性设置完成!")
    print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
    break

# 2.设置生成角色的性别
# 使用 random.randint(beg, end), 就能生成 [beg, end] 随机整数

point = random.randint(1, 6)
#此处的random是python中的一个模块! 相当于C++中的STL(封装好的代码块,我们直接使用即可!)
#这里使用其他模块,需要先使用import语句,把模块的名字“导入”进来,pycharm有自动导入的功能
# print(f'point = {point}')
if point % 2 == 1:
    gender = 'boy'
    print('你出生了,是个男孩。')
else:
    gender = 'girl'
    print('你出生了,是个女孩。')

# 3.设置角色的出生环境及背景
# 为了简单方便, 这里我们就直接生成 1-3 的随机数进行模拟
#这里我们将角色的家庭背景及环境设置四个档位梯度,不同档位会对属性有加成或减低
point = random.randint(1, 3)
if home == 10:
    # 第一档
    print('你出生在首都, 你的父母是高官政要')
    home += 1
    iq += 1
    face += 1
elif 7 <= home <= 9:
    # 第二档
    if point == 1:
        print('你出生在大城市, 父母是公务员')
        face += 2
    elif point == 2:
        print('你出生在大城市, 父母是企业高管')
        home += 2
    else:
        print('你出生在大城市, 父母是大学教授')
        iq += 2
elif 4 <= home <= 6:
    # 第三档
    if point == 1:
        print('你出生在县城, 你的父母是医生')
        strong += 1
    elif point == 2:
        print('你出生在乡镇, 你的父母是老师')
        iq += 1
    else:
        print('你出生在乡镇, 你的父母是个体户')
        home += 1
else:
    # 第四档
    if point == 1:
        print('你出生在农村, 你的父母是辛苦劳作的农民')
        strong += 1
        face -= 2
    elif point == 2:
        print('你出生在农村, 你的父母奔波劳碌,家庭状况不是很好')
        home -= 1
    else:
        print('你出生在穷乡僻壤, 你的父母艰辛茹苦,抚养你长大')
        strong -= 1
print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')

# 4.童年阶段
for age in range(1, 11):
    # 把一整年的打印都整理到一个字符串中, 在这一年的结尾统一打印
    info = f'你今年 {age} 岁. '
    # 生成一个 [1, 3] 的随机整数.
    point = random.randint(1, 3)
    # 接下来编写各种事件的代码
    # 性别触发的事件
    if gender == 'girl' and home <= 3 and point == 1:
        info += '你的家庭封建思想重男轻女,你不幸被遗弃!'
        print(info)
        print('游戏结束!')
        sys.exit(0)
        #sys也是python中提供的一个模块,直接使用即可
    # 体质触发的事件
    # 使用 elif 是为了保证每年只触发一个事件!
    elif strong < 6 and point < 3:
        info += '你患了一场大病'
        if home >= 5:
            info += '在父母的悉心照料下, 你康复了'
            strong += 1
            home -= 1
        else:
            info += '你的父母无法照料你, 你的身体每况愈下'
            strong -= 1
    # 颜值触发的事件
    elif face <= 4 and age >= 7:
        info += '你由于很丑, 其他小朋友不喜欢你. '
        if iq > 5:
            info += '你决定通过学习提升自己!'
            iq += 1
        else:
            if gender == 'boy':
                info += '你和别的小朋友经常打架!'
                strong += 1
                iq -= 1
            else:
                info += '你经常被别的小朋友欺负!'
                strong -= 1
    # 智商触发的事件
    elif iq < 5:
        info += '你有点呆呆的 '
        if home >= 8 and age >= 6:
            info += '你的父母把你送到更好的学校学习'
            iq += 1
        elif 4 <= home <= 7:
            if gender == 'boy':
                info += '你有运动天赋,立志成为运动员'
                strong += 1
            else:
                info += '你学会了提升外在形象'
                face += 1
        else:
            # 家境 < 4
            info += '你虽然出身条件不好,但却有快乐的童年'
            if point == 1:
                strong -= 1
            elif point == 2:
                iq -= 1
            else:
                pass
    # 健康成长事件
    else:
        info += '你一生健康,没有患过大病 '
        if point == 1:
            info += '你的身体很强壮'
            strong += 1
        elif point == 2:
            info += '你的自身条件不断提升'
            face += 1
        else:
            # 无事发生
            pass

    # 打印这一年发生的事情
    print(info)
    print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
    print('------------------------------------------------------')
    # 为了方便观察, 加一个小小的暂停操作
    time.sleep(1)

#5.青年阶段
for age in range(11,20):
    info = f'你今年{age}岁.'
    point = random.randint(1,3)
    #性别触发的事件
    if gender == 'boy' and home <= 3 and point == 1:
        info += '你爱而不得,你喜欢的人很讨厌你...'

    #体质触发的事件
    elif strong > 6 and point < 3:
        info += '你参加省级运动会,并获得了金牌'
        if  home >= 5:
            info += '你被以"体育特长生"的名义保送到顶尖大学深造'
            home += 1
            strong += 1
        else:
            info += '你的体育天赋被埋没...'
            home -= 2
            face -= 1
    #颜值触发的事件
    elif face >=5 and home >= 7:
        info += '你被许多人喜欢,如众星捧月'
        if iq > 5:
            info += '你颜值、家境、才华并存,人生顺利平坦'
            home += 1
        else:
            info += '你出身条件好,但却不能自立自强'
            iq -= 2
    # 打印这一年发生的事情
    print(info)
    print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
    print('------------------------------------------------------')
    # 为了方便观察, 加一个小小的暂停操作
    time.sleep(1)
#6.壮年阶段
for age in range(20,50):
    info = f'你今年{age}岁.'
    point = random.randint(1,3)
    #性别触发的事件
    if gender == 'boy' and iq > 7:
        info +='你事业有成,家庭和睦'
        home += 2
        face += 1
    else:
        if home <= 3:
            info += '你自立自强,不接受命运安排'
            home +=2
            strong +=2
        else:
            info += '你平庸一生...'
    # 打印这一年发生的事情
    print(info)
    print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
    print('------------------------------------------------------')
    # 为了方便观察, 加一个小小的暂停操作
    time.sleep(1)
#7.老年阶段
for age in range(50,110):
    info = f'你今年{age}岁.'
    point = random.randint(1,3)
    #性别触发的事件
    if gender == 'girl' and home >= 6:
        info += '你子孙满堂,晚年享福'
        home += 1
        strong += 1
    #体质触发的事件
    elif strong > 5 and  iq > 6:
        info += '你是工作单位骨干,领导成员攻坚克难'
        if face >= 5:
            info += '你被应邀担任单位发言人'
            home += 2
        else:
            #Do Nothing!
            pass
    # 打印这一年发生的事情
    print(info)
    print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
    print('------------------------------------------------------')
    # 为了方便观察, 加一个小小的暂停操作
    time.sleep(1)

说明:

import random
import sys
import time

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

4.写在最后的话:

 

 

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

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

                                                                           ——By 作者:新晓·故知

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

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

相关文章

数据结构与算法----栈和队列(Stack Queue)

文章目录栈栈的操作栈的初始化入栈出栈取栈顶的元素判断栈是否为空求栈中数据元素的个数遍历栈中的所有元素清空栈栈的存储结构顺序存储链式存储顺序栈和链栈的区别栈的实战题目队列队列的操作入队出队遍历队列清空队列队列的存储结构顺序存储循环队列链式存储队列实战题目总结…

快速发布windows上的web项目【免费内网穿透】

快速发布windows上的web项目【免费内网穿透】 文章目录快速发布windows上的web项目【免费内网穿透】什么是cpolar内网穿透&#xff1f;概述1. 搭建一个静态Web站点1.1 下载演示站点1.2 本地运行演示站点1.3 本地浏览测试站点是否正常2. 注册并安装cpolar内网穿透3. 本地web站点…

玩转 CSS 的艺术之美

你将获得 深刻理解各种CSS原理 解构不为人知的CSS技巧 概念、技巧、场景三合一&#xff0c;实现“神奇”效果 强化吸收CSS知识体系&#xff0c;玩转各种神操作骚技巧 作者介绍 JowayYoung&#xff0c;资深前端工程师&#xff0c;目前就职于网易互动娱乐事业群&#xff0c…

前端面试之道

小册介绍 如果需要用一句话来介绍这本小册的话&#xff0c;「一年磨一剑」应该是最好的答案了。 为什么这样说呢&#xff1f;在出小册之前&#xff0c;我收集了大量的一线大厂面试题&#xff0c;通过大数据统计出了近百个常考知识点&#xff0c;然后根据这些知识点写成了这本…

《深度学习》:CANN训练营_昇腾AI入门课学习笔记(第二章 TensorFlow模型迁移训练)

文章目录第二章 TensorFlow模型迁移&训练本章学习目标AI模型开发基础知识入门Python水平要求了解深度学习和神经网络了解TensorFlow AI框架了解基于CANN的模型开发流程&#xff08;重点&#xff09;TensorFlow AI模型迁移详解为什么要做模型迁移TensorFlow AI模型自动迁移详…

【Python数据科学快速入门系列 | 10】Matplotlib数据分布图表应用总结

这是机器未来的第59篇文章 原文首发地址&#xff1a;https://robotsfutures.blog.csdn.net/article/details/127484292 《Python数据科学快速入门系列》快速导航&#xff1a; 【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念【Python数据科学快速入门系列 | 02】创…

安卓讲课笔记3.3 相对布局

文章目录零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;相对布局概述1、布局特点2、继承关系图3、常用属性&#xff08;1&#xff09;相对于父容器居中&#xff08;2&#xff09;相对于父容器对齐&#xff08;3&#xff09;相对于其它控件位置&#xff08;4&…

牛客网经典Java面试常见题

个人主页&#xff1a;熬夜磕代码丶 作品专栏: 数据结构与算法 我变秃了&#xff0c;也变强了 给大家介绍一款程序员必备刷题平台——牛客网 点击注册一起刷题收获大厂offer吧 文章目录一、二叉搜索树与双向链表二、从尾到头打印链表三、调整数组奇数位于偶数前面四、删除链表…

大数据毕业设计可视化大屏前后端项目分享

1、前言 很久没有分享过可视化大屏的项目了&#xff0c;距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余。当时分享这篇博客没想到会收获这么多的阅读量&#xff0c;并且在刚发布的时候&#xff0c;还上了CSDN的博客热搜2&#xff…

gcc环境下演示C语言变长数组

前言 &#x1f47b;作者&#xff1a;龟龟不断向前 &#x1f47b;简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术计算机智能视觉识别算法&#xff0c;且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽&#xff0c;SuiJiAi将立即记录和警…

致敬第一个1024(第一次Java代码编程)

昨日&#xff0c;笔者刚刚下载好IDEA&#xff0c;今日&#xff0c;笔者将会实现第一次的Java代码&#xff01;&#xff01;信心满满&#xff01;&#xff01;下面请看笔者的代码吧&#xff01;&#xff01;骄傲的小心&#xff0c;已经澎湃&#xff01; 因此&#xff0c;本篇文…

如何实现一个SQL解析器

作者&#xff1a;vivo 互联网搜索团队- Deng Jie 一、背景 随着技术的不断的发展&#xff0c;在大数据领域出现了越来越多的技术框架。而为了降低大数据的学习成本和难度&#xff0c;越来越多的大数据技术和应用开始支持SQL进行数据查询。SQL作为一个学习成本很低的语言&#…

【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片

一、BMP图像介绍与显示 我们常用的图片格式有很多&#xff0c;一般最常用的有三种&#xff1a;JPEG(或 JPG)、PNG、BMP和GIF。其中 JPEG(或JPG)、PNG以及 BMP 都是静态图片&#xff0c;而 GIF 则可以实现动态图片。 BMP(全称 Bitmap)是Window操作系统中的标准图像文件格式&am…

计算机学院第五次ACM周赛题解

目录 HF的智能小车车 Do you like Van game&#xff1f; 好姐姐的三角形 帮帮小陈 卷点 签个到就下班 现在是摸鱼时间 现在是摸鱼时间 PLUS HF的智能小车车 签到题目&#xff0c; #include<iostream>using namespace std;int main() {string arr;cin>>ar…

学生会信息管理系统

1、项目介绍 学生会信息管理系统拥有两种角色&#xff1a;学生和管理员 学生&#xff1a;查看活动和新闻信息、发布活动、登录注册 管理员&#xff1a;公共新闻管理、用户管理、活动审核等 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;jsp、c…

Linux(centos)安装Jenkins

Jenkins 是一个开源的, 基于Java的自动服务器&#xff0c;提供了一种建立持续集成和持续交付(CI/CD)流水线的简单方法 。 持续集成 (CI)是DevOps实践中&#xff0c;团队成员定期将他们的代码更改提交到版本仓库, 然后运行自动化的构建和测试. 持续交付(CD)是自动构建、测试和部…

【附源码】计算机毕业设计SSM物业管理系统设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第九章 Ambari二次开发之自定义Flink服务 -- 自定义quiklinks链接

1、自定义quiklink链接功能概述 主要功能&#xff1a;用来配置第三方服务界面链接&#xff0c;如Yarn的管理界面。 服务可以通过在metainfo中加入一串quicklink的引用&#xff08;一串预定义的JSON字符串&#xff09;即可。ambari server能解析json文件并将其提供给UI&#xff…

CSS 2 CSS 选择器 - 2 2.5 属性选择器

CSS 文章目录CSS2 CSS 选择器 - 22.5 属性选择器2.5.1 CSS [attribute] 选择器2.5.2 CSS [attribute"value"] 选择器2.5.3 CSS [attribute~"value"] 选择器2.5.4 CSS [attribute|"value"] 选择器2.5.5 CSS [attribute^"value"] 选择器…