穿越沙漠小游戏的Python代码

小游戏介绍

本游戏以命令行的形式进行,玩家可以通过改变代码的方式改相关的参数,游戏背景请参考2020全国大学生数学建模竞赛论文展示(B125) - 2020全国大学生数学建模竞赛论文展示 - 中国大学生在线 (moe.gov.cn)

这里假设在一条线上移动,天气随机决定

import random  
#生成随机天气
def RandomWeather():  
    randomValue = random.random()  # 生成一个0到1之间的随机浮点数  
 
    if randomValue < 0.5:  # 0到0.5之间,概率50%  
        return 0  # 晴朗  
    elif randomValue < 0.8:  # 0.5到0.8之间,概率30%  
        return 1  # 高温  
    else:  # 0.8到1之间,概率20%  
        return 2  # 沙尘  
#生成随机地点
def RandomDestination():
    random_value = random.random()  
 
    if random_value < 0.8:  
        return 0  # 正常区域  
    elif random_value < 0.9:  
        return 1  # 村庄  
    else:  
        return 2  # 矿山 
#输入整数
def input_value(prompt):  
    print(prompt, end='')  
    return int(input())  
#判断质量是否达到上限 
def check(value, standard, message):  
    if value > standard:  
        print(message)  
        return 1  
    else:  
        return 0  
#判断是否前进
def change_des(des):
    print("请选择是否前进,是请输入1,否请输入0")
    s=input()
    if s=='1':
        des+=1
    return des
    
def main():  
    #食物和水的重量和原始价钱
    water_kg = 3  
    food_kg = 2  
    water_money = 5  
    food_money = 10  
    #食物和水的初始箱数
    water = 0  
    food = 0  
    #食物和水的消耗
    waterx = [5, 8, 10]  
    foodx = [7, 6, 10]  

    food_char = "食物的箱数:"  
    water_char = "水的箱数:"  
    over_kg = "购买的食物和水超载,请重新输入"  
    standard_kg = 1200  #最多背的重量
    money = 10000  #初始价钱
    money_more = 2 #在村庄价格的倍数
    money_make = 1000 #在矿山可以挣的钱
    money_cut = 0.5 #在终点贬值的倍数
    #起点
    print("在起点,请输入要购买的水和食物")  
    water1 = input_value(water_char)  
    food1 = input_value(food_char)        
    kg1 = water1 * water_kg + food1 * food_kg         
    while check(kg1, standard_kg, over_kg) == 1:  
        water1 = input_value(water_char)  
        food1 = input_value(food_char)  
        kg1 = water1 * water_kg + food1 * food_kg  
    water+=water1
    food+=food1
    money-=water_money*water1+food_money*food1
    #对区域进行定义
    L=10 #区域长度
    des=0
    print("请选择途径地点的模式,随机请输入1,否则请输入0")
    s=input()
    if s=='0':
        destination=[0,1,2,0,1,0,2,0,1,3]#0是普通区域,1是村庄,2是矿山,3是终点
    elif s=='1':
        destination=[0]
        for i in range(1,L-1):
            destination[i]=RandomDestination()
        destination[L-1]=3
    des=change_des(des)
    day=1
    ddl=30 #截止日期
    while True:
        weather=RandomWeather()
        water1=waterx[weather]
        food1=foodx[weather]
        kg1-=water1 * water_kg + food1 * food_kg
        water-=water1
        food-=food1
        print("今天是第",day,"天,天气是")
        if weather==0:
            print("晴朗")
        elif weather==1:
            print("高温")
        elif weather==2:
            print("沙尘")

        print("剩余金钱:",money)
        print("剩余水的箱数:",water)
        print("剩余食物箱数:",food)
        print("目前背包背的重量:",kg1)
        if water<0 or food<0 or money<0:
            print("失败哦")
            break
        if destination[des]==0:
            print("当前为普通区域")
        elif destination[des]==1:
            print("当前为村庄,可以以原有价格的",money_more,"倍购买水和食物")
            s=input("请选择是否购买,是请输入1,否请输入0")
            if s=='1':
                water1 = input_value(water_char)  
                food1 = input_value(food_char)  
                
                kg1+= water1 * water_kg + food1 * food_kg   
                
                while check(kg1, standard_kg, over_kg) == 1:  
                    water1 = input_value(water_char)  
                    food1 = input_value(food_char)  
                    kg1 = water1 * water_kg + food1 * food_kg
                money-=(water_money*water1+food_money*food1)*money_more
                water+=water1
                food+=food1
        elif destination[des]==2:
            print("当前所在区域是矿山,请选择是否开始挖矿,是请输入1,否请输入0")
            s=input()
            if s=='1':
                money+=money_make
        elif destination[des]==3:
            print("目前区域为终点,剩余的食物和水会被转变为钱")
            money+=(water_money*water+food_money*food)*money_cut
            break
        if weather==2:
            print("今日是沙尘天气,不能前进")
        else:
            des=change_des(des)

        day+=1
        if day==ddl and destination[des]!=3:
            print("截止日期前未到终点,失败")
            break
    print("剩余的钱:",money)
if __name__ == "__main__":  
    main() 

数学建模备赛、学习资料 数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!数学建模大赛赛题、解决方案资料,供备赛者学习参考!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bhZ567

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值