位置: IT常识 - 正文

【实战与杂谈】如何复活一个开源网站-游戏王卡片生成器(实战到底究竟是什么意思啊)

编辑:rootadmin
【实战与杂谈】如何复活一个开源网站-游戏王卡片生成器 1. 杂谈 

推荐整理分享【实战与杂谈】如何复活一个开源网站-游戏王卡片生成器(实战到底究竟是什么意思啊),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:实战好吗,实战是什么,实战到底究竟是什么意思啊,实战到底究竟是什么意思啊,实战是什么,实战是什么,实战是什么,实战的解释,内容如对您有帮助,希望把文章链接给更多的朋友!

作为一名十多年游戏王玩家,学生时代玩的是PSP和PS2上的游戏,到毕业后使用YGOPRO同步新卡片进行联网对战,再到现在约到线下进行实体卡片游戏。有些卡片价格太贵,因此我们对于这些卡在未购买之前都会自己打印出来暂时游玩。这里不得不提国内的制卡小工具游戏王卡片生成器。

 比较遗憾的是该网站即将下线。

值得庆幸的是作者对网站的更新一直以https://github.com/kooriookami/tools-vue的形式进行保存,本篇博文也是记录博主如何一步一步实现在本地运行起开源项目的经过。 

2. 分析

一般拿到一个开源项目我们可以通过ReadMe了解到他很多相关内容,通过ReadMe可以知道该项目是一个vue开发的前后端分离项目。跟着指引步骤运行项目,非常顺利运行了项目,在本地运行会发现以下问题

3. 解决

这里要介绍杂谈中提到的ygopro,他是一款开源的由国人Fluorohydride(圆神)自制的游戏王决斗系统。在国内我们一般使用萌卡所维护的版本,因此后续的讨论我们都会以萌卡的github项目进行分析。

3.1 获取数据3.1.1 卡片明细数据

在查看萌卡的项目中的我重点关注标题为YGO的仓库,其中ygopro-database这个仓库,引起我的注意。通过查看他的ReadMe我们可以知道这个项目就是用来管理我们的卡片信息内容。

Some databases of ygopro.

They are for now just for test.

切换到dump分支可以看到通过仓库提供了databases对应数据SQL脚本,这里省下了我很多时间去寻找如何提取数据库文件的卡片数据明细。

这里说一下我在github学习开源项目的另外一个方式就是查看issue,一般在项目上遇到问题都可以在issue进行提问,我在issue中发现这样的提问请问下数据库cdb文件是从哪里获取的,在里面我知道ygo的数据库文件可以通过DataEditorX来提取数据的明细。

3.1.2  卡片插画数据

通过查看源码还有网站公告中我们可以知道ygoprodeck这个网站,他提供了图片API可以进行查看下载。

3.2 功能复现3.2.1 自建API【实战与杂谈】如何复活一个开源网站-游戏王卡片生成器(实战到底究竟是什么意思啊)

通过chrome的开发工具,我们可以知道对应操作下会触发什么样的API请求,那剩下就是分析请求的返回内容与我们手头上的内容进行关联。得益于2.1.1获取到的SQL脚本,我们知道了我们数据收属性结构。

卡片明细表

记录了卡片各内基础信息

CREATE TABLE datas( id integer primary key, ot integer, alias integer, setcode integer, type integer, atk integer, def integer, level integer, race integer, attribute integer, category integer);

卡片描述表

记录卡片的效果信息

CREATE TABLE texts( id integer primary key, name text, desc text, str1 text, str2 text, str3 text, str4 text, str5 text, str6 text, str7 text, str8 text, str9 text, str10 text, str11 text, str12 text, str13 text, str14 text, str15 text, str16 text);

有了图片还有数据信息,只要我们构建API去读取内容即可,详细可以查看我的api项目。

3.2.2 项目本身修改修改目标API

在main.js我们可以配置数据获取api根目录

// 接口请求地址配置if (process.env.NODE_ENV === 'production') { // 上线环境 app.config.globalProperties.baseURL = 'http://127.0.0.1:8080/api';//https://tools.kooriookami.top/api} else { // 本地环境 app.config.globalProperties.baseURL = 'http://127.0.0.1:8080/api';}适配简体中文YGOPRO数据

使用自己提供的API的时候会发现当我们查看的是灵摆类的卡片的时候不能正常展示内容,我尝试分析加载数据。我们能发现在网站中加载的灵摆数据json中他们的卡片描述有【Pendulum Effect】、【Monster Effect】

