我是做分析的,不是做开发的!
1 前言
被自己这句话整不会了,昨天一个AUS朋友要交作业了让我帮他看看代码,心想刚开学也难不到哪去,笔者生信仅有的Python语法基础稍微应付应付应该还是可以的
勉强解决,但是还是有挺多不足,“甲方”还有要求需要改,我直接回应了片头的话
游戏大概内容要求:
- 进入游戏后有三个界面:(1)退出游戏;(2)开始捕鼠;(3)进入商店
- 初始是有125个金币,金币可以用于在商店买奶酪(奶酪单价10金币),需要花费一块奶酪捕抓一次老鼠
2 Lad’s code(朋友的代码)
过于累赘,直接展示重点,
代码的问题是:每次买完奶酪后出来金币都会变成125,即金币不保存
3 尝试性解决
3.1 暂存一个文本文件
用save_game()
和load_game()
每次使用金币时将数字保存一次,这个比较容易想到,其实就是我们常说的存档
def save_game(gold: int, total_cheese: int):
with open('game_save.txt', 'w') as file:
file.write(f'{gold}\n{total_cheese}')
def load_game():
with open('game_save.txt', 'r') as file:
lines = file.readlines()
gold = int(lines[0])
total_cheese = int(lines[1])
return gold, total_cheese
**问题来了:**他们学校这个作业系统无法识别其他文件,即规定了文件格式和文件命名,清一色.py
,没有.txt
3.2 创建一个“空杯子”
思路就是定义一个空变量存改数字
coins = 0 #初始为0
def save_coins():
print("保存金币余额:", coins)
# 调用保存函数
import atexit
atexit.register(save_coins)
# 程序
def add_coins(amount):
global coins
coins += amount
add_coins(10)
add_coins(20)
**问题又来了:**他们学校这个作业限制了,不能用import
3.3 自定义函数
根据生信做分析的思维,导出不行,中间变量+调用函数不行,那就自己写函数
coins = {} # 定义一个全局的字典用于存储金币数量
# 默认初始金币为0
def get_coin(name):
if name not in coins:
coins[name] = 0
return coins[name]
# 一进入游戏原本有125金币
def add_coin(name, amount):
coins[name] = get_coin(name) + amount
# 买奶酪花费金币
def spend_coin(name, amount):
if amount > get_coin(name):
print("金币不足")
else:
coins[name] -= amount
这次终于应该可以了
4 应该解决了
**问题又双来了plus:**规定限制了还不能用in,for,lambda,global,class
最终版:
def start_game():
cheese = 0
gold = 125
while True:
print("你有{}个金币,{}块奶酪。".format(gold, cheese))
print("请选择操作:")
print("1.退出游戏")
print("2.加入捕猎")
print("3.进入商店")
choice = input()
if choice == "1":
print("游戏结束!")
break
elif choice == "2":
if cheese == 0:
print("你没有奶酪,无法捕猎!")
else:
cheese -= 1
if random.randint(1, 10) == 1:
print("恭喜你,抓到了老鼠!")
gold += 20
else:
print("很遗憾,这次没有抓到老鼠。")
elif choice == "3":
print("你有{}个金币,{}块奶酪。".format(gold, cheese))
print("你想买多少块奶酪?(每块奶酪10金币)")
num_cheese = int(input())
if num_cheese <= 0:
print("非法输入!")
elif gold < num_cheese * 10:
print("你没有足够的金币购买!")
else:
gold -= num_cheese * 10
cheese += num_cheese
else:
print("非法输入!请重新选择操作。")
start_game()
买了12块奶酪,设定了1/10的捕鼠成功概率,1次都没成功过,对非酋十分不友好。
5 升级版代码
修改规则,捕鼠成功奖励10金币,捕鼠失败安慰奖有5金币
import random
cat_hungry = True
cat_energy = 100
cat_happy = 50
cat_love = 0
cat_cheese = 0
cat_gold = 125
while True:
print("欢迎来到猫抓老鼠游戏!")
print("你现在有", cat_gold, "金币。")
print("1.退出游戏")
print("2.加入捕猎")
print("3.进入商店")
choice = input("请选择:")
if choice == "1":
print("游戏结束,欢迎再次来玩!")
break
elif choice == "2":
if cat_cheese < 1:
print("你没有足够的奶酪!请去商店购买。")
continue
cat_cheese -= 1
cat_energy -= 10
cat_happy += 5
cat_love += random.randint(0, 5)
if cat_energy < 0:
print("猫累坏了,需要休息。")
cat_energy = 0
continue
if cat_love >= 10:
cat_love -= 10
cat_cheese += 1
print("恭喜你获得一块奶酪!")
if random.randint(0, 10) <= 3:
cat_gold += 5
print("很遗憾没有抓到老鼠,但是你获得了5金币。")
else:
cat_gold += 10
cat_happy += 5
print("恭喜你抓到老鼠了!你获得了10金币。")
elif choice == "3":
print("你现在有", cat_gold, "金币。")
cheese_num = int(input("请输入你要购买的奶酪数量:"))
if cheese_num * 10 > cat_gold:
print("你的金币不足以购买这么多的奶酪!")
else:
cat_cheese += cheese_num
cat_gold -= cheese_num * 10
print("你成功购买了", cheese_num, "块奶酪!")
else:
print("无效的选项,请重新输入!")
这样就舒服多了。
6 讨论
挺有意思的代码,Python很经典的猫抓老鼠游戏,主要是巩固和熟悉if、while等函数
用法,以及整个流程的逻辑
,代码开放,喜欢折腾的朋友可以直接Copy修改,入门必备