小游戏介绍
本游戏以命令行的形式进行,玩家可以通过改变代码的方式改相关的参数,游戏背景请参考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()