热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运用ink+react制造一个命令行的在线五子棋游戏客户端

背景Ink是React在命令行中衬着体系的一个完成,在GitHub上已有1w+Star.看着蛮好玩,因而尝试着写了一个五子棋游戏,经由多少天的划水,终究初见成效了!先来看个演示动画

背景

Ink 是 React 在命令行中衬着体系的一个完成, 在 GitHub 上已有 1w+ Star. 看着蛮好玩, 因而尝试着写了一个五子棋游戏, 经由多少天的划水, 终究初见成效了!

先来看个演示动画(Gif 太大这里放不下, 请移步 GitHub 寓目):

需要声明的是: 这个客户端我已开源在了 GitHub 上, 地点是 https://github.com/acrazing/g…, 然则这是一个在线游戏的客户端, 由于贸易缘由, 服务端代码没有开源, 所以这篇文章重要形貌 Ink + React 构建客户端的历程, 后续假如有时机的话会斟酌写一篇文章来聊聊服务端的架构与思绪.

怎样运用

起首需要你在当地装置 node + npm, 然后运用 npm 全局装置本项目标 npm 包:

npm i -g gomoku-terminal

这个时刻全存在一个命令行进口 gomoku, 其运用方法是:

$ gomoku --help
gomoku [options]
Options:
--version Show version number [boolean]
--api the api host [string] [default: "http://23.106.139.99:5001"]
--store the config & session store file
[string] [default: "~/.gomoku-terminal.json"]
--help Show help [boolean]

假如只启动一个实例, 则不需要通报任何参数在命令行中直接挪用即可, 然则假如要启动多个实例, 则需要传入 --store 参数, 指向差别的文件名, 来贮存会话信息.

第一次启动或许 token 逾期时, 会起首进入登录界面:

《运用 ink + react 制造一个命令行的在线五子棋游戏客户端》

这个时刻你需要运用方向键来掌握核心, 然后输入用户名和暗码再将核心移动到 Go 上按回车键登录, 或许不输入用户名和暗码直接按 Anonymous 举行匿名登录, 现在注册接口好像有题目, 只支撑匿名登录.

登录胜利后, 会跳转到房间列表页面:

《运用 ink + react 制造一个命令行的在线五子棋游戏客户端》

这个页面会展现5个房间, 你能够运用上下键来挑选一个房间进入(假如有的话), 或许点击 New 来建立一个房间并进入. 按 R 能够手动革新房间列表.

进入房间后, 会自动跳转到房间页面:

《运用 ink + react 制造一个命令行的在线五子棋游戏客户端》

这个时刻你起首需要按 Ready 键(或许按键盘 R)来预备, 长时间未预备会被踢出, 两边均预备后游戏自动最先. 这个时刻假如该你落子的话能够经由过程方向键来挑选要落子的位置, 然后按回车落子, 长时间未落子会自动判负:

《运用 ink + react 制造一个命令行的在线五子棋游戏客户端》

手艺完成

重要有两个难点:

一个是键盘掌握, 这个 ink 并没有供应一个有用的计划来举行操纵, 只供应了一个 StdinContext 来暴露了规范输入, 而经由过程按键来掌握核心则需要自行完成, 本项目中的完成是经由过程一个 Focusable 组件来完成的, 详细能够检察该文件: Focusable.ts.

另一个是机能题目, Ink 的组件每一次革新(render)都邑触发一次全量衬着, 这个和 react-dom 不一样, react-dom 做了大批的优化(重如果 diff 算法与 patch update). 在绘制棋盘界面的历程当中, 最少需要有255(15 * 15)个元素, 因而必需要严格掌握每一个 Piece 的革新历程, 相对不能涌现一个状况变动致使一切 Piece 都衬着的状况, 因而只能经由过程元素部分状况来掌握, 而不能经由过程 props.

另外, 本项目中运用 mobx 来治理状况, mobx-sync 来耐久化状况到文件体系, 还完成了一个快捷键体系, 详细能够检察该文件: KeyboardReceiver.

TODO

  • 优化机能: 现在的衬着机能实在太蹩脚, 只能说是委曲能用的状况, 这个需要 ink 本身做大批的优化
  • 优化体验: 现在只完成了基本的交互功用, 然则表面相称丑

源代码地点: https://github.com/acrazing/g…
npm 包地点: https://www.npmjs.com/package…


推荐阅读
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • ReactJSUIAnt设计空组件原文:https://w ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
author-avatar
天天火火红红
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有