用Python写一个文字版猫抓老鼠的游戏

我是做分析的,不是做开发的!

1 前言

被自己这句话整不会了,昨天一个AUS朋友要交作业了让我帮他看看代码,心想刚开学也难不到哪去,笔者生信仅有的Python语法基础稍微应付应付应该还是可以的

勉强解决,但是还是有挺多不足,“甲方”还有要求需要改,我直接回应了片头的话


游戏大概内容要求

  1. 进入游戏后有三个界面:(1)退出游戏;(2)开始捕鼠;(3)进入商店
  2. 初始是有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修改,入门必备

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bioinfo Guy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值