宝可梦系列自问世以来,凭借其独特的精灵设计和深奥的游戏玩法,吸引了无数粉丝。然而,随着宝可梦系列的不断更新和改版,精灵的数据和技能也在不断变化。为了帮助宝可梦粉丝更好地了解和查询他们喜爱的精灵,我开发了“宝可梦图鉴App”——一款专为宝可梦粉丝打造的手机版宝可梦改版图鉴应用。
一、应用简介
“宝可梦图鉴App”是一款专为宝可梦粉丝设计的手机应用,旨在为用户提供一个便捷、功能丰富的宝可梦查询工具。用户可以通过该应用浏览所有宝可梦的详细信息,随时随地查看它们的属性、技能、进化线、蛋群信息,甚至精灵的捕获位置。与原版数据相比,改版后的精灵数据可能会有很大不同,因此,这款应用旨在为玩家提供最新、最全面的改版精灵信息。
二、应用功能亮点
1. 精灵详情页
- 精灵属性:查看精灵的属性、种族值、特性等详细信息。
- 进化线:了解精灵的进化方式和进化条件。
- 蛋群信息:查询精灵所属的蛋群和孵化条件。
2. 精灵技能查询
- 技能列表:浏览精灵的所有可学习技能。
- 技能详情:查看技能的效果、功耗、学习等级等信息。
- 技能学习精灵:在技能详情页查询哪些精灵可以学习该技能。
3. 精灵查询功能
- 多维度筛选:支持按属性,精灵名称查询精灵。
- 懒加载:精灵列表采用懒加载技术,提高应用的响应速度和性能。
- 高质量图片:支持查看精灵的高质量立图和场上模型。
4. 地区分布查看
- 捕获位置:查看精灵在不同地区的捕获位置。
- 地图视图:通过地图直观了解精灵的分布情况。
三、项目获取
四、项目改造方案
1,图鉴标题
对应这个标签
2,数据导入
提示:这个数据必须按照我给你的格式进行填入,否则很大概率会出现问题
但是你别慌,我已经提前写好脚本了
(1),精灵信息
{
"编号": "001",
"名称": "妙蛙种子",
"进化阶段": 1,
"种族值": [
45,
49,
49,
65,
65,
45
],
"总种族值": 318,
"特性": [
"茂盛",
"太阳驱动",
"太阳驱动"
],
"属性": [
"草",
"毒"
],
"可能携带的物品": [
{
"物品": "妙蛙花进化石",
"概率": 50
}
],
"经验值累积速度": "较慢",
"蛋群": [
"怪兽",
"植物"
],
"孵蛋周期": 5
}
当时作者给我提供的数据格式如下,如果你的也是这样,可以直接使用我写的脚本来获取json数据,然后直接复制粘贴即可。
import re
import json
def parse_pokemon_data(file_path):
pokemons = []
with open(file_path, 'r', encoding='utf-16') as file:
lines = file.readlines()
pokemon = {}
start = 1
for line in lines:
if line.startswith('======'):
if start == 2:
start = 1
continue
if pokemon:
pokemons.append(pokemon)
pokemon = {}
start += 1
elif ' - ' in line and '(进化阶段:' in line:
parts = line.split(' - ')
name = parts[1].strip()
number = parts[2].split(' ')[0].strip()
stage = int(re.search(r'\(进化阶段: (\d+)\)', line).group(1))
pokemon['编号'] = number
pokemon['名称'] = name
pokemon['进化阶段'] = stage
elif '种族值:' in line:
stats = [int(s) for s in re.findall(r'\d+', line.split('种族值:')[1])]
total_stats = sum(stats)
pokemon['种族值'] = stats
pokemon['总种族值'] = total_stats
elif '特性:' in line:
abilities = [s.strip() for s in line.split('特性: ')[1].split('|')]
abilities = [ability.split(' ')[0] for ability in abilities]
pokemon['特性'] = abilities
elif '属性:' in line:
types = [t.strip() for t in line.split('属性: ')[1].split('/')]
pokemon['属性'] = types
elif '物品' in line:
if '可能携带的物品' not in pokemon:
pokemon['可能携带的物品'] = []
match = re.search(r'物品 \d+ \((\d+)%\): (.+)', line)
if match:
item_prob = int(match.group(1))
item_name = match.group(2).strip()
if item_prob > 0:
pokemon['可能携带的物品'].append({"物品": item_name, "概率": item_prob})
elif '经验值累积速度:' in line:
pokemon['经验值累积速度'] = line.split('经验值累积速度: ')[1].strip()
elif '蛋群:' in line:
egg_groups = [g.strip() for g in line.split('蛋群: ')[1].split('/')]
pokemon['蛋群'] = egg_groups
elif '孵蛋周期:' in line:
pokemon['孵蛋周期'] = int(line.split('孵蛋周期: ')[1].strip())
if pokemon:
pokemons.append(pokemon)
return pokemons
file_path = '宝可梦个体数据.txt'
pokemons = parse_pokemon_data(file_path)
# 输出JSON格式的数据
print(json.dumps(pokemons, ensure_ascii=False, indent=4))
(2),精灵技能表
群主提供的数据格式如下
脚本如下
def parse_pokemon_data(file_path):
pokemons = []
with open(file_path, 'r', encoding='utf-16') as file:
pokemon = {}
SkillList = []
for line in file:
# 假设每行以逗号分隔
data = line.strip().split(' ')
if data[0] == '':
pokemon['SkillList'] = SkillList.copy()
pokemons.append(pokemon)
pokemon = {}
SkillList = []
if data[0] == '======': continue
if len(data) == 2:
pokemon.update({'序号': data[0], 'name': data[1]})
elif len(data) == 3:
SkillList.append({'level': data[0], 'skill_name': data[2]})
return pokemons
if __name__ == "__main__":
# 假设文件名为 "4.01等级上升技能表.txt"
file_path = '4.01等级上升技能表.txt'
pokemons = parse_pokemon_data(file_path)
print(pokemons)
(3),精灵特性
由于特性改动很小,所以我就懒得写脚本了,直接用的就是原版的,然后手动改了一些
(4),技能表
由于技能表改变也不是很大,所以如上,我当时也是手敲的
(5),精灵获取方式
这个群主提供的是 .xls 表格 ,所以我也是按照这个表格写的脚本,大家注意一下
脚本
import pandas as pd
# 加载 .xls 文件
file_path = '1.xls'
df = pd.read_excel(file_path)
# 选择需要的列
selected_columns = df[['精组译名', '捕捉方式', '进化等级', '特殊说明']]
# 重命名列
selected_columns = selected_columns.rename(columns={'精组译名': 'pokemonName'})
# 将 DataFrame 转换为 JSON
json_data = selected_columns.to_json(orient='records', force_ascii=False)
# 输出 JSON 数据
print(json_data)
(6),精灵地区分布
当时群主提供的数据格式如下
脚本
import re
def parse_pokemon_data(file_path):
# 用于存储最终结果
grouped_results = {}
with open(file_path, 'r', encoding='utf-8') as file:
current_map = None # 当前地图名称
# 匹配每行环境和数据的正则表达式
line_pattern = re.compile(
r"(?P<environment>[\w\s]+): (?P<data>.+)"
)
# 匹配单个 Pokémon 数据的正则表达式
pokemon_pattern = re.compile(
r"(?P<rate>\d+%|\?%) - (?P<name>[\w-]+) \(Level (?P<level>\d+), Forme: (?P<forme>\d+)\)"
)
for line in file:
line = line.strip()
# 检查是否是地图标题
if line.startswith("Map"):
current_map = line.split("-", 1)[-1].strip()
if current_map not in grouped_results:
grouped_results[current_map] = {}
continue
# 查找匹配的环境和数据部分
line_match = line_pattern.match(line)
if line_match:
environment = line_match.group("environment").strip()
data = line_match.group("data")
if environment not in grouped_results[current_map]:
grouped_results[current_map][environment] = []
# 在环境数据中查找所有 Pokémon 数据
for pokemon_match in pokemon_pattern.finditer(data):
rate = pokemon_match.group("rate")
name = pokemon_match.group("name")
if name == "---":
continue
level = int(pokemon_match.group("level"))
forme = int(pokemon_match.group("forme"))
# 向结果中追加数据
grouped_results[current_map][environment].append({
"rate": rate,
"name": name,
"level": level,
"forme": forme,
})
# 删除没有数据的城镇
grouped_results = {key: value for key, value in grouped_results.items() if value}
return grouped_results
if __name__ == "__main__":
file_path = '野外遭遇.txt'
pokemons = parse_pokemon_data(file_path)
import json
print(json.dumps(pokemons, ensure_ascii=False, indent=2))
下面是地区图片的文件夹,把你想替换的图鉴添加到里面即可
最重要的一点,当时我蠢了,用的中文命名,想着方便很多,但是之后打包回失败报错,后面我又一点一点的改成中文,希望有大佬可以优化这一点吧。
如果要使用,需要自己写键值对
五,项目打包
1,打包
这里要使用一个 HBuilder X 的软件,来把他打包为 APP,先在项目中使用下面这个命令,来打包文件。
npm run build
打包后会生成这个文件夹
2,打包App
下载HbuilderX之后新建项目
选择好项目本地存放的地址,编写项目名,之后点击创建
打开刚刚创建的那个项目,点击打开manifest.json,就是下图这样子
填写你的h5项目地址 ,这里和我写的一样即可
基本配置(看图),太简单太多自己研究
把刚刚打包的数据全部放到项目中,如下
打包
等待一会,即可打包 ,然后手机安装即可