• Python实现简单版本的人生重开模拟器


    介绍

    “人生重开模拟器”,这是一款文字类小游戏,在百度也可以直接搜到各种网页版本。
    玩家输入角色的初始属性之后,就可以开启不同的人生经历。
    这里只是简单的实现一下(不然代码量太多)

    1. 设置初始属性

    在游戏中我们设定4个属性

    • 颜值(face)
    • 体质(strong)
    • 智力(iq)
    • 家境(home)
      我们约定每个属性的范围为[1,10],并且4个属性的总和不能超过20.

    如果玩家输入的值有误,或者超过就重新输入

    # 设置属性值
    while True:
        print('请依次输入,颜值、体质、智力、家境(总和不能超过20)')
        count = 20
        face = int(input('请输入颜值0~10: '))
        if face < 1 or face > 10 or face > 20:
            print('设置的值违规')
            continue
        count -= face
        strong = int(input('请输入体质0~10: '))
        if strong < 1 or strong > 10 or strong > count:
            print('设置的值违规')
            continue
        count -= strong
        iq = int(input('请输入智力0~10: '))
        if iq < 1 or iq > 10 or iq > count:
            print('设置的值违规')
            continue
        count -= iq
        home = int(input('请输入家境0~10: '))
        if home < 1 or home > 10 or home > count:
            print('设置的值违规')
            continue
        if face + strong + iq + home <= 20:
            print('属性设置完成,随机生成性别...')
            break
        else:
            print('属性值设置错误总和不能超过20')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2. 设置性别

    通过random.randint(1,6)的随机整数,类似于色子

    • 如果生成的是奇数就是男孩
    • 如果生成的是偶数就是女孩
    • 男孩和女孩会遇到不同的事件.
    # 随机生成性别
    sex = random.randint(1, 6)
    if sex % 2 == 0:
        sex = 'girl'
        print('游戏开始你是一个女孩')
    else:
        sex = 'boy'
        print('游戏开始你是一个男孩')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 设置出生点

    首先按照家境(home),分成4个档次

    • 10 是第一档,加成最高
    • [7,9] 为第二档,也有一些加成
    • [4,6] 为第三档,加成较少
    • [1,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('你出生在三线城市,你的父母是老师')
            iq += 1
        elif point == 2:
            print('你出生在镇上,你的父母是医生')
            strong += 1
        else:
            print('你出生在镇上,你的父母是个体户')
            home += 1
    else:
        if point == 1:
            print('你出生在村里,你的父母是辛苦劳作的农民')
            strong += 1
            face -= 2
        elif point == 2:
            print('你出生在穷乡僻壤,你的父母是无业游民')
            home -= 1
        else:
            print('你出生在镇上,你父母感情不和')
            strong -= 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    4. 针对每一岁生成人生经历

    按照年龄, 把人生经历分成四个阶段:

    • 幼年阶段 [1, 10]
    • 青少年阶段 [11, 25]
    • 壮年阶段 [25, 50]
    • 老年阶段 50 岁以上.

    每个阶段都会有不同的精力和事件发生.

    • 幼年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
    • 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化.
    • 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性.
    • 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高.

    此处我们以幼年为例, 简单实现一下这里的处理逻辑.

    • 使用 for 循环, 按照年龄循环起来.
    • 针对每一年, 随机生成1~3的数字, 根据不同的随机数值, 来触发不同的事件.
    • 根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else 的方式来组织.
    • 不同的事件可能会对属性有正面/负面的影响.
    • 在每一年的最后, 打印这一年遇到的事情.
    • 如果夭折, 则直接 sys.exit(0) 退出程序.
    • 使用 time.sleep(2) 使程序暂停执行 2s, 方便观察程序结果.
    # 生成人生经历
    for age in range(1, 60):
        info = f'你今年{age}岁'
        point = random.randint(1, 3)
        # 触发性别事件
        if sex == 'girl' and home <= 3 and point == 1:
            info += ',、你家里人重男轻女思想非常严重,你被抛弃了'
            print(info)
            print('游戏结束')
            sys.exit(0)
        # 体质触发事件
        elif strong < 6 and point != 3:
            info += '你生了一场病,'
            if home >= 5:
                info += '在父母的细心照料恢复了健康'
                strong += 1
                home -= 1
            else:
                info += '你的父母没有精力管你,你的身体状况更糟糕了'
                strong -= 1
                if strong <= 0:
                    print('你没有战胜病魔去世了')
                    sys.exit(0)
        # 颜值触发事件
        elif face < 4 and age >= 7:
            info += '你因为长的丑,遭到别的小朋友嫌弃,'
            if iq > 5:
                info += '你决定用学习填充自己'
                iq += 1
            else:
                if sex == 'boy':
                    info += '你和别的小朋友经常打架'
                    iq -= 1
                    strong += 1
                else:
                    info += '你经常被别的小朋友欺负'
                    strong -= 1
        # 智商触发事件
        elif iq < 5:
            info += '你看起来傻傻的,'
            if home >= 8 and age >= 6:
                info += '你的父母给你送到更好的学习学习'
                iq += 1
            elif 4 <= home <= 7:
                if sex == 'boy':
                    info += '你的父母鼓励多运动,加强身体素质'
                    strong += 1
                else:
                    info += '你的父母鼓励你多打扮自己'
                    face += 1
            else:
                info += '你的父母因此经常为此吵架'
                if point == 1:
                    strong -= 1
                elif point == 2:
                    iq -= 1
        # 健康成长
        else:
            info += '你健康成长,'
            if point == 1:
                info += '看起来更聪明了'
                iq += 1
            elif point == 2:
                info += '看起来更好看了'
                face += 1
            else:
                info += '看起来更结实了'
                strong += 1
    
        print('===============================================================================')
        print(info)
        print(f'颜值={face},体质={strong},智力={iq},家境={home}')
        time.sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
  • 相关阅读:
    【Cherno的OpenGL视频】Creating tests in OpenGL
    互联网扭蛋机小程序:打破传统扭蛋机的局限,提高销量
    13.OpenFeign 多个传递参数的方式:开发重点(springcloud)
    【LeetCode】每日一题 -- 1170. 比较字符串最小字母出现频次 -- Java Version
    每日杂学:页面加载出现白页
    RFID智能档案柜助力各大银行实现RFID智能档案管理
    每日一题day15
    分布式系统设计策略
    PostgreSQL with(with recursive )查询
    STM32解析航模遥控器的PPM信号
  • 原文地址:https://blog.csdn.net/weixin_53946852/article/details/126794445