{ "data": { "name": "终焉龙 混沌帝", "atk": 3000, "def": 2500, "attribute": 32, "desc": "←1 【Pendulum Effect】 1→\r\n这个卡名的灵摆效果1回合只能使用1次。\r\n①:支付1000基本分,以除外的1只自己的龙族怪兽为对象才能发动。这张卡破坏,那只怪兽加入手卡。\r\n【Monster Effect】\r\n这张卡不能通常召唤。「终焉龙 混沌帝」1回合1次在把自己墓地的光属性和暗属性的怪兽各1只除外的场合才能从手卡·额外卡组特殊召唤。\r\n①:1回合1次,把基本分支付一半才能发动。额外怪兽区域以外的自己场上的卡全部送去墓地,选最多有送去墓地的数量的对方场上的卡送去墓地。那之后,给与对方送去对方墓地的数量×300伤害。\r\n②:特殊召唤的表侧表示的这张卡从场上离开的场合回到卡组最下面。", "id": 4538826, "level": 16842760, "race": 8192, "type": 50331681 }, "message": "success", "status": 200}

再查看源码,源码也是使用【Pendulum Effect】、【Monster Effect】来数据的提取,因此要根据简体中文YGOPRO数据进行定制化修改。

export function parsePendulumScale(data) { if (parseType(data) === 'pendulum') { let list = data.desc.split('【Pendulum Effect】'); return parseInt(list[0]?.replace(/[^\d]/g, '')); } else { return 0; }}export function parsePendulumDescription(data, lang) { if (parseType(data) === 'pendulum') { let description = characterToHalf(data.desc).replace(/'''/g, '') .replace(/\r/g, '\n').replace(/(\n)\1*/g, '\n'); const list = description.split(/【Pendulum Effect】|【Monster Effect】|【Flavor Text】|【怪獸敘述】|【怪獸效果】|【怪獸描述】/).filter(item => item && item !== '\n'); if (lang === 'tc') { description = list[2]?.replace(/\d+→|\n/g, '') || ''; } else { description = list[1]?.replace(/\d+→|\n/g, '') || ''; } if (['jp', 'sc'].includes(lang)) { // 效果数字全角,卡名数字半角 description = numberToFull(description).replace(/(「.*?」)|(“.*?”)/g, s => numberToHalf(s)); } return description.trim(); } else { return ''; }}

 根据简体中文YGOPRO数据添加分割简体中文内容的字符

{ "data": { "name": "终焉龙 混沌帝", "atk": 3000, "def": 2500, "attribute": 32, "desc": "←1 【灵摆】 1→\r\n这个卡名的灵摆效果1回合只能使用1次。\r\n①:支付1000基本分,以除外的1只自己的龙族怪兽为对象才能发动。这张卡破坏,那只怪兽加入手卡。\r\n【怪兽效果】\r\n这张卡不能通常召唤。「终焉龙 混沌帝」1回合1次在把自己墓地的光属性和暗属性的怪兽各1只除外的场合才能从手卡·额外卡组特殊召唤。\r\n①:1回合1次,把基本分支付一半才能发动。额外怪兽区域以外的自己场上的卡全部送去墓地,选最多有送去墓地的数量的对方场上的卡送去墓地。那之后,给与对方送去对方墓地的数量×300伤害。\r\n②:特殊召唤的表侧表示的这张卡从场上离开的场合回到卡组最下面。", "id": 4538826, "level": 16842760, "race": 8192, "type": 50331681 }, "message": "success", "status": 200}export function parsePendulumScale(data) { if (parseType(data) === 'pendulum') { let list = data.desc.split('【灵摆】');//let list = data.desc.split('【Pendulum Effect】'); return parseInt(list[0]?.replace(/[^\d]/g, '')); } else { return 0; }}export function parsePendulumDescription(data, lang) { if (parseType(data) === 'pendulum') { let description = characterToHalf(data.desc).replace(/'''/g, '') .replace(/\r/g, '\n').replace(/(\n)\1*/g, '\n'); const list = description.split(/【Pendulum Effect】|【Monster Effect】|【灵摆】|【怪兽效果】|【Flavor Text】|【怪獸敘述】|【怪獸效果】|【怪獸描述】/).filter(item => item && item !== '\n'); if (lang === 'tc') { description = list[2]?.replace(/\d+→|\n/g, '') || ''; } else { description = list[1]?.replace(/\d+→|\n/g, '') || ''; } if (['jp', 'sc'].includes(lang)) { // 效果数字全角,卡名数字半角 description = numberToFull(description).replace(/(「.*?」)|(“.*?”)/g, s => numberToHalf(s)); } return description.trim(); } else { return ''; }}能直加载卡片原画

因为运行成本的原因ygoprodeck提供卡片原画API无法进行外链了,我们通过通告知道还是可以通过ygoprodeck提供的api下载图片,通过自选图片上传来加载卡片原画

 通过添加debugger我们定位到\src\render\views\yugioh.js代码中这段代码负责加载图片

export function parseImage(data) { debugger; return '/';}

只要我们拥有自己的图片库,通过自己构建api即可,修改如下,关于如何批量去下载图片请自行在网络上进行查询。

export function parseImage(data) { return `http://127.0.0.1:8080/images/${data.id}`;}4. 效果

5. 感想

这次网站复活是一个很典型的开源项目应用样例,跳过了开源项目的选型(关于开源项目的选型可以阅读我之前的这篇博客记开源系统落地-我是如何在工作中应用ShardingSphere-JDBC),从使用开源项目,遇到问题如何解决,到最终符合自己的使用需求。

参考:ygocore版本&服务器介绍+操作方法+实用链接

https://github.com/mycard/ygopro-database

修改后代码:GitHub - tale2009/tools-vue

对应后端API:GitHub - tale2009/KenhoYUGIOHAPI

本文链接地址:https://www.jiuchutong.com/zhishi/297648.html 转载请保留说明!

上一篇:【vue】 vue-router安装和配置方法(vue $route)

下一篇:YOLOv7改进之二十二:涨点神器——引入递归门控卷积(gnConv)(yolox改进)

  • 让你的微博粉丝快速倍增的八大技巧(微博粉丝怎么让别人看不见)

    让你的微博粉丝快速倍增的八大技巧(微博粉丝怎么让别人看不见)

  • vue保留两位小数(vue保留两位小数的函数)

    vue保留两位小数(vue保留两位小数的函数)

  • airpods左耳机不充电(airpods左耳机不显示电量也没声音)

    airpods左耳机不充电(airpods左耳机不显示电量也没声音)

  • 戴尔开机蓝屏0x0000007b(戴尔开机蓝屏0x0怎么解决)

    戴尔开机蓝屏0x0000007b(戴尔开机蓝屏0x0怎么解决)

  • 抖音如何增加粉丝(抖音如何增加粉丝量和关注度)

    抖音如何增加粉丝(抖音如何增加粉丝量和关注度)

  • 手机进水无信号的解决方法(手机进水无信号怎么修)

    手机进水无信号的解决方法(手机进水无信号怎么修)

  • 华硕z390哪个m2接口速度快(华硕z390a哪个m2接口速度快)

    华硕z390哪个m2接口速度快(华硕z390a哪个m2接口速度快)

  • opporeno4是曲面屏吗(opporeno4是曲面屏还是全面屏)

    opporeno4是曲面屏吗(opporeno4是曲面屏还是全面屏)

  • 不连续选中按什么键(不连续选中多个对象按什么键)

    不连续选中按什么键(不连续选中多个对象按什么键)

  • 低数据模式会降低网速吗(低数据模式会省电吗)

    低数据模式会降低网速吗(低数据模式会省电吗)

  • 路径查找器快捷键(路径查找器快捷键用了没反应)

    路径查找器快捷键(路径查找器快捷键用了没反应)

  • 开机时显卡风扇狂转几秒(开机时显卡风扇不转正常吗)

    开机时显卡风扇狂转几秒(开机时显卡风扇不转正常吗)

  • 华为p30智能遥控不见了(华为p30智能遥控删了怎么办)

    华为p30智能遥控不见了(华为p30智能遥控删了怎么办)

  • 小米5x用OTG显示不出来

    小米5x用OTG显示不出来

  • 有锁的苹果手机能用吗(有锁的苹果手机还原了会怎么样)

    有锁的苹果手机能用吗(有锁的苹果手机还原了会怎么样)

  • 微博草稿箱数据能恢复吗(微博草稿箱的内容如何查看)

    微博草稿箱数据能恢复吗(微博草稿箱的内容如何查看)

  • vivox27视频美颜怎么没了(vivox27视频美颜怎么关闭)

    vivox27视频美颜怎么没了(vivox27视频美颜怎么关闭)

  • 同程vip抢票什么意思(同程抢票服务费多少钱)

    同程vip抢票什么意思(同程抢票服务费多少钱)

  • iphone11和xr贴膜通用吗(苹果xr和苹果11手机膜)

    iphone11和xr贴膜通用吗(苹果xr和苹果11手机膜)

  • 华为gt2可单独打电话吗(华为gt2可以独立打电话吗)

    华为gt2可单独打电话吗(华为gt2可以独立打电话吗)

  • 七天网络怎么注册账号(七天网络怎样登录注册)

    七天网络怎么注册账号(七天网络怎样登录注册)

  • 苹果11怎么设置震动(苹果11怎么设置动态壁纸)

    苹果11怎么设置震动(苹果11怎么设置动态壁纸)

  • 腾讯视频解除账号绑定(腾讯视频解除vip)

    腾讯视频解除账号绑定(腾讯视频解除vip)

  • 红米note7黑屏唤不醒(红米note7不亮屏)

    红米note7黑屏唤不醒(红米note7不亮屏)

  • p20plus和p20pro区别(华为p20plus和p20pro一样么)

    p20plus和p20pro区别(华为p20plus和p20pro一样么)

  • 红米k20pro前置摄像头声音怎么关(红米k20pro前置摄像头打不开)

    红米k20pro前置摄像头声音怎么关(红米k20pro前置摄像头打不开)

  • 电脑蓝屏0x000007f(电脑蓝屏0X0000007E是怎么回事)

    电脑蓝屏0x000007f(电脑蓝屏0X0000007E是怎么回事)

  • 安卓手机怎么转移通讯录(安卓手机怎么转移到苹果平板上)

    安卓手机怎么转移通讯录(安卓手机怎么转移到苹果平板上)

  • 老板自己出钱买股票
  • 生产领用周转材料
  • 银行会计核算方法的特点
  • 采购的固定资产验收无误后直接安装使用
  • 报关金额多报了3000美金
  • 养老院营利性与非营利如何认定
  • 小规模季度不超过30万元免税会计分录
  • 资产负债表应交税费期末余额是什么意思
  • 股权评估与资产评估的关系
  • 受托开发软件产品免征增值税
  • 机器设备折旧计提规定
  • 职工食堂开支会计处理
  • 建筑业出售废旧电脑取的收入如何申报
  • 核定征收是每个月都要交税吗
  • 库存红字冲销
  • 劳动保护费在企业怎么交
  • 重庆房产税政策历史
  • 关于设备安装调试的说法
  • 增值税进项税额转出的账务处理
  • 案例分析关于拟建科学馆的请示报告
  • 存货年末余额怎么算出来的
  • 取得交易性金融资产发生的交易费用
  • 企业从境外收回所得税
  • 餐饮费开专票
  • 应收票据质押怎么看
  • 华为手机屏幕有个圆点怎么取消
  • 期末留抵税额退税额
  • 甲方代付农民工工资合同
  • 以库存现金支付车间发生的水电费200元
  • 建筑业产值填哪个数据
  • 退税有啥影响
  • 进程cmd.exe
  • php数组函数题目
  • php图片加文字水印
  • 办公室装修入账
  • 工程竣工结算资料存档几年
  • 小规模纳税人销售自己使用过固定资产
  • PHP:JDToGregorian()的用法_日历函数
  • php语言版本
  • 坏账损失税务处理
  • 使用电子计算机生成的会计凭证
  • 浅谈php中的错误处理方法
  • YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数
  • 贸易公司结转销售成本凭证怎么做
  • 公司买办公用品是谁的工作
  • 印花税土地使用权计税依据
  • 未达到起征点的增值税怎么填写
  • SQL Report Builder 报表里面的常见问题分析
  • 环境检测收费依据2017
  • 机票改签费可以报销吗
  • 财政部监制的收据没有税号可以入账吗
  • sqlserver数据库性能情况
  • 外资企业和内资企业并举
  • 总公司账务处理
  • 不良品扣款会计分录
  • 营改增后,建筑行业与供应商签合同才怎样签没风险?
  • 网银转账被退回来了
  • 电信增值服务费会计科目
  • 企业对疫情
  • 微众银行贷款到私账吗
  • 公司收到赔偿款要交增值税吗
  • 银行承兑汇票如何背书转让
  • 会计计算工资的步骤流程
  • 如何控制生产成本和利润
  • mysql的基本介绍
  • win7系统设置wifi热点
  • win10重置此电脑保留我的文件
  • apache2.4.46配置
  • windows7的电脑
  • win10 win8.1双系统
  • win7系统无线鼠标不能连接
  • win8突然没有声音
  • django sessionid
  • python金融大数据 全流程详解
  • cocos2dx官方教程
  • 详解16型人格
  • css 分页
  • idea 分析源码
  • 怎么运用知识点
  • javascript教程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设