

Python,速成心法
敲代码,查资料,问度娘
练习,探索,总结,优化

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧。使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
---------★Pygame教程★---------
Python经典游戏:太空飞机大战Space Plane Battle
Pygame经典游戏:坦克大战TankWar+五子棋人机对弈+俄罗斯方块(安排!!)
Pygame经典游戏:微信飞机大战Wechatflying(初级版)
Python经典游戏:走迷宫,好烦呀,我到现在还没有走出去!!
Pygame教程03:文本显示+字体加载+transform方法
Pygame教程04:draw方法绘制矩形、多边形、圆、椭圆、弧线、直线和线条等
Pygame教程05:帧动画原理+边界值检测,让小球来回上下运动
Pygame教程06:Event事件的类型+处理方法+监听鼠标事件
Pygame教程08:使用键盘方向键,控制小球,上下左右移动。
Pygame教程09:font.render文本内容,如何自动换行显示
下面是一个用 Python 实现的简化版“QQ农场”种菜游戏。采用回合制(每天结束时作物生长一次),包含种植、浇水、收获、购买种子等基本功能,运行在命令行界面。
1.游戏玩法说明:初始拥有6块土地和100 金币。通过 购买种子 消耗金币获得种子库存。在空地上种植作物,会消耗对应种子。

↓ 源码如下 ↓
# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonimport sysclass Crop:"""作物类"""def __init__(self, name, total_stages, sell_price):self.name = name # 作物名称self.stage = 0 # 当前生长阶段(0为刚种下)self.total_stages = total_stages # 成熟所需阶段self.sell_price = sell_price # 收获售价def grow(self):"""生长一天,阶段增加1,但不超过总阶段"""if self.stage < self.total_stages:self.stage += 1def is_mature(self):"""是否成熟"""return self.stage >= self.total_stagesdef status(self):"""返回当前状态描述"""if self.stage == 0:return "种子"elif self.stage < self.total_stages:return f"生长中 ({self.stage}/{self.total_stages})"else:return "成熟"class Land:"""一块土地"""def __init__(self, index):self.index = index # 土地编号self.crop = None # 当前种植的作物,None表示空地def plant(self, crop):"""种植作物"""self.crop = cropdef harvest(self):"""收获作物,返回售价;如果没有作物或未成熟则返回0"""if self.crop and self.crop.is_mature():price = self.crop.sell_priceself.crop = Nonereturn pricereturn 0def water(self):"""浇水:让作物额外生长一天(立即生效)"""if self.crop and not self.crop.is_mature():self.crop.grow()return Truereturn Falsedef is_empty(self):return self.crop is Nonedef info(self):if self.is_empty():return f"地块{self.index}:空地"else:return f"地块{self.index}:{self.crop.name},{self.crop.status()}"class Game:"""游戏主类"""def __init__(self, land_count=6):self.lands = [Land(i+1) for i in range(land_count)]self.gold = 100 # 初始金币# 种子库存:每种作物拥有的种子数量self.seed_inventory = {"萝卜": 0,"玉米": 0,}# 作物类型数据:种子价格、成熟所需阶段、收获售价self.crop_types = {"萝卜": {"seed_price": 10, "total_stages": 3, "sell_price": 30},"玉米": {"seed_price": 20, "total_stages": 5, "sell_price": 60},}def show_status(self):"""显示当前游戏状态"""print("\n" + "="*40)print(f"金币: {self.gold}")print("种子库存:")for name, count in self.seed_inventory.items():print(f" {name}: {count} 个")print("土地状况:")for land in self.lands:print(" " + land.info())print("="*40)def buy_seeds(self):"""购买种子"""print("\n--- 购买种子 ---")print("可购买的作物:")for i, (name, info) in enumerate(self.crop_types.items(), 1):print(f"{i}. {name} (价格: {info['seed_price']}金币/个)")try:choice = int(input("请选择作物编号(0返回): "))if choice == 0:returnname = list(self.crop_types.keys())[choice-1]info = self.crop_types[name]except (ValueError, IndexError):print("输入无效!")returntry:num = int(input(f"购买几个 {name} 种子? "))if num <= 0:returncost = info["seed_price"] * numif self.gold < cost:print(f"金币不足!需要{cost}金币,当前只有{self.gold}金币。")returnself.gold -= costself.seed_inventory[name] += numprint(f"购买成功!花费{cost}金币,获得{num}个{name}种子。")except ValueError:print("输入无效!")def plant_crop(self):"""种植作物"""print("\n--- 种植 ---")# 显示可种植的空地empty_lands = [land for land in self.lands if land.is_empty()]if not empty_lands:print("没有空地可种植!")returnprint("空地块:", ", ".join(str(land.index) for land in empty_lands))# 显示可用的种子available_seeds = {name: count for name, count in self.seed_inventory.items() if count > 0}if not available_seeds:print("没有种子库存,请先购买种子!")returnprint("可用种子:")for i, name in enumerate(available_seeds.keys(), 1):print(f"{i}. {name} (库存: {self.seed_inventory[name]})")try:seed_choice = int(input("请选择要种植的作物编号: "))name = list(available_seeds.keys())[seed_choice-1]except (ValueError, IndexError):print("输入无效!")returntry:land_idx = int(input("请选择要种植的地块编号: "))land = next((l for l in self.lands if l.index == land_idx), None)if land is None or not land.is_empty():print("该地块不存在或不是空地!")returnexcept ValueError:print("输入无效!")return# 扣除种子,种植self.seed_inventory[name] -= 1info = self.crop_types[name]new_crop = Crop(name, info["total_stages"], info["sell_price"])land.plant(new_crop)print(f"在地块{land_idx}种下了 {name}。")def water_crop(self):"""给作物浇水"""print("\n--- 浇水 ---")# 找出有作物且未成熟的地块waterable = [land for land in self.lands if land.crop and not land.crop.is_mature()]if not waterable:print("没有需要浇水的作物。")returnprint("可浇水的地块:", ", ".join(str(land.index) for land in waterable))try:land_idx = int(input("请选择要浇水的地块编号: "))land = next((l for l in self.lands if l.index == land_idx), None)if land not in waterable:print("该地块没有需要浇水的作物!")returnif land.water():print(f"地块{land_idx}浇水成功,作物生长一天!")else:print("浇水无效(作物已成熟)。")except ValueError:print("输入无效!")def harvest_crop(self):"""收获作物"""print("\n--- 收获 ---")# 找出已成熟的地块mature = [land for land in self.lands if land.crop and land.crop.is_mature()]if not mature:print("没有可收获的作物。")returnprint("可收获的地块:", ", ".join(str(land.index) for land in mature))try:land_idx = int(input("请选择要收获的地块编号(输入0收获全部): "))if land_idx == 0:total_income = 0for land in mature:income = land.harvest()total_income += incomeprint(f"地块{land.index} 收获成功,获得 {income} 金币。")self.gold += total_incomeprint(f"本次共收获 {total_income} 金币。")returnland = next((l for l in self.lands if l.index == land_idx), None)if land not in mature:print("该地块没有成熟作物!")returnincome = land.harvest()self.gold += incomeprint(f"地块{land_idx} 收获成功,获得 {income} 金币。")except ValueError:print("输入无效!")def next_day(self):"""结束一天:所有作物生长一天"""print("\n--- 新的一天 ---")for land in self.lands:if land.crop:land.crop.grow()print("所有作物生长了一天。")def run(self):"""游戏主循环"""print("欢迎来到QQ农场简易版!")while True:self.show_status()print("\n操作菜单:")print("1. 种植")print("2. 浇水")print("3. 收获")print("4. 购买种子")print("5. 结束一天")print("6. 退出游戏")choice = input("请选择操作(1-6): ").strip()if choice == "1":self.plant_crop()elif choice == "2":self.water_crop()elif choice == "3":self.harvest_crop()elif choice == "4":self.buy_seeds()elif choice == "5":self.next_day()elif choice == "6":print("游戏结束,欢迎下次再来!")sys.exit(0)else:print("无效输入,请重新选择。")if __name__ == "__main__":game = Game()game.run()
完毕!!感谢您的收看
--------★★历史博文集合★★--------
