鱼C论坛

 找回密码
 立即注册
查看: 153|回复: 9

[作品展示] 宝可梦小游戏 V1.1

[复制链接]
回帖奖励 34 鱼币 回复本帖可获得 2 鱼币奖励! 每人限 1 次
发表于 前天 20:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zyx2012 于 2025-5-9 22:34 编辑

环境:python v3.13.3

  1. import random, sys, os, json
  2. import time



  3. dict = {1: {'精灵': '妙蛙种子', '属性': ['草', '毒'], 'HP': 45, '攻击': 49, '防御': 49, '速度': 45}, 2: {'精灵': '妙蛙草', '属性': ['草', '毒'], 'HP': 60, '攻击': 62, '防御': 63, '速度': 60}, 3: {'精灵': '妙蛙花', '属性': ['草', '毒'], 'HP': 80, '攻击': 82, '防御': 83, '速度': 80}, 4: {'精灵': '小火龙', '属性': ['火'], 'HP': 39, '攻击': 52, '防御': 43, '速度': 65}, 5: {'精灵': '火恐龙', '属性': ['火'], 'HP': 58, '攻击': 64, '防御': 58, '速度': 80}, 6: {'精灵': '喷火龙', '属性': ['火', '飞行'], 'HP': 78, '攻击': 84, '防御': 78, '速度': 100}, 7: {'精灵': '杰尼龟', '属性': ['水'], 'HP': 44, '攻击': 48, '防御': 65, '速度': 43}, 8: {'精灵': '卡咪龟', '属性': ['水'], 'HP': 59, '攻击': 63, '防御': 80, '速度': 58}, 9: {'精灵': '水箭龟', '属性': ['水'], 'HP': 79, '攻击': 83, '防御': 100, '速度': 78}, 10: {'精灵': '绿毛虫', '属性': ['虫'], 'HP': 45, '攻击': 30, '防御': 35, '速度': 45}, 11: {'精灵': '铁甲蛹', '属性': ['虫'], 'HP': 50, '攻击': 20, '防御': 55, '速度': 30}, 12: {'精灵': '巴大蝶', '属性': ['虫', '飞行'], 'HP': 60, '攻击': 45, '防御': 50, '速度': 70}, 13: {'精灵': '独角虫', '属性': ['虫', '毒'], 'HP': 40, '攻击': 35, '防御': 30, '速度': 50}, 14: {'精灵': '铁壳昆', '属性': ['虫', '毒'], 'HP': 45, '攻击': 25, '防御': 50, '速度': 35}, 15: {'精灵': '大针蜂', '属性': ['虫', '毒'], 'HP': 65, '攻击': 90, '防御': 40, '速度': 75}, 16: {'精灵': '波波', '属性': ['普通', '飞行'], 'HP': 40, '攻击': 45, '防御': 40, '速度': 56}, 17: {'精灵': '比比鸟', '属性': ['普通', '飞行'], 'HP': 63, '攻击': 60, '防御': 55, '速度': 71}, 18: {'精灵': '比雕', '属性': ['普通', '飞行'], 'HP': 83, '攻击': 80, '防御': 75, '速度': 101}, 19: {'精灵': '小拉达', '属性': ['普通'], 'HP': 30, '攻击': 56, '防御': 35, '速度': 72}, 20: {'精灵': '拉达', '属性': ['普通'], 'HP': 55, '攻击': 81, '防御': 60, '速度': 97}, 21: {'精灵': '烈雀', '属性': ['普通', '飞行'], 'HP': 40, '攻击': 60, '防御': 30, '速度': 70}, 22: {'精灵': '大嘴雀', '属性': ['普通', '飞行'], 'HP': 65, '攻击': 90, '防御': 65, '速度': 100}, 23: {'精灵': '阿柏蛇', '属性': ['毒'], 'HP': 35, '攻击': 60, '防御': 44, '速度': 55}, 24: {'精灵': '阿柏怪', '属性': ['毒'], 'HP': 60, '攻击': 95, '防御': 69, '速度': 80}, 25: {'精灵': '皮卡丘', '属性': ['电'], 'HP': 35, '攻击': 55, '防御': 40, '速度': 90}, 26: {'精灵': '雷丘', '属性': ['电'], 'HP': 60, '攻击': 90, '防御': 55, '速度': 110}, 27: {'精灵': '穿山鼠', '属性': ['地面'], 'HP': 50, '攻击': 75, '防御': 85, '速度': 40}, 28: {'精灵': '穿山王', '属性': ['地面'], 'HP': 75, '攻击': 100, '防御': 110, '速度': 65}, 29: {'精灵': '尼多兰', '属性': ['毒'], 'HP': 55, '攻击': 47, '防御': 52, '速度': 41}, 30: {'精灵': '尼多娜', '属性': ['毒'], 'HP': 70, '攻击': 62, '防御': 67, '速度': 56}, 31: {'精灵': '尼多后', '属性': ['毒', '地面'], 'HP': 90, '攻击': 92, '防御': 87, '速度': 76}, 32: {'精灵': '尼多朗', '属性': ['毒'], 'HP': 46, '攻击': 57, '防御': 40, '速度': 50}, 33: {'精灵': '尼多力诺', '属性': ['毒'], 'HP': 61, '攻击': 72, '防御': 57, '速度': 65}, 34: {'精灵': '尼多王', '属性': ['毒', '地面'], 'HP': 81, '攻击': 102, '防御': 77, '速度': 85}, 35: {'精灵': '皮皮', '属性': ['妖精'], 'HP': 70, '攻击': 45, '防御': 48, '速度': 35}, 36: {'精灵': '皮可西', '属性': ['妖精'], 'HP': 95, '攻击': 70, '防御': 73, '速度': 60}, 37: {'精灵': '六尾', '属性': ['火'], 'HP': 38, '攻击': 41, '防御': 40, '速度': 65}, 38: {'精灵': '九尾', '属性': ['火'], 'HP': 73, '攻击': 76, '防御': 75, '速度': 100}, 39: {'精灵': '胖丁', '属性': ['普通', '妖精'], 'HP': 115, '攻击': 45, '防御': 20, '速度': 20}, 40: {'精灵': '胖可丁', '属性': ['普通', '妖精'], 'HP': 140, '攻击': 70, '防御': 45, '速度': 45}, 41: {'精灵': '超音蝠', '属性': ['毒', '飞行'], 'HP': 40, '攻击': 45, '防御': 35, '速度': 55}, 42: {'精灵': '大嘴蝠', '属性': ['毒', '飞行'], 'HP': 75, '攻击': 80, '防御': 70, '速度': 90}, 43: {'精灵': '走路草', '属性': ['草', '毒'], 'HP': 45, '攻击': 50, '防御': 55, '速度': 30}, 44: {'精灵': '臭臭花', '属性': ['草', '毒'], 'HP': 60, '攻击': 65, '防御': 70, '速度': 40}, 45: {'精灵': '霸王花', '属性': ['草', '毒'], 'HP': 75, '攻击': 80, '防御': 85, '速度': 50}, 46: {'精灵': '派拉斯', '属性': ['虫', '草'], 'HP': 35, '攻击': 70, '防御': 55, '速度': 25}, 47: {'精灵': '派拉斯特', '属性': ['虫', '草'], 'HP': 60, '攻击': 95, '防御': 80, '速度': 30}, 48: {'精灵': '毛球', '属性': ['虫', '毒'], 'HP': 60, '攻击': 55, '防御': 50, '速度': 45}, 49: {'精灵': '末入蛾', '属性': ['虫', '毒'], 'HP': 70, '攻击': 65, '防御': 60, '速度': 90}, 50: {'精灵': '地鼠', '属性': ['地面'], 'HP': 10, '攻击': 55, '防御': 25, '速度': 95}, 51: {'精灵': '三地鼠', '属性': ['地面'], 'HP': 35, '攻击': 100, '防御': 50, '速度': 120}, 52: {'精灵': '喵喵', '属性': ['普通'], 'HP': 40, '攻击': 45, '防御': 35, '速度': 90}, 53: {'精灵': '猫老大', '属性': ['普通'], 'HP': 65, '攻击': 70, '防御': 60, '速度': 115}, 54: {'精灵': '可达鸭', '属性': ['水'], 'HP': 50, '攻击': 52, '防御': 48, '速度': 55}, 55: {'精灵': '哥达鸭', '属性': ['水'], 'HP': 80, '攻击': 82, '防御': 78, '速度': 85}, 56: {'精灵': '猴怪', '属性': ['格斗'], 'HP': 40, '攻击': 80, '防御': 35, '速度': 70}, 57: {'精灵': '火爆猴', '属性': ['格斗'], 'HP': 65, '攻击': 105, '防御': 60, '速度': 95}, 58: {'精灵': '卡蒂狗', '属性': ['火'], 'HP': 55, '攻击': 70, '防御': 45, '速度': 60}, 59: {'精灵': '风速狗', '属性': ['火'], 'HP': 90, '攻击': 110, '防御': 80, '速度': 95}, 60: {'精灵': '蚊香蝌蚪', '属性': ['水'], 'HP': 40, '攻击': 50, '防御': 40, '速度': 90}, 61: {'精灵': '蚊香蛙', '属性': ['水'], 'HP': 65, '攻击': 65, '防御': 65, '速度': 90}, 62: {'精灵': '快泳蛙', '属性': ['水', '格斗'], 'HP': 90, '攻击': 95, '防御': 95, '速度': 70}, 63: {'精灵': '凯西', '属性': ['超能'], 'HP': 25, '攻击': 20, '防御': 15, '速度': 90}, 64: {'精灵': '勇吉拉', '属性': ['超能'], 'HP': 40, '攻击': 35, '防御': 30, '速度': 105}, 65: {'精灵': '胡地', '属性': ['超能'], 'HP': 55, '攻击': 50, '防御': 45, '速度': 120}, 66: {'精灵': '腕力', '属性': ['格斗'], 'HP': 70, '攻击': 80, '防御': 50, '速度': 35}, 67: {'精灵': '豪力', '属性': ['格斗'], 'HP': 80, '攻击': 100, '防御': 70, '速度': 45}, 68: {'精灵': '怪力', '属性': ['格斗'], 'HP': 90, '攻击': 130, '防御': 80, '速度': 55}, 69: {'精灵': '喇叭芽', '属性': ['草', '毒'], 'HP': 50, '攻击': 75, '防御': 35, '速度': 40}, 70: {'精灵': '口呆花', '属性': ['草', '毒'], 'HP': 65, '攻击': 90, '防御': 50, '速度': 55}, 71: {'精灵': '大食花', '属性': ['草', '毒'], 'HP': 80, '攻击': 105, '防御': 65, '速度': 70}, 72: {'精灵': '玛瑙水母', '属性': ['水', '毒'], 'HP': 40, '攻击': 40, '防御': 35, '速度': 70}, 73: {'精灵': '毒刺水母', '属性': ['水', '毒'], 'HP': 80, '攻击': 70, '防御': 65, '速度': 100}, 74: {'精灵': '小拳石', '属性': ['岩石', '地面'], 'HP': 40, '攻击': 80, '防御': 100, '速度': 20}, 75: {'精灵': '隆隆石', '属性': ['岩石', '地面'], 'HP': 55, '攻击': 95, '防御': 115, '速度': 35}, 76: {'精灵': '隆隆岩', '属性': ['岩石', '地面'], 'HP': 80, '攻击': 120, '防御': 130, '速度': 45}, 77: {'精灵': '小火马', '属性': ['火'], 'HP': 50, '攻击': 85, '防御': 55, '速度': 90}, 78: {'精灵': '烈焰马', '属性': ['火'], 'HP': 65, '攻击': 100, '防御': 70, '速度': 105}, 79: {'精灵': '呆呆兽', '属性': ['水', '超能'], 'HP': 90, '攻击': 65, '防御': 65, '速度': 15}, 80: {'精灵': '呆河马', '属性': ['水', '超能'], 'HP': 95, '攻击': 75, '防御': 110, '速度': 30}, 81: {'精灵': '小磁怪', '属性': ['电', '钢'], 'HP': 25, '攻击': 35, '防御': 70, '速度': 45}, 82: {'精灵': '三合一磁怪', '属性': ['电', '钢'], 'HP': 50, '攻击': 60, '防御': 95, '速度': 70}, 83: {'精灵': '大葱鸭', '属性': ['普通', '飞行'], 'HP': 52, '攻击': 90, '防御': 55, '速度': 60}, 84: {'精灵': '嘟嘟', '属性': ['普通', '飞行'], 'HP': 35, '攻击': 85, '防御': 45, '速度': 75}, 85: {'精灵': '嘟嘟利', '属性': ['普通', '飞行'], 'HP': 60, '攻击': 110, '防御': 70, '速度': 110}, 86: {'精灵': '小海狮', '属性': ['水'], 'HP': 65, '攻击': 45, '防御': 55, '速度': 45}, 87: {'精灵': '白海狮', '属性': ['水', '冰'], 'HP': 90, '攻击': 70, '防御': 80, '速度': 70}, 88: {'精灵': '臭泥', '属性': ['毒'], 'HP': 80, '攻击': 80, '防御': 50, '速度': 25}, 89: {'精灵': '臭臭泥', '属性': ['毒'], 'HP': 105, '攻击': 105, '防御': 75, '速度': 50}, 90: {'精灵': '大舌贝', '属性': ['水'], 'HP': 30, '攻击': 65, '防御': 100, '速度': 40}, 91: {'精灵': '铁甲贝', '属性': ['水', '冰'], 'HP': 50, '攻击': 95, '防御': 180, '速度': 70}, 92: {'精灵': '鬼斯', '属性': ['幽灵', '毒'], 'HP': 30, '攻击': 35, '防御': 30, '速度': 80}, 93: {'精灵': '鬼斯通', '属性': ['幽灵', '毒'], 'HP': 45, '攻击': 50, '防御': 45, '速度': 95}, 94: {'精灵': '耿鬼', '属性': ['幽灵', '毒'], 'HP': 60, '攻击': 65, '防御': 60, '速度': 110}, 95: {'精灵': '大岩蛇', '属性': ['岩石', '地面'], 'HP': 35, '攻击': 45, '防御': 160, '速度': 70}, 96: {'精灵': '素利普', '属性': ['超能'], 'HP': 60, '攻击': 48, '防御': 45, '速度': 42}, 97: {'精灵': '素利柏', '属性': ['超能'], 'HP': 85, '攻击': 73, '防御': 70, '速度': 67}, 98: {'精灵': '螃蟹怪', '属性': ['水'], 'HP': 30, '攻击': 105, '防御': 90, '速度': 50}, 99: {'精灵': '巨钳蟹', '属性': ['水'], 'HP': 55, '攻击': 130, '防御': 115, '速度': 75}, 100: {'精灵': '雷电球', '属性': ['电'], 'HP': 40, '攻击': 30, '防御': 50, '速度': 100}, 101: {'精灵': '顽皮弹', '属性': ['电'], 'HP': 60, '攻击': 50, '防御': 70, '速度': 150}, 102: {'精灵': '蛋蛋', '属性': ['草', '超能'], 'HP': 60, '攻击': 40, '防御': 80, '速度': 40}, 103: {'精灵': '椰蛋树', '属性': ['草', '超能'], 'HP': 95, '攻击': 95, '防御': 85, '速度': 55}, 104: {'精灵': '可拉可拉', '属性': ['地面'], 'HP': 50, '攻击': 50, '防御': 95, '速度': 35}, 105: {'精灵': '嘎啦嘎啦', '属性': ['地面'], 'HP': 60, '攻击': 80, '防御': 110, '速度': 45}, 106: {'精灵': '沙瓦郎', '属性': ['格斗'], 'HP': 50, '攻击': 120, '防御': 53, '速度': 87}, 107: {'精灵': '艾比郎', '属性': ['格斗'], 'HP': 50, '攻击': 105, '防御': 79, '速度': 76}, 108: {'精灵': '大舌头', '属性': ['普通'], 'HP': 90, '攻击': 55, '防御': 75, '速度': 30}, 109: {'精灵': '瓦斯弹', '属性': ['毒'], 'HP': 40, '攻击': 65, '防御': 95, '速度': 35}, 110: {'精灵': '双弹瓦斯', '属性': ['毒'], 'HP': 65, '攻击': 90, '防御': 120, '速度': 60}, 111: {'精灵': '铁甲犀牛', '属性': ['地面', '岩石'], 'HP': 80, '攻击': 85, '防御': 95, '速度': 25}, 112: {'精灵': '铁甲暴龙', '属性': ['地面', '岩石'], 'HP': 105, '攻击': 130, '防御': 120, '速度': 40}, 113: {'精灵': '吉利蛋', '属性': ['普通'], 'HP': 250, '攻击': 5, '防御': 5, '速度': 50}, 114: {'精灵': '蔓藤怪', '属性': ['草'], 'HP': 65, '攻击': 55, '防御': 115, '速度': 60}, 115: {'精灵': '袋龙', '属性': ['普通'], 'HP': 105, '攻击': 95, '防御': 80, '速度': 90}, 116: {'精灵': '墨海马', '属性': ['水'], 'HP': 30, '攻击': 40, '防御': 70, '速度': 60}, 117: {'精灵': '海刺龙', '属性': ['水'], 'HP': 55, '攻击': 65, '防御': 95, '速度': 85}, 118: {'精灵': '角金鱼', '属性': ['水'], 'HP': 45, '攻击': 67, '防御': 60, '速度': 63}, 119: {'精灵': '金鱼王', '属性': ['水'], 'HP': 80, '攻击': 92, '防御': 65, '速度': 68}, 120: {'精灵': '海星星', '属性': ['水'], 'HP': 30, '攻击': 45, '防御': 55, '速度': 85}, 121: {'精灵': '宝石海星', '属性': ['水', '超能'], 'HP': 60, '攻击': 75, '防御': 85, '速度': 115}, 122: {'精灵': '魔墙人偶', '属性': ['超能', '妖精'], 'HP': 40, '攻击': 45, '防御': 65, '速度': 90}, 123: {'精灵': '飞天螳螂', '属性': ['虫', '飞行'], 'HP': 70, '攻击': 110, '防御': 80, '速度': 105}, 124: {'精灵': '肯泰罗', '属性': ['冰', '超能'], 'HP': 65, '攻击': 50, '防御': 35, '速度': 95}, 125: {'精灵': '熊宝宝', '属性': ['电'], 'HP': 65, '攻击': 83, '防御': 57, '速度': 105}, 126: {'精灵': '圈圈熊', '属性': ['火'], 'HP': 65, '攻击': 95, '防御': 57, '速度': 93}, 127: {'精灵': '熔岩虫', '属性': ['虫'], 'HP': 65, '攻击': 125, '防御': 100, '速度': 85}, 128: {'精灵': '熔岩蜗牛', '属性': ['普通'], 'HP': 75, '攻击': 100, '防御': 95, '速度': 110}, 129: {'精灵': '小鸭嘴龙', '属性': ['水'], 'HP': 20, '攻击': 10, '防御': 55, '速度': 80}, 130: {'精灵': '鸭嘴火龙', '属性': ['水', '飞行'], 'HP': 95, '攻击': 125, '防御': 79, '速度': 81}, 131: {'精灵': '鸭嘴暴龙', '属性': ['水', '冰'], 'HP': 130, '攻击': 85, '防御': 80, '速度': 60}, 132: {'精灵': '百变怪', '属性': ['普通'], 'HP': 48, '攻击': 48, '防御': 48, '速度': 48}, 133: {'精灵': '伊布', '属性': ['普通'], 'HP': 55, '攻击': 55, '防御': 50, '速度': 55}, 134: {'精灵': '水伊布', '属性': ['水'], 'HP': 130, '攻击': 65, '防御': 60, '速度': 65}, 135: {'精灵': '雷伊布', '属性': ['电'], 'HP': 65, '攻击': 65, '防御': 60, '速度': 130}, 136: {'精灵': '火伊布', '属性': ['火'], 'HP': 65, '攻击': 130, '防御': 60, '速度': 65}, 137: {'精灵': '3D龙', '属性': ['普通'], 'HP': 65, '攻击': 60, '防御': 70, '速度': 40}, 138: {'精灵': '菊石兽', '属性': ['岩石', '水'], 'HP': 35, '攻击': 40, '防御': 100, '速度': 35}, 139: {'精灵': '多刺菊石兽', '属性': ['岩石', '水'], 'HP': 70, '攻击': 60, '防御': 125, '速度': 55}, 140: {'精灵': '化石盔', '属性': ['岩石', '水'], 'HP': 30, '攻击': 80, '防御': 90, '速度': 55}, 141: {'精灵': '镰刀盔', '属性': ['岩石', '水'], 'HP': 60, '攻击': 115, '防御': 105, '速度': 80}, 142: {'精灵': '化石翼龙', '属性': ['岩石', '飞行'], 'HP': 80, '攻击': 105, '防御': 65, '速度': 130}, 143: {'精灵': '卡比兽', '属性': ['普通'], 'HP': 160, '攻击': 110, '防御': 65, '速度': 30}, 144: {'精灵': '急冻鸟', '属性': ['冰', '飞行'], 'HP': 90, '攻击': 85, '防御': 100, '速度': 85}, 145: {'精灵': '闪电鸟', '属性': ['电', '飞行'], 'HP': 90, '攻击': 90, '防御': 85, '速度': 100}, 146: {'精灵': '火焰鸟', '属性': ['火', '飞行'], 'HP': 90, '攻击': 100, '防御': 90, '速度': 90}, 147: {'精灵': '迷你龙', '属性': ['龙'], 'HP': 41, '攻击': 64, '防御': 45, '速度': 50}, 148: {'精灵': '哈克龙', '属性': ['龙'], 'HP': 61, '攻击': 84, '防御': 65, '速度': 70}, 149: {'精灵': '快龙', '属性': ['龙', '飞行'], 'HP': 91, '攻击': 134, '防御': 95, '速度': 80}, 150: {'精灵': '超梦', '属性': ['超能'], 'HP': 106, '攻击': 110, '防御': 90, '速度': 130}, 151: {'精灵': '梦幻', '属性': ['超能'], 'HP': 100, '攻击': 100, '防御': 100, '速度': 100}}
  4. type = {
  5.     '普通': {'幽灵': 0, '岩石': 0.5, '钢铁': 0.5},
  6.     '格斗': {'飞行': 0.5, '毒': 0.5, '虫': 0.5, '幽灵': 0, '超能': 0.5, '妖精': 0.5},
  7.     '飞行': {'岩石': 0.5, '电': 0.5, '草': 2, '格斗': 2},
  8.     '毒': {'毒': 0.5, '地面': 0.5, '岩石': 0.5, '虫': 2, '草': 2, '妖精': 2},
  9.     '地面': {'飞行': 0, '虫': 0.5, '火': 2, '电': 2, '草': 0.5, '岩石': 2},
  10.     '岩石': {'格斗': 0.5, '地面': 0.5, '飞行': 2, '火': 2, '虫': 2},
  11.     '虫': {'飞行': 0.5, '岩石': 0.5, '火': 0.5, '格斗': 0.5, '草': 2, '超能': 2},
  12.     '幽灵': {'普通': 0, '超能': 2, '幽灵': 2},
  13.     '火': {'水': 0.5, '地面': 0.5, '岩石': 0.5, '火': 0.5, '草': 2, '冰': 2, '虫': 2, '钢': 2},
  14.     '水': {'水': 0.5, '草': 0.5, '地面': 2, '火': 2, '岩石': 2},
  15.     '草': {'飞行': 0.5, '毒': 0.5, '虫': 0.5, '火': 0.5, '水': 2, '地面': 2, '岩石': 2},
  16.     '电': {'地面': 0, '飞行': 2, '水': 2},
  17.     '超能': {'毒': 2, '格斗': 2, '超能': 0.5, '恶': 0.5, '妖精': 0.5},
  18.     '冰': {'水': 0.5, '火': 0.5, '冰': 0.5, '草': 2, '地面': 2, '飞行': 2, '龙': 2},
  19.     '龙': {'冰': 0.5, '龙': 0.5, '妖精': 0},
  20.     '妖精': {'格斗': 2, '毒': 0.5, '钢': 0.5, '火': 0.5, '龙': 2, '恶': 2},
  21.     '恶': {'格斗': 0.5, '幽灵': 2, '超能': 2, '妖精': 0.5}
  22. }
  23. type_moves = {
  24.     "普通": [
  25.         {"招式": "撞击", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 35},
  26.         {"招式": "猛撞", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 20},
  27.         {"招式": "破坏光线", "威力": 150, "效果": "使用后休息一回合", "效果概率": 1, "默认PP": 5},
  28.         {"招式": "舍身冲撞", "威力": 120, "效果": "反弹伤害", "效果概率": 1, "默认PP": 15}
  29.     ],
  30.     "格斗": [
  31.         {"招式": "空手劈", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
  32.         {"招式": "十字劈", "威力": 100, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  33.         {"招式": "地狱翻滚", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
  34.         {"招式": "飞膝踢", "威力": 130, "效果": "反弹伤害", "效果概率": 1, "默认PP": 10}
  35.     ],
  36.     "飞行": [
  37.         {"招式": "啄", "威力": 35, "效果": "无特殊效果", "效果概率": 0, "默认PP": 35},
  38.         {"招式": "翅膀攻击", "威力": 60, "效果": "无特殊效果", "效果概率": 0, "默认PP": 35},
  39.         {"招式": "鹦鹉学舌", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 20},
  40.         {"招式": "神鸟猛击", "威力": 140, "效果": "使用后休息一回合", "效果概率": 1, "默认PP": 5}
  41.     ],
  42.     "毒": [
  43.         {"招式": "毒针", "威力": 15, "效果": "使对手中毒", "效果概率": 0.3, "默认PP": 35},
  44.         {"招式": "溶解液", "威力": 40, "效果": "降低对手防御", "效果概率": 0.2, "默认PP": 30},
  45.         {"招式": "污泥攻击", "威力": 65, "效果": "使对手中毒", "效果概率": 0.4, "默认PP": 20},
  46.         {"招式": "剧毒", "威力": "-", "效果": "使对手剧毒", "效果概率": 1, "默认PP": 10}
  47.     ],
  48.     "地面": [
  49.         {"招式": "泼沙", "威力": 50, "效果": "降低对手命中率", "效果概率": 0.2, "默认PP": 15},
  50.         {"招式": "挖洞", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  51.         {"招式": "地震", "威力": 100, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  52.         {"招式": "大地之力", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10}
  53.     ],
  54.     "岩石": [
  55.         {"招式": "落石", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
  56.         {"招式": "岩石暴击", "威力": 25, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  57.         {"招式": "岩崩", "威力": 75, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  58.         {"招式": "尖石攻击", "威力": 100, "效果": "无特殊效果", "效果概率": 0, "默认PP": 5}
  59.     ],
  60.     "虫": [
  61.         {"招式": "吐丝", "威力": "-", "效果": "降低对手速度", "效果概率": 0.3, "默认PP": 40},
  62.         {"招式": "虫咬", "威力": 60, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
  63.         {"招式": "飞弹针", "威力": 25, "效果": "无特殊效果", "效果概率": 0, "默认PP": 20},
  64.         {"招式": "十字剪", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15}
  65.     ],
  66.     "幽灵": [
  67.         {"招式": "舔", "威力": 30, "效果": "使对手麻痹", "效果概率": 0.2, "默认PP": 30},
  68.         {"招式": "黑夜魔影", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
  69.         {"招式": "奇异之光", "威力": "-", "效果": "使对手混乱", "效果概率": 0.5, "默认PP": 20},
  70.         {"招式": "影子球", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10}
  71.     ],
  72.     "火": [
  73.         {"招式": "火花", "威力": 40, "效果": "使对手灼伤", "效果概率": 0.1, "默认PP": 25},
  74.         {"招式": "火焰轮", "威力": 60, "效果": "使对手灼伤", "效果概率": 0.2, "默认PP": 20},
  75.         {"招式": "喷射火焰", "威力": 90, "效果": "使对手灼伤", "效果概率": 0.3, "默认PP": 15},
  76.         {"招式": "大字爆炎", "威力": 110, "效果": "使对手灼伤", "效果概率": 0.5, "默认PP": 5}
  77.     ],
  78.     "水": [
  79.         {"招式": "水枪", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
  80.         {"招式": "水之波动", "威力": 60, "效果": "使对手混乱", "效果概率": 0.2, "默认PP": 20},
  81.         {"招式": "冲浪", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
  82.         {"招式": "水炮", "威力": 110, "效果": "无特殊效果", "效果概率": 0, "默认PP": 5}
  83.     ],
  84.     "草": [
  85.         {"招式": "吸取", "威力": 20, "效果": "吸取对手HP", "效果概率": 0.5, "默认PP": 25},
  86.         {"招式": "飞叶快刀", "威力": 55, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
  87.         {"招式": "日光束", "威力": 120, "效果": "下一回合攻击", "效果概率": 1, "默认PP": 10},
  88.         {"招式": "花瓣舞", "威力": 120, "效果": "连续攻击后混乱", "效果概率": 1, "默认PP": 10}
  89.     ],
  90.     "电": [
  91.         {"招式": "电击", "威力": 40, "效果": "使对手麻痹", "效果概率": 0.1, "默认PP": 30},
  92.         {"招式": "十万伏特", "威力": 90, "效果": "使对手麻痹", "效果概率": 0.2, "默认PP": 15},
  93.         {"招式": "打雷", "威力": 110, "效果": "使对手麻痹", "效果概率": 0.3, "默认PP": 10},
  94.         {"招式": "伏特攻击", "威力": 120, "效果": "反弹伤害", "效果概率": 1, "默认PP": 5}
  95.     ],
  96.     "超能": [
  97.         {"招式": "念力", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
  98.         {"招式": "幻象光线", "威力": 65, "效果": "使对手混乱", "效果概率": 0.2, "默认PP": 20},
  99.         {"招式": "精神强念", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  100.         {"招式": "预知未来", "威力": 120, "效果": "两回合后攻击", "效果概率": 1, "默认PP": 5}
  101.     ],
  102.     "冰": [
  103.         {"招式": "细雪", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
  104.         {"招式": "冰冻之风", "威力": 55, "效果": "降低对手速度", "效果概率": 0.3, "默认PP": 15},
  105.         {"招式": "暴风雪", "威力": 110, "效果": "使对手冰冻", "效果概率": 0.1, "默认PP": 5},
  106.         {"招式": "绝对零度", "威力": "-", "效果": "一击必杀", "效果概率": 0.05, "默认PP": 5}
  107.     ],
  108.     "龙": [
  109.         {"招式": "龙息", "威力": 60, "效果": "使对手麻痹", "效果概率": 0.2, "默认PP": 20},
  110.         {"招式": "龙之怒", "威力": "-", "效果": "固定造成40点伤害", "效果概率": 1, "默认PP": 10},
  111.         {"招式": "龙爪", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
  112.         {"招式": "逆鳞", "威力": 120, "效果": "连续攻击后混乱", "效果概率": 1, "默认PP": 10}
  113.     ],
  114.     "妖精": [
  115.         {"招式": "妖精之风", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 30},
  116.         {"招式": "月亮之力", "威力": 95, "效果": "降低对手攻击", "效果概率": 0.3, "默认PP": 10},
  117.         {"招式": "魔法闪耀", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
  118.         {"招式": "薄雾场地", "威力": "-", "效果": "降低异常状态概率", "效果概率": 1, "默认PP": 10}
  119.     ],
  120.     "恶": [
  121.         {"招式": "咬住", "威力": 60, "效果": "使对手畏缩", "效果概率": 0.2, "默认PP": 25},
  122.         {"招式": "恶之波动", "威力": 80, "效果": "使对手畏缩", "效果概率": 0.3, "默认PP": 15},
  123.         {"招式": "欺诈", "威力": 95, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
  124.         {"招式": "恶之咆哮", "威力": 80, "效果": "降低对手攻击", "效果概率": 0.2, "默认PP": 10}
  125.     ]
  126. }
  127. prop = {
  128.     "伤药": {"HP": 20},
  129.     "好伤药": {"HP": 50},
  130.     "全复药": {"HP": 100},
  131.     "狗剩": {"HP": 1},
  132.     "攻击提升": {"攻击": 10},
  133.     "防御提升": {"防御": 10},
  134.     "速度提升": {"速度": 10},
  135.     "精灵球": {"概率": 1},
  136.     "超级球": {"概率": 1.5},
  137.     "高级球": {"概率": 2},
  138.     "大师球": {"概率": 1000},
  139.     "PP小补剂": {"PP": 10},  # 恢复单个技能的PP
  140.     "PP大补剂": {"PP": 20}   # 恢复单个技能的PP
  141. }
  142. evolution_map = {
  143.     "妙蛙种子": {"进化等级": 16, "进化形态": "妙蛙草"},
  144.     "妙蛙草": {"进化等级": 32, "进化形态": "妙蛙花"},
  145.     "小火龙": {"进化等级": 16, "进化形态": "火恐龙"},
  146.     "火恐龙": {"进化等级": 36, "进化形态": "喷火龙"},
  147.     "杰尼龟": {"进化等级": 16, "进化形态": "卡咪龟"},
  148.     "卡咪龟": {"进化等级": 36, "进化形态": "水箭龟"},
  149.     "绿毛虫": {"进化等级": 7, "进化形态": "铁甲蛹"},
  150.     "铁甲蛹": {"进化等级": 10, "进化形态": "巴大蝶"},
  151.     "独角虫": {"进化等级": 7, "进化形态": "铁壳昆"},
  152.     "铁壳昆": {"进化等级": 10, "进化形态": "大针蜂"},
  153.     "波波": {"进化等级": 18, "进化形态": "比比鸟"},
  154.     "比比鸟": {"进化等级": 36, "进化形态": "比雕"},
  155.     "小拉达": {"进化等级": 20, "进化形态": "拉达"},
  156.     "烈雀": {"进化等级": 20, "进化形态": "大嘴雀"},
  157.     "阿柏蛇": {"进化等级": 22, "进化形态": "阿柏怪"},
  158.     "皮卡丘": {"进化等级": 30, "进化形态": "雷丘"},
  159.     "穿山鼠": {"进化等级": 22, "进化形态": "穿山王"},
  160.     "尼多兰": {"进化等级": 16, "进化形态": "尼多娜"},
  161.     "尼多娜": {"进化等级": 36, "进化形态": "尼多后"},
  162.     "尼多朗": {"进化等级": 16, "进化形态": "尼多力诺"},
  163.     "尼多力诺": {"进化等级": 36, "进化形态": "尼多王"},
  164.     "六尾": {"进化等级": 30, "进化形态": "九尾"},
  165.     "走路草": {"进化等级": 21, "进化形态": "臭臭花"},
  166.     "臭臭花": {"进化等级": 36, "进化形态": "霸王花"},
  167.     "喇叭芽": {"进化等级": 21, "进化形态": "口呆花"},
  168.     "口呆花": {"进化等级": 36, "进化形态": "大食花"},
  169.     "凯西": {"进化等级": 16, "进化形态": "勇吉拉"},
  170.     "勇吉拉": {"进化等级": 36, "进化形态": "胡地"},
  171.     "腕力": {"进化等级": 28, "进化形态": "豪力"},
  172.     "豪力": {"进化等级": 40, "进化形态": "怪力"},
  173.     "小磁怪": {"进化等级": 30, "进化形态": "三合一磁怪"},
  174.     "大舌贝": {"进化等级": 30, "进化形态": "铁甲贝"},
  175.     "鬼斯": {"进化等级": 25, "进化形态": "鬼斯通"},
  176.     "鬼斯通": {"进化等级": 40, "进化形态": "耿鬼"},
  177.     "小火马": {"进化等级": 40, "进化形态": "烈焰马"},
  178.     "蚊香蝌蚪": {"进化等级": 25, "进化形态": "蚊香蛙"},
  179.     "蚊香蛙": {"进化等级": 40, "进化形态": "快泳蛙"},
  180.     "迷你龙": {"进化等级": 30, "进化形态": "哈克龙"},
  181.     "哈克龙": {"进化等级": 55, "进化形态": "快龙"}
  182. }

  183. def fight():
  184.     global flag
  185.     print("选择技能:")
  186.     for i, skill in enumerate(player["技能"]):
  187.         print(f"{i + 1}. {skill['招式']} (威力: {skill['威力']}, PP: {skill['PP']})")
  188.     try:
  189.         move = int(input("选择技能编号:")) - 1
  190.         if move < 0 or move >= len(player["技能"]):
  191.             print("无效的选择!")
  192.             return
  193.         skill = player["技能"][move]
  194.         if skill["PP"] <= 0:
  195.             print(f"{skill['招式']} 的 PP 已用完,无法使用!")
  196.             return
  197.         skill["PP"] -= 1  # 减少技能的 PP
  198.         print(f"{name}使用了{skill['招式']}!")

  199.         # 选择第一个属性进行查找
  200.         player_type = player["属性"][0] if isinstance(player["属性"], list) else player["属性"]
  201.         enemy_type = enemy["属性"][0] if isinstance(enemy["属性"], list) else enemy["属性"]

  202.         type_attact = type[player_type].get(enemy_type, 1)
  203.         if skill["威力"] != "-" and skill["效果"] == "无特殊效果":
  204.             attact = player["攻击"] * type_attact - enemy["防御"]
  205.         else:
  206.             attact = player["攻击"] * type_attact - enemy["防御"]

  207.         # 处理特殊效果
  208.         if random.random() < skill["效果概率"]:
  209.             if skill["效果"] == "使对手中毒":
  210.                 enemy["状态"] = "中毒"
  211.                 print(f"{ene}中毒了!")
  212.             elif skill["效果"] == "使对手麻痹":
  213.                 enemy["状态"] = "麻痹"
  214.                 print(f"{ene}麻痹了!")
  215.             elif skill["效果"] == "使对手灼伤":
  216.                 enemy["状态"] = "灼伤"
  217.                 print(f"{ene}被灼伤了!")
  218.             elif skill["效果"] == "降低对手防御":
  219.                 enemy["防御"] = max(1, enemy["防御"] - 10)  # 防御降低 10 点
  220.                 print(f"{ene}的防御降低了!")
  221.             elif skill["效果"] == "使对手剧毒":
  222.                 enemy["状态"] = "剧毒"
  223.                 print(f"{ene}中了剧毒!")
  224.             elif skill["效果"] == "使对手混乱":
  225.                 enemy["状态"] = "混乱"
  226.                 print(f"{ene}陷入混乱了!")
  227.             elif skill["效果"] == "反弹伤害":
  228.                 player["HP"] -= attact // 4  # 反弹 1/4 的伤害
  229.                 print(f"{name}受到了反弹伤害!")

  230.         enemy["HP"] -= attact if attact > 0 else 5
  231.         if type_attact < 1:
  232.             print("收效甚微……")
  233.         elif type_attact > 1:
  234.             print("效果拔群!")
  235.         print(f"{ene}受到了", attact, "点伤害!") if attact > 0 else print(f"好像没有什么效果……")
  236.         if enemy["HP"] <= 0:
  237.             print(f"{ene}被打败了!")
  238.             # 计算经验值奖励
  239.             exp_gain = enemy["等级"] * 5  # 每级奖励 5 点经验值
  240.             player["经验值"] += exp_gain
  241.             print(f"{name}获得了 {exp_gain} 点经验值!")

  242.             # 检查是否升级
  243.             while player["经验值"] >= player["升级经验"]:
  244.                 player["经验值"] -= player["升级经验"]
  245.                 player["等级"] += 1
  246.                 player["升级经验"] = player["等级"] * 10  # 更新升级所需经验值
  247.                 print(f"{name}升到了等级 {player['等级']}!")
  248.                 updated_player = calculate_stats(dict[next(k for k, v in dict.items() if v["精灵"] == player["精灵"])], player["等级"])
  249.                 updated_player["技能"] = player["技能"]  # 保留原有技能
  250.                 player.update(updated_player)  # 更新属性

  251.                 # 检查是否可以进化
  252.                 if player["精灵"] in evolution_map:
  253.                     evolution = evolution_map[player["精灵"]]
  254.                     if player["等级"] >= evolution["进化等级"]:
  255.                         print(f"{player['精灵']}达到了等级 {evolution['进化等级']},正在进化!")
  256.                         new_form = evolution["进化形态"]
  257.                         updated_player = calculate_stats(dict[next(k for k, v in dict.items() if v["精灵"] == new_form)], player["等级"])
  258.                         updated_player["技能"] = player["技能"]  # 保留原有技能
  259.                         player.update(updated_player)
  260.                         print(f"恭喜!你的{player['精灵']}进化成了{new_form}!")
  261.             flag = False
  262.             return
  263.         print(f"{ene}剩余HP:", enemy["HP"])
  264.     except (ValueError, IndexError):
  265.         print("请输入有效的数字!")
  266.    
  267. def baggy():
  268.     """使用背包物品"""
  269.     global bag, enebag, flag, pokemon, player, enemy, name, ene
  270.     while True:
  271.         try:
  272.             # 汇总背包中的物品
  273.             bag_summary = {}
  274.             for item in bag:
  275.                 if item in bag_summary:
  276.                     bag_summary[item] += 1
  277.                 else:
  278.                     bag_summary[item] = 1

  279.             # 显示背包物品
  280.             print("你想要使用什么呢?")
  281.             indexed_bag = list(bag_summary.items())
  282.             for i, (item, count) in enumerate(indexed_bag):
  283.                 print(f"{i + 1}. {item} * {count}")
  284.             print("0. 取消")

  285.             choice = int(input("选择物品(输入编号):")) - 1
  286.             if choice == -1:
  287.                 print("取消使用物品。")
  288.                 return
  289.             if choice < 0 or choice >= len(indexed_bag):
  290.                 print("无效的选择!请重新输入。")
  291.                 continue

  292.             thing = indexed_bag[choice][0]  # 获取选择的物品名称

  293.             # 使用物品逻辑
  294.             if "药" in thing or thing == "狗剩":
  295.                 player["HP"] = min(player["HP"] + prop[thing]["HP"], player["最大HP"])
  296.                 print(f"{name}使用了{thing},HP恢复了{prop[thing]['HP']}点!")
  297.             elif "提升" in thing:
  298.                 stat = list(prop[thing].keys())[0]
  299.                 player[stat] += prop[thing][stat]
  300.                 print(f"{name}使用了{thing},{stat}提升了{prop[thing][stat]}点!")
  301.             elif "PP" in thing:
  302.                 for i, skill in enumerate(player["技能"]):
  303.                     print(f"{i + 1}. {skill['招式']} (PP: {skill['PP']}/{skill['最大PP']})")
  304.                 print("0. 取消")
  305.                 skill_choice = int(input("选择要恢复PP的技能编号:")) - 1
  306.                 if skill_choice == -1:
  307.                     print("取消恢复PP。")
  308.                     return
  309.                 if 0 <= skill_choice < len(player["技能"]):
  310.                     skill = player["技能"][skill_choice]
  311.                     skill["PP"] = min(skill["PP"] + prop[thing]["PP"], skill["最大PP"])
  312.                     print(f"{skill['招式']} 的PP恢复了{prop[thing]['PP']}点!")
  313.                 else:
  314.                     print("无效的选择!请重新输入。")
  315.                     continue
  316.             elif "球" in thing:
  317.                 probabilty = prop[thing]["概率"] * enemy["速度"] / enemy["HP"] / 3
  318.                 print(f"捕获概率为{probabilty:.2f}!")
  319.                 if probabilty > 1:
  320.                     probabilty = 1
  321.                 elif probabilty < 0:
  322.                     probabilty = 0
  323.                 if random.random() < probabilty:
  324.                     print(f"{name}使用了{thing},捕获成功!")
  325.                     pokemon.append(enemy)
  326.                     bag.extend(enebag)
  327.                     print(f"获得了{ene}!")
  328.                     print(f"获得了{enebag}!")
  329.                     flag = False
  330.                     return
  331.                 else:
  332.                     print("捕获失败!")

  333.             # 减少物品数量
  334.             bag.remove(thing)
  335.             return
  336.         except ValueError:
  337.             print("请输入有效的数字!")
  338.         except IndexError:
  339.             print("选择的物品不存在,请重新选择!")


  340. def pokey():
  341.     """切换宝可梦"""
  342.     global name, player
  343.     while True:
  344.         try:
  345.             print("你现在拥有的宝可梦:")
  346.             for i, p in enumerate(pokemon):
  347.                 print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
  348.             print("0. 取消")
  349.             poke = int(input("选择宝可梦(输入编号):")) - 1
  350.             if poke == -1:
  351.                 print("取消切换宝可梦。")
  352.                 return
  353.             if 0 <= poke < len(pokemon) and pokemon[poke]["状态"] == "正常":
  354.                 player = pokemon[poke]
  355.                 name = player["精灵"]
  356.                 print(f"你选择了{player['精灵']}!")
  357.                 return
  358.             else:
  359.                 print("无效的选择!请重新输入。")
  360.         except ValueError:
  361.             print("请输入有效的数字!")
  362. def calculate_stats(base_stats, level):
  363.     """根据等级动态计算宝可梦的属性"""
  364.     max_hp = base_stats["HP"] + level * 4  # 每级增加 4 点 HP
  365.     skills = assign_skills(base_stats["属性"])
  366.     return {
  367.         "HP": max_hp,
  368.         "最大HP": max_hp,  # 设置最大 HP
  369.         "攻击": base_stats["攻击"] + level * 2,  # 每级增加 2 点攻击
  370.         "防御": base_stats["防御"] + level * 2,  # 每级增加 2 点防御
  371.         "速度": base_stats["速度"] + level,  # 每级增加 1 点速度
  372.         "等级": level,
  373.         "经验值": 0,  # 当前经验值
  374.         "升级经验": level * 10,  # 升级所需经验值,随等级增加
  375.         "精灵": base_stats["精灵"],
  376.         "属性": base_stats["属性"],  # 保留属性列表
  377.         "状态": "正常",
  378.         "技能": skills  # 分配技能
  379.     }
  380. def poke_center():
  381.     """神奇宝贝中心功能"""
  382.     global pokemon
  383.     while True:
  384.         print("\n欢迎来到神奇宝贝中心!")
  385.         print("1. 恢复所有宝可梦的HP和PP")
  386.         print("2. 打开电脑管理系统")
  387.         print("0. 离开神奇宝贝中心")
  388.         choice = int(input("请选择操作:"))
  389.         if choice == 1:
  390.             for p in pokemon:
  391.                 base_stats = next(v for k, v in dict.items() if v["精灵"] == p["精灵"])
  392.                 p["HP"] = p["最大HP"]  # 恢复到最大 HP
  393.                 for skill in p["技能"]:
  394.                     skill["PP"] = skill["最大PP"]  # 恢复到最大 PP
  395.             print("所有宝可梦的HP和PP已恢复!")
  396.         elif choice == 2:
  397.             manage_pc()  # 打开电脑管理系统
  398.         elif choice == 0:
  399.             print("离开神奇宝贝中心。")
  400.             break
  401.         else:
  402.             print("无效的选择,请重新输入!")
  403. def welcome():
  404.     global name, ene, player, enemy, bag, enebag, pokemon

  405.     # 玩家最低等级和最高等级
  406.     min_level = min(p["等级"] for p in pokemon)
  407.     max_level = max(p["等级"] for p in pokemon)

  408.     # 随机选择野生宝可梦
  409.     base_enemy = dict[random.randint(1, len(dict))]  # 从 dict 中随机选择一个宝可梦

  410.     # 根据宝可梦的进化等级范围动态调整野生宝可梦的等级
  411.     if base_enemy["精灵"] in evolution_map:
  412.         evolution = evolution_map[base_enemy["精灵"]]
  413.         min_enemy_level = max(1, evolution["进化等级"] - 5)  # 进化等级前 5 级
  414.         max_enemy_level = evolution["进化等级"] + 5  # 进化等级后 5 级
  415.     else:
  416.         min_enemy_level = max(1, min_level - 3)  # 默认比玩家最低等级低 3 级
  417.         max_enemy_level = min_level + 3  # 默认比玩家最低等级高 3 级

  418.     # 限制野生宝可梦的等级范围
  419.     max_enemy_level = min(max_enemy_level, max_level + 2)  # 不超过玩家最高等级 + 2
  420.     if len(pokemon) == 1 and min_level <= 5:  # 如果玩家只有一个低等级宝可梦
  421.         max_enemy_level = min(max_enemy_level, 5)  # 限制野生宝可梦等级不超过 5

  422.     # 修复:确保 min_enemy_level 不大于 max_enemy_level
  423.     if min_enemy_level > max_enemy_level:
  424.         min_enemy_level, max_enemy_level = max_enemy_level, min_enemy_level

  425.     # 确保野生宝可梦等级在合理范围内
  426.     enemy_level = random.randint(min_enemy_level, max_enemy_level)

  427.     # 动态计算野生宝可梦属性
  428.     enemy = calculate_stats(base_enemy, enemy_level)
  429.     if "技能" not in enemy or not enemy["技能"]:  # 如果未分配技能或技能为空
  430.         enemy["技能"] = assign_skills(enemy["属性"])  # 分配技能
  431.     enebag = [list(prop.keys())[random.randint(0, len(prop.keys()) - 1)] for _ in range(5)]
  432.     name = player["精灵"]
  433.     ene = enemy["精灵"]
  434.     print(f"啊!野生的{ene} (等级: {enemy_level}) 跳了出来!")

  435.     # 自动选择队伍中的一号宝可梦
  436.     player = pokemon[0]
  437.     name = player["精灵"]
  438.     print(f"{player['精灵']}!就决定是你了!")


  439. def manage_pokemon():
  440.     """管理精灵队伍"""
  441.     global pokemon
  442.     while len(pokemon) > 6:
  443.         print("你的队伍已满(最多6个精灵)。请选择要移除的精灵:")
  444.         for i, p in enumerate(pokemon):
  445.             print(f"{i + 1}. {p['精灵']} (HP: {p['HP']})")
  446.         try:
  447.             choice = int(input("选择要移除的精灵编号(输入0取消):")) - 1
  448.             if choice == -1:
  449.                 print("取消移除操作。")
  450.                 break
  451.             if 0 <= choice < len(pokemon):
  452.                 removed = pokemon.pop(choice)
  453.                 print(f"已移除精灵:{removed['精灵']}")
  454.             else:
  455.                 print("无效的选择,请重新输入!")
  456.         except ValueError:
  457.             print("请输入有效的数字!")
  458. def save_game():
  459.     """保存游戏进度到文件"""
  460.     save_data = {
  461.         "player": player,
  462.         "enemy": enemy,
  463.         "bag": bag,
  464.         "pokemon": pokemon,
  465.     }
  466.     with open(SAVE_FILE, "w", encoding="utf-8") as f:
  467.         json.dump(save_data, f, ensure_ascii=False, indent=4)
  468.     print("游戏进度已保存!")

  469. def load_game():
  470.     """加载游戏进度"""
  471.     global player, enemy, bag, pokemon
  472.     if os.path.exists(SAVE_FILE):
  473.         try:
  474.             with open(SAVE_FILE, "r", encoding="utf-8") as f:
  475.                 save_data = json.load(f)
  476.                 player = save_data["player"]
  477.                 enemy = save_data["enemy"]
  478.                 bag = save_data["bag"]
  479.                 pokemon = save_data["pokemon"]
  480.             print("游戏进度已加载!")
  481.         except json.JSONDecodeError:
  482.             print("保存文件损坏或为空,重新初始化游戏。")
  483.             initialize_game()
  484.     else:
  485.         print("未找到保存的游戏进度,将开始新游戏。")
  486.         initialize_game()
  487. def assign_skills(pokemon_types):
  488.     """根据宝可梦的属性列表分配技能"""
  489.     skills = []

  490.     # 获取与宝可梦属性相关的技能
  491.     for pokemon_type in pokemon_types:
  492.         if pokemon_type in type_moves:
  493.             for move in random.sample(type_moves[pokemon_type], min(2, len(type_moves[pokemon_type]))):  # 每种属性分配最多2个技能
  494.                 move_with_pp = move.copy()
  495.                 move_with_pp["PP"] = move["默认PP"]  # 当前 PP
  496.                 move_with_pp["最大PP"] = move["默认PP"]  # 最大 PP
  497.                 skills.append(move_with_pp)

  498.     # 获取普通系技能作为通用技能
  499.     if "普通" in type_moves:
  500.         for move in random.sample(type_moves["普通"], min(1, len(type_moves["普通"]))):  # 分配1个普通系技能
  501.             move_with_pp = move.copy()
  502.             move_with_pp["PP"] = move["默认PP"]
  503.             move_with_pp["最大PP"] = move["默认PP"]
  504.             skills.append(move_with_pp)

  505.     # 随机分配其他属性的技能
  506.     other_types = [t for t in type_moves.keys() if t not in pokemon_types and t != "普通"]
  507.     if other_types:
  508.         random_type = random.choice(other_types)  # 随机选择一个其他属性
  509.         for move in random.sample(type_moves[random_type], min(1, len(type_moves[random_type]))):  # 分配1个其他属性技能
  510.             move_with_pp = move.copy()
  511.             move_with_pp["PP"] = move["默认PP"]
  512.             move_with_pp["最大PP"] = move["默认PP"]
  513.             skills.append(move_with_pp)

  514.     # 确保技能数量为 4 个,不足时补充普通系技能
  515.     while len(skills) < 4:
  516.         move = random.choice(type_moves["普通"]).copy()
  517.         move["PP"] = move["默认PP"]
  518.         move["最大PP"] = move["默认PP"]
  519.         skills.append(move)

  520.     # 如果技能超过 4 个,随机移除多余的技能
  521.     while len(skills) > 4:
  522.         skills.pop(random.randint(0, len(skills) - 1))

  523.     return skills  # 返回技能列表
  524. def manage_pc():
  525.     """电脑管理系统"""
  526.     global pc_pokemon, pc_bag, pokemon, bag
  527.     while True:
  528.         try:
  529.             print("电脑管理系统:")
  530.             print("1. 查看电脑中的宝可梦")
  531.             print("2. 查看电脑中的物品")
  532.             print("3. 存入宝可梦")
  533.             print("4. 取出宝可梦")
  534.             print("5. 存入物品")
  535.             print("6. 取出物品")
  536.             print("0. 退出电脑管理")
  537.             choice = int(input("请选择操作:"))
  538.             if choice == 0:
  539.                 print("退出电脑管理系统。")
  540.                 return
  541.             elif choice == 1:
  542.                 print("电脑中的宝可梦:")
  543.                 if not pc_pokemon:
  544.                     print("电脑中没有宝可梦!")
  545.                 else:
  546.                     for i, p in enumerate(pc_pokemon):
  547.                         print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
  548.             elif choice == 2:
  549.                 print("电脑中的物品:")
  550.                 if not pc_bag:
  551.                     print("电脑中没有物品!")
  552.                 else:
  553.                     for i, item in enumerate(pc_bag):
  554.                         print(f"{i + 1}. {item}")
  555.             elif choice == 3:
  556.                 if len(pokemon) <= 1:
  557.                     print("队伍中至少需要保留一个宝可梦!")
  558.                     continue
  559.                 print("你的队伍:")
  560.                 for i, p in enumerate(pokemon):
  561.                     print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
  562.                 print("0. 取消")
  563.                 idx = int(input("选择要存入电脑的宝可梦编号:")) - 1
  564.                 if idx == -1:
  565.                     print("取消存入宝可梦。")
  566.                     continue
  567.                 if 0 <= idx < len(pokemon):
  568.                     pc_pokemon.append(pokemon.pop(idx))
  569.                     print("宝可梦已存入电脑!")
  570.                 else:
  571.                     print("无效的选择!")
  572.             elif choice == 4:
  573.                 if not pc_pokemon:
  574.                     print("电脑中没有宝可梦!")
  575.                     continue
  576.                 print("电脑中的宝可梦:")
  577.                 for i, p in enumerate(pc_pokemon):
  578.                     print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
  579.                 print("0. 取消")
  580.                 idx = int(input("选择要取出的宝可梦编号:")) - 1
  581.                 if idx == -1:
  582.                     print("取消取出宝可梦。")
  583.                     continue
  584.                 if 0 <= idx < len(pc_pokemon):
  585.                     if len(pokemon) >= 6:
  586.                         print("队伍已满,无法取出宝可梦!")
  587.                     else:
  588.                         pokemon.append(pc_pokemon.pop(idx))
  589.                         print("宝可梦已取出!")
  590.                 else:
  591.                     print("无效的选择!")
  592.             elif choice == 5:
  593.                 if not bag:
  594.                     print("背包中没有物品!")
  595.                     continue
  596.                 print("你的背包:")
  597.                 for i, item in enumerate(bag):
  598.                     print(f"{i + 1}. {item}")
  599.                 print("0. 取消")
  600.                 idx = int(input("选择要存入电脑的物品编号:")) - 1
  601.                 if idx == -1:
  602.                     print("取消存入物品。")
  603.                     continue
  604.                 if 0 <= idx < len(bag):
  605.                     pc_bag.append(bag.pop(idx))
  606.                     print("物品已存入电脑!")
  607.                 else:
  608.                     print("无效的选择!")
  609.             elif choice == 6:
  610.                 if not pc_bag:
  611.                     print("电脑中没有物品!")
  612.                     continue
  613.                 print("电脑中的物品:")
  614.                 for i, item in enumerate(pc_bag):
  615.                     print(f"{i + 1}. {item}")
  616.                 print("0. 取消")
  617.                 idx = int(input("选择要取出的物品编号:")) - 1
  618.                 if idx == -1:
  619.                     print("取消取出物品。")
  620.                     continue
  621.                 if 0 <= idx < len(pc_bag):
  622.                     bag.append(pc_bag.pop(idx))
  623.                     print("物品已取出!")
  624.                 else:
  625.                     print("无效的选择!")
  626.             else:
  627.                 print("无效的选择,请重新输入!")
  628.         except ValueError:
  629.             print("请输入有效的数字!")
  630. def battle():
  631.     global flag, name, ene, player, enemy, bag, enebag, pokemon
  632.     action = int(input(f"{name} 想做什么呢?\n1.战斗\n2.背包\n3.宝可梦\n4.逃跑\n"))
  633.     if action == 1:
  634.         fight()
  635.     if action == 2:
  636.         baggy()
  637.     if action == 3:
  638.         pokey()
  639.     if action == 4:
  640.         print("成功地逃跑了!")
  641.         flag = False
  642.         return
  643.     if flag == True:
  644.         ene_move = enemy["技能"][random.randint(0, 3)]
  645.         print(f"{ene}使用了{ene_move['招式']}!")

  646.         # 选择第一个属性进行查找
  647.         enemy_type = enemy["属性"][0] if isinstance(enemy["属性"], list) else enemy["属性"]
  648.         player_type = player["属性"][0] if isinstance(player["属性"], list) else player["属性"]

  649.         type_attact = type[enemy_type].get(player_type, 1)
  650.         attact = 0  # 初始化 attact,防止未赋值错误
  651.         if ene_move["威力"] != "-" and ene_move["效果"] == "无特殊效果":
  652.             attact = enemy["攻击"] * type_attact - player["防御"]
  653.         elif ene_move["效果"] == "使对手中毒":
  654.             attact = enemy["攻击"] * type_attact - player["防御"] + 10
  655.         else:
  656.             attact = enemy["攻击"] * type_attact - player["防御"]

  657.         player["HP"] -= attact if attact > 0 else 5
  658.         if type_attact < 1:
  659.             print("收效甚微……")
  660.         elif type_attact > 1:
  661.             print("效果拔群!")
  662.         print(f"{name}受到了", attact, "点伤害!") if attact > 0 else print(f"好像没有什么效果……")
  663.         if player["HP"] <= 0:
  664.             print(f"{name}被打败了!")
  665.             player["状态"] = "濒死"  # 标记为濒死状态
  666.             print(f"{name}已进入濒死状态,无法继续战斗!")
  667.             # 检查是否还有可用的宝可梦
  668.             available_pokemon = [p for p in pokemon if p["状态"] == "正常"]
  669.             if not available_pokemon:
  670.                 print("所有宝可梦都已濒死!")
  671.                 print("游戏结束!")
  672.                 sys.exit()
  673.             print("请选择一个新的宝可梦继续战斗:")
  674.             for i, p in enumerate(pokemon):
  675.                 print(f"{i + 1}.{p['精灵']} (等级: {p['等级']}, 状态: {p['状态']})")
  676.             poke = int(input("选择宝可梦:")) - 1
  677.             if poke < 0 or poke >= len(pokemon) or pokemon[poke]["状态"] != "正常":
  678.                 print("无效的选择!默认使用第一个可用宝可梦。")
  679.                 poke = next(i for i, p in enumerate(pokemon) if p["状态"] == "正常")
  680.             player = pokemon[poke]
  681.             name = player["精灵"]
  682.             print(f"你选择了{player['精灵']}!")
  683.             time.sleep(1)
  684.             return
  685.         print(f"{name}剩余HP:", player["HP"])
  686.     else:
  687.         # 战斗胜利后掉落道具
  688.         if random.random() < 0.5:  # 50% 概率掉落道具
  689.             dropped_item = random.choice(list(prop.keys()))
  690.             bag.append(dropped_item)
  691.             print(f"战斗胜利!你获得了道具:{dropped_item}")
  692.         # 战斗结束后询问是否进入神奇宝贝中心
  693.         if input("是否进入神奇宝贝中心?(y/n): ").lower() == 'y':
  694.             poke_center()
  695. def poke_center():
  696.     """神奇宝贝中心功能"""
  697.     global pokemon
  698.     while True:
  699.         print("\n欢迎来到神奇宝贝中心!")
  700.         print("1. 恢复所有宝可梦的HP和PP")
  701.         print("2. 打开电脑管理系统")
  702.         print("0. 离开神奇宝贝中心")
  703.         choice = int(input("请选择操作:"))
  704.         if choice == 1:
  705.             for p in pokemon:
  706.                 base_stats = next(v for k, v in dict.items() if v["精灵"] == p["精灵"])
  707.                 p["HP"] = p["最大HP"]  # 恢复到最大 HP
  708.                 for skill in p["技能"]:
  709.                     skill["PP"] = skill["最大PP"]  # 恢复到最大 PP
  710.             print("所有宝可梦的HP和PP已恢复!")
  711.         elif choice == 2:
  712.             manage_pc()  # 打开电脑管理系统
  713.         elif choice == 0:
  714.             print("离开神奇宝贝中心。")
  715.             break
  716.         else:
  717.             print("无效的选择,请重新输入!")
  718. def initialize_game():
  719.     """初始化游戏状态"""
  720.     global player, bag, pokemon, trainer_name, pc_pokemon, pc_bag
  721.     trainer_name = input("请输入你的名字:")
  722.     print(f"欢迎来到宝可梦世界,{trainer_name}!")
  723.     print("请选择你的初始宝可梦:")
  724.     starters = [
  725.         {'HP': 45, '精灵': '妙蛙种子', '属性': ['草', '毒'], '攻击': 49, '防御': 49, '速度': 45},
  726.         {'HP': 39, '精灵': '小火龙', '属性': ['火'], '攻击': 52, '防御': 43, '速度': 65},
  727.         {'HP': 44, '精灵': '杰尼龟', '属性': ['水'], '攻击': 48, '防御': 65, '速度': 43}
  728.     ]
  729.     for i, starter in enumerate(starters):
  730.         print(f"{i + 1}. {starter['精灵']} (等级: 5)")
  731.     choice = int(input("选择你的宝可梦(输入编号):")) - 1
  732.     if choice < 0 or choice >= len(starters):
  733.         print("无效选择,默认选择妙蛙种子。")
  734.         choice = 0
  735.     player = calculate_stats(starters[choice], 5)  # 初始等级为 5
  736.     player["技能"] = assign_skills(player["属性"])  # 分配技能
  737.     bag = [list(prop.keys())[random.randint(0, len(prop.keys()) - 1)] for _ in range(5)]
  738.     pokemon = [player]
  739.     pc_pokemon = []  # 初始化电脑存储的宝可梦
  740.     pc_bag = []  # 初始化电脑存储的物品
  741. SAVE_FILE = "game_save.json"
  742. def main():
  743.     global flag
  744.     load_game()  # 加载游戏进度
  745.     flag = True
  746.     welcome()
  747.     while True:  # 使用无限循环,直到玩家选择退出
  748.         while flag:
  749.             battle()
  750.             manage_pokemon()  # 每次战斗后管理精灵队伍
  751.         if input("是否保存游戏进度?(y/n): ").lower() == 'y':
  752.             save_game()  # 保存游戏进度
  753.         if input("是否继续游戏?(y/n): ").lower() != 'y':
  754.             print("游戏结束!")
  755.             break
  756.         flag = True  # 重置 flag,继续下一场战斗
  757.         welcome()  # 开始新的战斗


  758. main()
复制代码

更新日志:更新了技能,物品,捕捉,升级,进化,神奇宝贝中心和电脑等机制

这个的难度很大,所以攻略在这:开局很难打死别人,所以遇到很强的野生宝可梦时直接抓,大师球不少!

评分

参与人数 5荣誉 +14 鱼币 +15 贡献 +6 C币 +1 收起 理由
小伤口 + 5 + 5 + 3 感谢楼主无私奉献!
某一个“天” + 5 鱼C有你更精彩^_^
不二如是 + 2 + 3 + 3 + 1 鱼C有你更精彩^_^
player-none + 2 + 2
琅琊王朝 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 20:14 | 显示全部楼层
用户提供的代码存在多处语法错误和逻辑缺陷,以下是主要问题的分析及解决方案:


主要问题清单:
  • 语法错误:精灵属性字段缺失(如'属性': ,)
  • 数据缺失:type_moves字典未定义技能
  • 逻辑错误:fight()函数中比较运算符错误(enemy = player)
  • 变量错误:type_attact应为type_attack,全局变量未声明
  • 函数缺失:calculate_stats()、save_game()等关键函数未实现


基础修复方案:
  • 补充精灵属性:
    1. 1: {'精灵': '妙蛙种子', '属性': '草', 'HP': 45...}
    2. 4: {'精灵': '小火龙', '属性': '火', 'HP': 39...}
    3. 7: {'精灵': '杰尼龟', '属性': '水', 'HP': 44...}
    复制代码

    (需补全所有151个精灵的属性)
  • 添加技能数据:
    1. type_moves = {
    2.     "普通": ["冲撞", "抓"],
    3.     "火": ["火花", "火焰喷射"],
    4.     "水": ["水枪", "水炮"]
    5.     # 需补全所有属性对应技能
    6. }
    复制代码

  • 修正战斗逻辑:
    1. if enemy['HP'] <= 0:  # 原错误代码:enemy = player
    2.     print(f"{ene}倒下了!")
    3.     # 获取经验值逻辑
    4.     exp_gain = enemy.get('经验值', 20)
    5.     player['经验值'] += exp_gain
    复制代码



推荐优化方向:
  • 使用面向对象编程(OOP)重构代码
  • 创建Pokemon类管理精灵属性和行为
  • 使用global关键字的代码需改为实例变量
  • 实现完善的存档系统(json序列化)


需要用户明确具体想实现的功能或遇到的报错信息,才能提供更精准的调试帮助。当前代码框架需要大量基础工作才能正常运行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 20:57 | 显示全部楼层

回帖奖励 +2 鱼币

恐怖如斯
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 21:41 | 显示全部楼层

回帖奖励 +2 鱼币

111
krf
驾到!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 23:40 | 显示全部楼层

回帖奖励 +2 鱼币

好贴不要停!

复兴fishc!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 07:31 From FishC Mobile | 显示全部楼层
哎呀过奖了,实际上仔细看都是基础的一些代码堆扯起来的,没啥技术含量见笑了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 10:54 | 显示全部楼层

回帖奖励 +2 鱼币

上个效果图更好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 21:55 | 显示全部楼层

回帖奖励 +2 鱼币

手写的???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:16 | 显示全部楼层
这么多行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 12 小时前 | 显示全部楼层

回帖奖励 +2 鱼币


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-11 13:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表