zyx2012 发表于 2025-5-9 20:13:27

宝可梦小游戏 V1.1

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

环境:python v3.13.3

import random, sys, os, json
import time



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}}
type = {
    '普通': {'幽灵': 0, '岩石': 0.5, '钢铁': 0.5},
    '格斗': {'飞行': 0.5, '毒': 0.5, '虫': 0.5, '幽灵': 0, '超能': 0.5, '妖精': 0.5},
    '飞行': {'岩石': 0.5, '电': 0.5, '草': 2, '格斗': 2},
    '毒': {'毒': 0.5, '地面': 0.5, '岩石': 0.5, '虫': 2, '草': 2, '妖精': 2},
    '地面': {'飞行': 0, '虫': 0.5, '火': 2, '电': 2, '草': 0.5, '岩石': 2},
    '岩石': {'格斗': 0.5, '地面': 0.5, '飞行': 2, '火': 2, '虫': 2},
    '虫': {'飞行': 0.5, '岩石': 0.5, '火': 0.5, '格斗': 0.5, '草': 2, '超能': 2},
    '幽灵': {'普通': 0, '超能': 2, '幽灵': 2},
    '火': {'水': 0.5, '地面': 0.5, '岩石': 0.5, '火': 0.5, '草': 2, '冰': 2, '虫': 2, '钢': 2},
    '水': {'水': 0.5, '草': 0.5, '地面': 2, '火': 2, '岩石': 2},
    '草': {'飞行': 0.5, '毒': 0.5, '虫': 0.5, '火': 0.5, '水': 2, '地面': 2, '岩石': 2},
    '电': {'地面': 0, '飞行': 2, '水': 2},
    '超能': {'毒': 2, '格斗': 2, '超能': 0.5, '恶': 0.5, '妖精': 0.5},
    '冰': {'水': 0.5, '火': 0.5, '冰': 0.5, '草': 2, '地面': 2, '飞行': 2, '龙': 2},
    '龙': {'冰': 0.5, '龙': 0.5, '妖精': 0},
    '妖精': {'格斗': 2, '毒': 0.5, '钢': 0.5, '火': 0.5, '龙': 2, '恶': 2},
    '恶': {'格斗': 0.5, '幽灵': 2, '超能': 2, '妖精': 0.5}
}
type_moves = {
    "普通": [
      {"招式": "撞击", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 35},
      {"招式": "猛撞", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 20},
      {"招式": "破坏光线", "威力": 150, "效果": "使用后休息一回合", "效果概率": 1, "默认PP": 5},
      {"招式": "舍身冲撞", "威力": 120, "效果": "反弹伤害", "效果概率": 1, "默认PP": 15}
    ],
    "格斗": [
      {"招式": "空手劈", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
      {"招式": "十字劈", "威力": 100, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "地狱翻滚", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
      {"招式": "飞膝踢", "威力": 130, "效果": "反弹伤害", "效果概率": 1, "默认PP": 10}
    ],
    "飞行": [
      {"招式": "啄", "威力": 35, "效果": "无特殊效果", "效果概率": 0, "默认PP": 35},
      {"招式": "翅膀攻击", "威力": 60, "效果": "无特殊效果", "效果概率": 0, "默认PP": 35},
      {"招式": "鹦鹉学舌", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 20},
      {"招式": "神鸟猛击", "威力": 140, "效果": "使用后休息一回合", "效果概率": 1, "默认PP": 5}
    ],
    "毒": [
      {"招式": "毒针", "威力": 15, "效果": "使对手中毒", "效果概率": 0.3, "默认PP": 35},
      {"招式": "溶解液", "威力": 40, "效果": "降低对手防御", "效果概率": 0.2, "默认PP": 30},
      {"招式": "污泥攻击", "威力": 65, "效果": "使对手中毒", "效果概率": 0.4, "默认PP": 20},
      {"招式": "剧毒", "威力": "-", "效果": "使对手剧毒", "效果概率": 1, "默认PP": 10}
    ],
    "地面": [
      {"招式": "泼沙", "威力": 50, "效果": "降低对手命中率", "效果概率": 0.2, "默认PP": 15},
      {"招式": "挖洞", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "地震", "威力": 100, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "大地之力", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10}
    ],
    "岩石": [
      {"招式": "落石", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
      {"招式": "岩石暴击", "威力": 25, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "岩崩", "威力": 75, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "尖石攻击", "威力": 100, "效果": "无特殊效果", "效果概率": 0, "默认PP": 5}
    ],
    "虫": [
      {"招式": "吐丝", "威力": "-", "效果": "降低对手速度", "效果概率": 0.3, "默认PP": 40},
      {"招式": "虫咬", "威力": 60, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
      {"招式": "飞弹针", "威力": 25, "效果": "无特殊效果", "效果概率": 0, "默认PP": 20},
      {"招式": "十字剪", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15}
    ],
    "幽灵": [
      {"招式": "舔", "威力": 30, "效果": "使对手麻痹", "效果概率": 0.2, "默认PP": 30},
      {"招式": "黑夜魔影", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
      {"招式": "奇异之光", "威力": "-", "效果": "使对手混乱", "效果概率": 0.5, "默认PP": 20},
      {"招式": "影子球", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10}
    ],
    "火": [
      {"招式": "火花", "威力": 40, "效果": "使对手灼伤", "效果概率": 0.1, "默认PP": 25},
      {"招式": "火焰轮", "威力": 60, "效果": "使对手灼伤", "效果概率": 0.2, "默认PP": 20},
      {"招式": "喷射火焰", "威力": 90, "效果": "使对手灼伤", "效果概率": 0.3, "默认PP": 15},
      {"招式": "大字爆炎", "威力": 110, "效果": "使对手灼伤", "效果概率": 0.5, "默认PP": 5}
    ],
    "水": [
      {"招式": "水枪", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
      {"招式": "水之波动", "威力": 60, "效果": "使对手混乱", "效果概率": 0.2, "默认PP": 20},
      {"招式": "冲浪", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
      {"招式": "水炮", "威力": 110, "效果": "无特殊效果", "效果概率": 0, "默认PP": 5}
    ],
    "草": [
      {"招式": "吸取", "威力": 20, "效果": "吸取对手HP", "效果概率": 0.5, "默认PP": 25},
      {"招式": "飞叶快刀", "威力": 55, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
      {"招式": "日光束", "威力": 120, "效果": "下一回合攻击", "效果概率": 1, "默认PP": 10},
      {"招式": "花瓣舞", "威力": 120, "效果": "连续攻击后混乱", "效果概率": 1, "默认PP": 10}
    ],
    "电": [
      {"招式": "电击", "威力": 40, "效果": "使对手麻痹", "效果概率": 0.1, "默认PP": 30},
      {"招式": "十万伏特", "威力": 90, "效果": "使对手麻痹", "效果概率": 0.2, "默认PP": 15},
      {"招式": "打雷", "威力": 110, "效果": "使对手麻痹", "效果概率": 0.3, "默认PP": 10},
      {"招式": "伏特攻击", "威力": 120, "效果": "反弹伤害", "效果概率": 1, "默认PP": 5}
    ],
    "超能": [
      {"招式": "念力", "威力": 50, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
      {"招式": "幻象光线", "威力": 65, "效果": "使对手混乱", "效果概率": 0.2, "默认PP": 20},
      {"招式": "精神强念", "威力": 90, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "预知未来", "威力": 120, "效果": "两回合后攻击", "效果概率": 1, "默认PP": 5}
    ],
    "冰": [
      {"招式": "细雪", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 25},
      {"招式": "冰冻之风", "威力": 55, "效果": "降低对手速度", "效果概率": 0.3, "默认PP": 15},
      {"招式": "暴风雪", "威力": 110, "效果": "使对手冰冻", "效果概率": 0.1, "默认PP": 5},
      {"招式": "绝对零度", "威力": "-", "效果": "一击必杀", "效果概率": 0.05, "默认PP": 5}
    ],
    "龙": [
      {"招式": "龙息", "威力": 60, "效果": "使对手麻痹", "效果概率": 0.2, "默认PP": 20},
      {"招式": "龙之怒", "威力": "-", "效果": "固定造成40点伤害", "效果概率": 1, "默认PP": 10},
      {"招式": "龙爪", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
      {"招式": "逆鳞", "威力": 120, "效果": "连续攻击后混乱", "效果概率": 1, "默认PP": 10}
    ],
    "妖精": [
      {"招式": "妖精之风", "威力": 40, "效果": "无特殊效果", "效果概率": 0, "默认PP": 30},
      {"招式": "月亮之力", "威力": 95, "效果": "降低对手攻击", "效果概率": 0.3, "默认PP": 10},
      {"招式": "魔法闪耀", "威力": 80, "效果": "无特殊效果", "效果概率": 0, "默认PP": 15},
      {"招式": "薄雾场地", "威力": "-", "效果": "降低异常状态概率", "效果概率": 1, "默认PP": 10}
    ],
    "恶": [
      {"招式": "咬住", "威力": 60, "效果": "使对手畏缩", "效果概率": 0.2, "默认PP": 25},
      {"招式": "恶之波动", "威力": 80, "效果": "使对手畏缩", "效果概率": 0.3, "默认PP": 15},
      {"招式": "欺诈", "威力": 95, "效果": "无特殊效果", "效果概率": 0, "默认PP": 10},
      {"招式": "恶之咆哮", "威力": 80, "效果": "降低对手攻击", "效果概率": 0.2, "默认PP": 10}
    ]
}
prop = {
    "伤药": {"HP": 20},
    "好伤药": {"HP": 50},
    "全复药": {"HP": 100},
    "狗剩": {"HP": 1},
    "攻击提升": {"攻击": 10},
    "防御提升": {"防御": 10},
    "速度提升": {"速度": 10},
    "精灵球": {"概率": 1},
    "超级球": {"概率": 1.5},
    "高级球": {"概率": 2},
    "大师球": {"概率": 1000},
    "PP小补剂": {"PP": 10},# 恢复单个技能的PP
    "PP大补剂": {"PP": 20}   # 恢复单个技能的PP
}
evolution_map = {
    "妙蛙种子": {"进化等级": 16, "进化形态": "妙蛙草"},
    "妙蛙草": {"进化等级": 32, "进化形态": "妙蛙花"},
    "小火龙": {"进化等级": 16, "进化形态": "火恐龙"},
    "火恐龙": {"进化等级": 36, "进化形态": "喷火龙"},
    "杰尼龟": {"进化等级": 16, "进化形态": "卡咪龟"},
    "卡咪龟": {"进化等级": 36, "进化形态": "水箭龟"},
    "绿毛虫": {"进化等级": 7, "进化形态": "铁甲蛹"},
    "铁甲蛹": {"进化等级": 10, "进化形态": "巴大蝶"},
    "独角虫": {"进化等级": 7, "进化形态": "铁壳昆"},
    "铁壳昆": {"进化等级": 10, "进化形态": "大针蜂"},
    "波波": {"进化等级": 18, "进化形态": "比比鸟"},
    "比比鸟": {"进化等级": 36, "进化形态": "比雕"},
    "小拉达": {"进化等级": 20, "进化形态": "拉达"},
    "烈雀": {"进化等级": 20, "进化形态": "大嘴雀"},
    "阿柏蛇": {"进化等级": 22, "进化形态": "阿柏怪"},
    "皮卡丘": {"进化等级": 30, "进化形态": "雷丘"},
    "穿山鼠": {"进化等级": 22, "进化形态": "穿山王"},
    "尼多兰": {"进化等级": 16, "进化形态": "尼多娜"},
    "尼多娜": {"进化等级": 36, "进化形态": "尼多后"},
    "尼多朗": {"进化等级": 16, "进化形态": "尼多力诺"},
    "尼多力诺": {"进化等级": 36, "进化形态": "尼多王"},
    "六尾": {"进化等级": 30, "进化形态": "九尾"},
    "走路草": {"进化等级": 21, "进化形态": "臭臭花"},
    "臭臭花": {"进化等级": 36, "进化形态": "霸王花"},
    "喇叭芽": {"进化等级": 21, "进化形态": "口呆花"},
    "口呆花": {"进化等级": 36, "进化形态": "大食花"},
    "凯西": {"进化等级": 16, "进化形态": "勇吉拉"},
    "勇吉拉": {"进化等级": 36, "进化形态": "胡地"},
    "腕力": {"进化等级": 28, "进化形态": "豪力"},
    "豪力": {"进化等级": 40, "进化形态": "怪力"},
    "小磁怪": {"进化等级": 30, "进化形态": "三合一磁怪"},
    "大舌贝": {"进化等级": 30, "进化形态": "铁甲贝"},
    "鬼斯": {"进化等级": 25, "进化形态": "鬼斯通"},
    "鬼斯通": {"进化等级": 40, "进化形态": "耿鬼"},
    "小火马": {"进化等级": 40, "进化形态": "烈焰马"},
    "蚊香蝌蚪": {"进化等级": 25, "进化形态": "蚊香蛙"},
    "蚊香蛙": {"进化等级": 40, "进化形态": "快泳蛙"},
    "迷你龙": {"进化等级": 30, "进化形态": "哈克龙"},
    "哈克龙": {"进化等级": 55, "进化形态": "快龙"}
}

def fight():
    global flag
    print("选择技能:")
    for i, skill in enumerate(player["技能"]):
      print(f"{i + 1}. {skill['招式']} (威力: {skill['威力']}, PP: {skill['PP']})")
    try:
      move = int(input("选择技能编号:")) - 1
      if move < 0 or move >= len(player["技能"]):
            print("无效的选择!")
            return
      skill = player["技能"]
      if skill["PP"] <= 0:
            print(f"{skill['招式']} 的 PP 已用完,无法使用!")
            return
      skill["PP"] -= 1# 减少技能的 PP
      print(f"{name}使用了{skill['招式']}!")

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

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

      # 处理特殊效果
      if random.random() < skill["效果概率"]:
            if skill["效果"] == "使对手中毒":
                enemy["状态"] = "中毒"
                print(f"{ene}中毒了!")
            elif skill["效果"] == "使对手麻痹":
                enemy["状态"] = "麻痹"
                print(f"{ene}麻痹了!")
            elif skill["效果"] == "使对手灼伤":
                enemy["状态"] = "灼伤"
                print(f"{ene}被灼伤了!")
            elif skill["效果"] == "降低对手防御":
                enemy["防御"] = max(1, enemy["防御"] - 10)# 防御降低 10 点
                print(f"{ene}的防御降低了!")
            elif skill["效果"] == "使对手剧毒":
                enemy["状态"] = "剧毒"
                print(f"{ene}中了剧毒!")
            elif skill["效果"] == "使对手混乱":
                enemy["状态"] = "混乱"
                print(f"{ene}陷入混乱了!")
            elif skill["效果"] == "反弹伤害":
                player["HP"] -= attact // 4# 反弹 1/4 的伤害
                print(f"{name}受到了反弹伤害!")

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

            # 检查是否升级
            while player["经验值"] >= player["升级经验"]:
                player["经验值"] -= player["升级经验"]
                player["等级"] += 1
                player["升级经验"] = player["等级"] * 10# 更新升级所需经验值
                print(f"{name}升到了等级 {player['等级']}!")
                updated_player = calculate_stats(dict == player["精灵"])], player["等级"])
                updated_player["技能"] = player["技能"]# 保留原有技能
                player.update(updated_player)# 更新属性

                # 检查是否可以进化
                if player["精灵"] in evolution_map:
                  evolution = evolution_map]
                  if player["等级"] >= evolution["进化等级"]:
                        print(f"{player['精灵']}达到了等级 {evolution['进化等级']},正在进化!")
                        new_form = evolution["进化形态"]
                        updated_player = calculate_stats(dict == new_form)], player["等级"])
                        updated_player["技能"] = player["技能"]# 保留原有技能
                        player.update(updated_player)
                        print(f"恭喜!你的{player['精灵']}进化成了{new_form}!")
            flag = False
            return
      print(f"{ene}剩余HP:", enemy["HP"])
    except (ValueError, IndexError):
      print("请输入有效的数字!")
   
def baggy():
    """使用背包物品"""
    global bag, enebag, flag, pokemon, player, enemy, name, ene
    while True:
      try:
            # 汇总背包中的物品
            bag_summary = {}
            for item in bag:
                if item in bag_summary:
                  bag_summary += 1
                else:
                  bag_summary = 1

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

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

            thing = indexed_bag# 获取选择的物品名称

            # 使用物品逻辑
            if "药" in thing or thing == "狗剩":
                player["HP"] = min(player["HP"] + prop["HP"], player["最大HP"])
                print(f"{name}使用了{thing},HP恢复了{prop['HP']}点!")
            elif "提升" in thing:
                stat = list(prop.keys())
                player += prop
                print(f"{name}使用了{thing},{stat}提升了{prop}点!")
            elif "PP" in thing:
                for i, skill in enumerate(player["技能"]):
                  print(f"{i + 1}. {skill['招式']} (PP: {skill['PP']}/{skill['最大PP']})")
                print("0. 取消")
                skill_choice = int(input("选择要恢复PP的技能编号:")) - 1
                if skill_choice == -1:
                  print("取消恢复PP。")
                  return
                if 0 <= skill_choice < len(player["技能"]):
                  skill = player["技能"]
                  skill["PP"] = min(skill["PP"] + prop["PP"], skill["最大PP"])
                  print(f"{skill['招式']} 的PP恢复了{prop['PP']}点!")
                else:
                  print("无效的选择!请重新输入。")
                  continue
            elif "球" in thing:
                probabilty = prop["概率"] * enemy["速度"] / enemy["HP"] / 3
                print(f"捕获概率为{probabilty:.2f}!")
                if probabilty > 1:
                  probabilty = 1
                elif probabilty < 0:
                  probabilty = 0
                if random.random() < probabilty:
                  print(f"{name}使用了{thing},捕获成功!")
                  pokemon.append(enemy)
                  bag.extend(enebag)
                  print(f"获得了{ene}!")
                  print(f"获得了{enebag}!")
                  flag = False
                  return
                else:
                  print("捕获失败!")

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


def pokey():
    """切换宝可梦"""
    global name, player
    while True:
      try:
            print("你现在拥有的宝可梦:")
            for i, p in enumerate(pokemon):
                print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
            print("0. 取消")
            poke = int(input("选择宝可梦(输入编号):")) - 1
            if poke == -1:
                print("取消切换宝可梦。")
                return
            if 0 <= poke < len(pokemon) and pokemon["状态"] == "正常":
                player = pokemon
                name = player["精灵"]
                print(f"你选择了{player['精灵']}!")
                return
            else:
                print("无效的选择!请重新输入。")
      except ValueError:
            print("请输入有效的数字!")
def calculate_stats(base_stats, level):
    """根据等级动态计算宝可梦的属性"""
    max_hp = base_stats["HP"] + level * 4# 每级增加 4 点 HP
    skills = assign_skills(base_stats["属性"])
    return {
      "HP": max_hp,
      "最大HP": max_hp,# 设置最大 HP
      "攻击": base_stats["攻击"] + level * 2,# 每级增加 2 点攻击
      "防御": base_stats["防御"] + level * 2,# 每级增加 2 点防御
      "速度": base_stats["速度"] + level,# 每级增加 1 点速度
      "等级": level,
      "经验值": 0,# 当前经验值
      "升级经验": level * 10,# 升级所需经验值,随等级增加
      "精灵": base_stats["精灵"],
      "属性": base_stats["属性"],# 保留属性列表
      "状态": "正常",
      "技能": skills# 分配技能
    }
def poke_center():
    """神奇宝贝中心功能"""
    global pokemon
    while True:
      print("\n欢迎来到神奇宝贝中心!")
      print("1. 恢复所有宝可梦的HP和PP")
      print("2. 打开电脑管理系统")
      print("0. 离开神奇宝贝中心")
      choice = int(input("请选择操作:"))
      if choice == 1:
            for p in pokemon:
                base_stats = next(v for k, v in dict.items() if v["精灵"] == p["精灵"])
                p["HP"] = p["最大HP"]# 恢复到最大 HP
                for skill in p["技能"]:
                  skill["PP"] = skill["最大PP"]# 恢复到最大 PP
            print("所有宝可梦的HP和PP已恢复!")
      elif choice == 2:
            manage_pc()# 打开电脑管理系统
      elif choice == 0:
            print("离开神奇宝贝中心。")
            break
      else:
            print("无效的选择,请重新输入!")
def welcome():
    global name, ene, player, enemy, bag, enebag, pokemon

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

    # 随机选择野生宝可梦
    base_enemy = dict# 从 dict 中随机选择一个宝可梦

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

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

    # 修复:确保 min_enemy_level 不大于 max_enemy_level
    if min_enemy_level > max_enemy_level:
      min_enemy_level, max_enemy_level = max_enemy_level, min_enemy_level

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

    # 动态计算野生宝可梦属性
    enemy = calculate_stats(base_enemy, enemy_level)
    if "技能" not in enemy or not enemy["技能"]:# 如果未分配技能或技能为空
      enemy["技能"] = assign_skills(enemy["属性"])# 分配技能
    enebag = for _ in range(5)]
    name = player["精灵"]
    ene = enemy["精灵"]
    print(f"啊!野生的{ene} (等级: {enemy_level}) 跳了出来!")

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


def manage_pokemon():
    """管理精灵队伍"""
    global pokemon
    while len(pokemon) > 6:
      print("你的队伍已满(最多6个精灵)。请选择要移除的精灵:")
      for i, p in enumerate(pokemon):
            print(f"{i + 1}. {p['精灵']} (HP: {p['HP']})")
      try:
            choice = int(input("选择要移除的精灵编号(输入0取消):")) - 1
            if choice == -1:
                print("取消移除操作。")
                break
            if 0 <= choice < len(pokemon):
                removed = pokemon.pop(choice)
                print(f"已移除精灵:{removed['精灵']}")
            else:
                print("无效的选择,请重新输入!")
      except ValueError:
            print("请输入有效的数字!")
def save_game():
    """保存游戏进度到文件"""
    save_data = {
      "player": player,
      "enemy": enemy,
      "bag": bag,
      "pokemon": pokemon,
    }
    with open(SAVE_FILE, "w", encoding="utf-8") as f:
      json.dump(save_data, f, ensure_ascii=False, indent=4)
    print("游戏进度已保存!")

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

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

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

    # 随机分配其他属性的技能
    other_types =
    if other_types:
      random_type = random.choice(other_types)# 随机选择一个其他属性
      for move in random.sample(type_moves, min(1, len(type_moves))):# 分配1个其他属性技能
            move_with_pp = move.copy()
            move_with_pp["PP"] = move["默认PP"]
            move_with_pp["最大PP"] = move["默认PP"]
            skills.append(move_with_pp)

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

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

    return skills# 返回技能列表
def manage_pc():
    """电脑管理系统"""
    global pc_pokemon, pc_bag, pokemon, bag
    while True:
      try:
            print("电脑管理系统:")
            print("1. 查看电脑中的宝可梦")
            print("2. 查看电脑中的物品")
            print("3. 存入宝可梦")
            print("4. 取出宝可梦")
            print("5. 存入物品")
            print("6. 取出物品")
            print("0. 退出电脑管理")
            choice = int(input("请选择操作:"))
            if choice == 0:
                print("退出电脑管理系统。")
                return
            elif choice == 1:
                print("电脑中的宝可梦:")
                if not pc_pokemon:
                  print("电脑中没有宝可梦!")
                else:
                  for i, p in enumerate(pc_pokemon):
                        print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
            elif choice == 2:
                print("电脑中的物品:")
                if not pc_bag:
                  print("电脑中没有物品!")
                else:
                  for i, item in enumerate(pc_bag):
                        print(f"{i + 1}. {item}")
            elif choice == 3:
                if len(pokemon) <= 1:
                  print("队伍中至少需要保留一个宝可梦!")
                  continue
                print("你的队伍:")
                for i, p in enumerate(pokemon):
                  print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
                print("0. 取消")
                idx = int(input("选择要存入电脑的宝可梦编号:")) - 1
                if idx == -1:
                  print("取消存入宝可梦。")
                  continue
                if 0 <= idx < len(pokemon):
                  pc_pokemon.append(pokemon.pop(idx))
                  print("宝可梦已存入电脑!")
                else:
                  print("无效的选择!")
            elif choice == 4:
                if not pc_pokemon:
                  print("电脑中没有宝可梦!")
                  continue
                print("电脑中的宝可梦:")
                for i, p in enumerate(pc_pokemon):
                  print(f"{i + 1}. {p['精灵']} (等级: {p['等级']}, HP: {p['HP']}, 状态: {p['状态']})")
                print("0. 取消")
                idx = int(input("选择要取出的宝可梦编号:")) - 1
                if idx == -1:
                  print("取消取出宝可梦。")
                  continue
                if 0 <= idx < len(pc_pokemon):
                  if len(pokemon) >= 6:
                        print("队伍已满,无法取出宝可梦!")
                  else:
                        pokemon.append(pc_pokemon.pop(idx))
                        print("宝可梦已取出!")
                else:
                  print("无效的选择!")
            elif choice == 5:
                if not bag:
                  print("背包中没有物品!")
                  continue
                print("你的背包:")
                for i, item in enumerate(bag):
                  print(f"{i + 1}. {item}")
                print("0. 取消")
                idx = int(input("选择要存入电脑的物品编号:")) - 1
                if idx == -1:
                  print("取消存入物品。")
                  continue
                if 0 <= idx < len(bag):
                  pc_bag.append(bag.pop(idx))
                  print("物品已存入电脑!")
                else:
                  print("无效的选择!")
            elif choice == 6:
                if not pc_bag:
                  print("电脑中没有物品!")
                  continue
                print("电脑中的物品:")
                for i, item in enumerate(pc_bag):
                  print(f"{i + 1}. {item}")
                print("0. 取消")
                idx = int(input("选择要取出的物品编号:")) - 1
                if idx == -1:
                  print("取消取出物品。")
                  continue
                if 0 <= idx < len(pc_bag):
                  bag.append(pc_bag.pop(idx))
                  print("物品已取出!")
                else:
                  print("无效的选择!")
            else:
                print("无效的选择,请重新输入!")
      except ValueError:
            print("请输入有效的数字!")
def battle():
    global flag, name, ene, player, enemy, bag, enebag, pokemon
    action = int(input(f"{name} 想做什么呢?\n1.战斗\n2.背包\n3.宝可梦\n4.逃跑\n"))
    if action == 1:
      fight()
    if action == 2:
      baggy()
    if action == 3:
      pokey()
    if action == 4:
      print("成功地逃跑了!")
      flag = False
      return
    if flag == True:
      ene_move = enemy["技能"]
      print(f"{ene}使用了{ene_move['招式']}!")

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

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

      player["HP"] -= attact if attact > 0 else 5
      if type_attact < 1:
            print("收效甚微……")
      elif type_attact > 1:
            print("效果拔群!")
      print(f"{name}受到了", attact, "点伤害!") if attact > 0 else print(f"好像没有什么效果……")
      if player["HP"] <= 0:
            print(f"{name}被打败了!")
            player["状态"] = "濒死"# 标记为濒死状态
            print(f"{name}已进入濒死状态,无法继续战斗!")
            # 检查是否还有可用的宝可梦
            available_pokemon = == "正常"]
            if not available_pokemon:
                print("所有宝可梦都已濒死!")
                print("游戏结束!")
                sys.exit()
            print("请选择一个新的宝可梦继续战斗:")
            for i, p in enumerate(pokemon):
                print(f"{i + 1}.{p['精灵']} (等级: {p['等级']}, 状态: {p['状态']})")
            poke = int(input("选择宝可梦:")) - 1
            if poke < 0 or poke >= len(pokemon) or pokemon["状态"] != "正常":
                print("无效的选择!默认使用第一个可用宝可梦。")
                poke = next(i for i, p in enumerate(pokemon) if p["状态"] == "正常")
            player = pokemon
            name = player["精灵"]
            print(f"你选择了{player['精灵']}!")
            time.sleep(1)
            return
      print(f"{name}剩余HP:", player["HP"])
    else:
      # 战斗胜利后掉落道具
      if random.random() < 0.5:# 50% 概率掉落道具
            dropped_item = random.choice(list(prop.keys()))
            bag.append(dropped_item)
            print(f"战斗胜利!你获得了道具:{dropped_item}")
      # 战斗结束后询问是否进入神奇宝贝中心
      if input("是否进入神奇宝贝中心?(y/n): ").lower() == 'y':
            poke_center()
def poke_center():
    """神奇宝贝中心功能"""
    global pokemon
    while True:
      print("\n欢迎来到神奇宝贝中心!")
      print("1. 恢复所有宝可梦的HP和PP")
      print("2. 打开电脑管理系统")
      print("0. 离开神奇宝贝中心")
      choice = int(input("请选择操作:"))
      if choice == 1:
            for p in pokemon:
                base_stats = next(v for k, v in dict.items() if v["精灵"] == p["精灵"])
                p["HP"] = p["最大HP"]# 恢复到最大 HP
                for skill in p["技能"]:
                  skill["PP"] = skill["最大PP"]# 恢复到最大 PP
            print("所有宝可梦的HP和PP已恢复!")
      elif choice == 2:
            manage_pc()# 打开电脑管理系统
      elif choice == 0:
            print("离开神奇宝贝中心。")
            break
      else:
            print("无效的选择,请重新输入!")
def initialize_game():
    """初始化游戏状态"""
    global player, bag, pokemon, trainer_name, pc_pokemon, pc_bag
    trainer_name = input("请输入你的名字:")
    print(f"欢迎来到宝可梦世界,{trainer_name}!")
    print("请选择你的初始宝可梦:")
    starters = [
      {'HP': 45, '精灵': '妙蛙种子', '属性': ['草', '毒'], '攻击': 49, '防御': 49, '速度': 45},
      {'HP': 39, '精灵': '小火龙', '属性': ['火'], '攻击': 52, '防御': 43, '速度': 65},
      {'HP': 44, '精灵': '杰尼龟', '属性': ['水'], '攻击': 48, '防御': 65, '速度': 43}
    ]
    for i, starter in enumerate(starters):
      print(f"{i + 1}. {starter['精灵']} (等级: 5)")
    choice = int(input("选择你的宝可梦(输入编号):")) - 1
    if choice < 0 or choice >= len(starters):
      print("无效选择,默认选择妙蛙种子。")
      choice = 0
    player = calculate_stats(starters, 5)# 初始等级为 5
    player["技能"] = assign_skills(player["属性"])# 分配技能
    bag = for _ in range(5)]
    pokemon =
    pc_pokemon = []# 初始化电脑存储的宝可梦
    pc_bag = []# 初始化电脑存储的物品
SAVE_FILE = "game_save.json"
def main():
    global flag
    load_game()# 加载游戏进度
    flag = True
    welcome()
    while True:# 使用无限循环,直到玩家选择退出
      while flag:
            battle()
            manage_pokemon()# 每次战斗后管理精灵队伍
      if input("是否保存游戏进度?(y/n): ").lower() == 'y':
            save_game()# 保存游戏进度
      if input("是否继续游戏?(y/n): ").lower() != 'y':
            print("游戏结束!")
            break
      flag = True# 重置 flag,继续下一场战斗
      welcome()# 开始新的战斗


main()

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

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

FishC 发表于 2025-5-9 20:14:38

用户提供的代码存在多处语法错误和逻辑缺陷,以下是主要问题的分析及解决方案:

主要问题清单:

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


基础修复方案:

[*]补充精灵属性:
1: {'精灵': '妙蛙种子', '属性': '草', 'HP': 45...}
4: {'精灵': '小火龙', '属性': '火', 'HP': 39...}
7: {'精灵': '杰尼龟', '属性': '水', 'HP': 44...}
(需补全所有151个精灵的属性)

[*]添加技能数据:
type_moves = {
    "普通": ["冲撞", "抓"],
    "火": ["火花", "火焰喷射"],
    "水": ["水枪", "水炮"]
    # 需补全所有属性对应技能
}

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


推荐优化方向:

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

琅琊王朝 发表于 2025-5-9 20:57:17

恐怖如斯

krf 发表于 2025-5-9 21:41:30

111
krf
驾到!!

player-none 发表于 2025-5-9 23:40:37

好贴不要停!

复兴fishc!!!

zyx2012 发表于 2025-5-10 07:31:02

哎呀过奖了,实际上仔细看都是基础的一些代码堆扯起来的,没啥技术含量见笑了

不二如是 发表于 2025-5-10 10:54:38

{:10_256:}{:10_256:}上个效果图更好了

某一个“天” 发表于 2025-5-10 21:55:23

手写的???

pyzyd 发表于 2025-5-10 22:16:55

这么多行{:5_106:}

Tommy49 发表于 2025-5-11 01:41:10

{:10_254:}

阳光开朗大难孩 发表于 2025-5-11 17:09:12



{:10_275:}

yu55800 发表于 2025-5-12 14:59:01

{:5_109:}

zxlhbqhxy 发表于 2025-5-12 15:34:04

这是什么游戏?是剧本?

你的黄逗逗 发表于 2025-5-12 17:57:43

头皮发麻

y981023WWW 发表于 2025-5-13 09:00:52

{:10_277:}

jerry_126 发表于 2025-5-22 07:09:40

{:5_99:}

py木木 发表于 2025-5-22 07:23:45

我靠

咖啡润色 发表于 2025-5-22 09:03:02

新人路过

白喧黯寂 发表于 2025-5-22 09:13:48

被深深的吓到了。
{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}

Mr.江南 发表于 2025-5-22 16:05:32

NB
页: [1] 2
查看完整版本: 宝可梦小游戏 V1.1