位置: 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改进)

  • 苹果13mini怎么插卡(iphone13mini数据线怎么用)

    苹果13mini怎么插卡(iphone13mini数据线怎么用)

  • 红米k30pro信号不好怎么解决(红米k30 5g版信号不好)

    红米k30pro信号不好怎么解决(红米k30 5g版信号不好)

  • 华为透明屏幕怎么设置(华为透明屏幕怎么调)

    华为透明屏幕怎么设置(华为透明屏幕怎么调)

  • 手机淘宝店铺在哪里看(手机淘宝店铺在哪里登录啊)

    手机淘宝店铺在哪里看(手机淘宝店铺在哪里登录啊)

  • 在cd光盘上标记cd-rw表示(在CD光盘上标记有CD杠rw字样此标记表明这光盘)

    在cd光盘上标记cd-rw表示(在CD光盘上标记有CD杠rw字样此标记表明这光盘)

  • word文档列宽怎么调(word文档列宽怎么设置厘米)

    word文档列宽怎么调(word文档列宽怎么设置厘米)

  • 视频怎么以文件形式发送给QQ好友(视频怎么以文件形式发送微信)

    视频怎么以文件形式发送给QQ好友(视频怎么以文件形式发送微信)

  • win1032位支持多大内存(win10支持32位么)

    win1032位支持多大内存(win10支持32位么)

  • 荣耀play4t什么时候上市(荣耀play4什么时候发布)

    荣耀play4t什么时候上市(荣耀play4什么时候发布)

  • 苹果x高多少厘米(苹果x多高多宽)

    苹果x高多少厘米(苹果x多高多宽)

  • qq我的礼物墙怎么关闭(qq我的礼物墙怎么看别人送的时间)

    qq我的礼物墙怎么关闭(qq我的礼物墙怎么看别人送的时间)

  • plc用什么软件编程(plc编程用什么软件好)

    plc用什么软件编程(plc编程用什么软件好)

  • 用户与计算机网络的接口是(用户计算机网卡地址有什么用)

    用户与计算机网络的接口是(用户计算机网卡地址有什么用)

  • 电话卡停机不缴费会怎样(手机卡停机不交钱会怎么样)

    电话卡停机不缴费会怎样(手机卡停机不交钱会怎么样)

  • 手机耳机孔怎么清理(手机耳机孔怎么消毒)

    手机耳机孔怎么清理(手机耳机孔怎么消毒)

  • 快手移出黑名单的人怎么找(快手移出黑名单怎么找回)

    快手移出黑名单的人怎么找(快手移出黑名单怎么找回)

  • qq空间私密说说怎么取消(qq空间私密说说的图片别人能看到吗)

    qq空间私密说说怎么取消(qq空间私密说说的图片别人能看到吗)

  • 7650df硒鼓清零(7650dnf清零硒鼓)

    7650df硒鼓清零(7650dnf清零硒鼓)

  • 苹果11充电速度几个小时(苹果11充电速度变快)

    苹果11充电速度几个小时(苹果11充电速度变快)

  • 华为手机怎样连接电脑(华为手机怎样连接车机系统)

    华为手机怎样连接电脑(华为手机怎样连接车机系统)

  • wps文字段落设置在哪里(wps文字段落设置中有几种对齐方式)

    wps文字段落设置在哪里(wps文字段落设置中有几种对齐方式)

  • 迅雷安装失败怎么回事(迅雷下载安装不了)

    迅雷安装失败怎么回事(迅雷下载安装不了)

  • Win10 5 月累计更新21H1存在新bug的解决方法(win10 5月更新已知bug)

    Win10 5 月累计更新21H1存在新bug的解决方法(win10 5月更新已知bug)

  • H5项目实现扫描二维码功能 -- html5-qrcode(h5实现扫码功能)

    H5项目实现扫描二维码功能 -- html5-qrcode(h5实现扫码功能)

  • 运输费劳务是否可以扣除
  • 化肥与农药的利与弊
  • 折扣折让红字发票怎么做账务处理
  • 通行费电子发票没有通行费字样
  • 企业的现金流量表反映的是什么
  • 票据背书转让常见的错误
  • 内部往来科目设置在哪类下
  • 怎么办开户许可证
  • 财务报表里现金是什么
  • 技术维护费280全额抵扣会计分录
  • 朋友挂靠公司社保
  • 应交税费计提是借方还是贷方
  • 生产企业出口退税操作流程视频
  • 工会筹备金和工会经费金额一样吗
  • 车间办公费计入什么会计科目
  • 成本算错了
  • 跨年度的暂估入库账务处理
  • 研发支出是否可以抵税
  • 如何测试电脑网速多少兆
  • win8的无线设置
  • 开机反应慢是怎么回事
  • 公司收到个人入股股金,然后又投资其他公司怎么做账
  • 运输发票符合什么要求
  • html里写php
  • 当月已验旧的发票怎么开
  • 如何配置phpstudy
  • thinkphp input
  • 以前年度的销售退回,冲减哪年的
  • 计提投资者利润
  • php连接数据库的基本步骤是什么
  • 预付卡怎么开票
  • 训练集验证集和测试集
  • Laravel 5.1 on SAE环境开发教程【附项目demo源码】
  • 个人应纳所得税计算公式
  • 申报经营所得成绩怎么填
  • 完税证明可以作废吗
  • 怎样从对公账号查询账单
  • sql server打开方式
  • 如何准确理解nosql的含义?
  • python如何运用
  • 代扣代缴个人所得税奖励金
  • 定额的个体户怎么交税
  • 对公账户一直没有对账,会有什么后果吗?
  • 航天税盘服务费开的普票可以抵税吗
  • 什么叫固定资产台账
  • 摊余成本通俗易懂
  • 火车退票费如何开票
  • 每季度末是什么意思
  • 无形资产发生减值后怎么摊销
  • 增值税专用发票查询系统官方网站
  • 刷单成本计入什么费用?
  • 纳税人未抄报税怎么办
  • 免税设备是什么意思
  • 收到红字发票账务处理应附哪些资料呢
  • 一般纳税人增值税优惠政策2023
  • 生产中产生的废油漆桶等危险废物应当作为什么贮存
  • 上月留抵税额怎么看
  • 土地出让金抵减销项税计算
  • 企业其他应收款余额非常大的原因
  • 租金收入分摊政策规定
  • mysql5.7.27安装
  • centos6.10安装教程
  • windows自带软件有哪些
  • centos7升级内核后 无法启动
  • shell 写入文本
  • 固定ie浏览器
  • win7系统开机黑屏只有鼠标且打不开任务管理器
  • unity 虚拟摇杆
  • android新手入门
  • 安卓自定义ui
  • jquery事件处理有哪些
  • android判断应用是否在前台
  • javascript学习指南
  • 交通运输业的税率9%和13%
  • 目的地查验和口岸查验费用一样吗
  • 山东济南税务局投诉电话
  • 内蒙古城镇土地使用税税率表
  • 地税跟国税是在一起吗
  • 电信宽带绑定的手机号怎么解除绑定
  • 税务登记办法细则
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设