决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台

文件系统
• 阅读 1252

一年多前撸过1个小霸王插件,不过由于是单机版无法联机,交互性不够。刚好最近看到qq堂下线的新闻,为了弥补之前的遗憾,利用假期时间参考这种类炸弹人模式开发了一个可以局域网联机对战的moba游戏,给大家工作之余提供一个能够和小伙伴一起愉悦身心的工具,间接提升大家使用vscode的开发效率。

主要目的 使vscode放松身心、提升效率、增强算法水平的能力进一步增强

安装

在vscode 插件市场搜索alphabe-war点击安装即可

决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台

启动

安装成功后点击左侧G图标,进入游戏列表界面

决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台
该界面有栏构成

  1. ROOM LIST 为房间界面展示当前局域网中正在等待开始的游戏,鼠标hover到该栏有 + 按钮创建游戏。第一次创建需要先输入玩家名称
  2. AI SCRIPT LIST 为操作脚本界面,可以自由编辑脚本控制玩家行为

创建游戏

在ROOM LIST点击 + 创建后,进入房间界面

决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台

  • 玩家进入且全部为准备状态,房主点击开始游戏启动(游戏界面图下面附有一张动态的gif,可以稍等加载看动态效果)
    决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台

决战摸鱼之巅:将vscode撸成可局域网联机对战的moba平台

操作方式

  1. 手动模式 该模式通过上、下、左、右控制方向,空格控制埋雷;
  2. 脚本模式 通过编写js脚本控制玩家进行游戏。目前提供了当前游戏所有存在对象的当前状态和5种行为操作玩家游戏

游戏目标

两方队伍通过消灭字符怪或者对方获取字符,率先抢到HELLO WORLD 所有字符的一方获胜,游戏右侧为当前状态栏。分别展示 Team1和Team2的目标字符,和玩家当前获取的字符。

游戏对象

  1. 字符怪 被炸后掉落一个字符,每15秒在地图空白点中随机新增两个
  2. 普通怪 每15秒在地图新增1个,碰撞可以杀死玩家,获取字符后可变成字符怪
    • 普通墙 可以炸碎
    • 硬墙 不能炸碎
    • 移动墙 可以移动,用来格挡怪物或者挡住敌方玩家
    • 时间墙 倒计时,玩家被怪物碰撞后回到出生点位
  3. 道具
    雷长度增强 获取后爆炸增强
  4. 玩家 玩家分为两队,可以通过埋雷消灭字符怪、拾取字符。玩家死亡会掉落一个字符,且回到出生点位,限制5秒后

渲染方式

游戏提供两种展示方式,可按喜好切换

  1. 中文字符【默认】
  2. ascii模式

技术架构

该插件主要分为服务端和客户端两部分。游戏主逻辑在服务端中运行,定时将当前游戏数据发送给客户端渲染。
服务端: 寄生于vscode中,通过webscoket与客户端做数据交互。也可以单独做成node服务部署。
客户端: 客户端通过vscode的webview加载本地html的方式运行,通过canvas的一些简单的api渲染没有依赖任何引擎,服务端+客户端+赞赏码图片整个插件打包只有900多k。

TODO 目前梳理的一些待完善的点,后续有时间再加,或者有人感兴趣的话把代码丢出来一起维护

  1. 地图编辑功能 没有地图编辑功能,只有一张固定的图,比较枯燥。直接通过数组修改地图效率也较低
  2. AI模式 目前脚本1秒钟调用一次,对单次行为调用没有做限制
  3. 游戏道具完善 道具过于单一,目前只有一个增强雷的长度的道具
  4. 游戏渲染优化 比如玩家或者怪物死掉后,无交换只有位置变化,比较生硬
  5. 断线重连 目前没有做断线重连,一方关闭后无法再次进入
  6. 服务端客户端数据交互方式优化

发散

vscode 完全可以作为一个休闲娱乐的平台来使用,比如一些棋牌,益智的小游戏完全可以移植到其中。有兴趣的小伙伴,可以试试整合比如五子棋、象棋、地主+局域网联机,可以将工作中一些碎片化时间与同事增进交流,一起放松身心,延长职业生涯。

反馈

如果发现了任何的bug或者有任何建议, 请提交 issues to 到GitHub Repo https://github.com/gamedilong/alphabet-war. 或者可以直接邮件到 1104238614@qq.com

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
IMX6开发板飞思卡尔系统烧写工具MFGTool2工具详解
fsli.MX6开发板有多种系统烧写方式,这里介绍使用联机烧写工具MFGTool及其对系统的烧写。MFGTool是fsl官方开发的一套PC联机系统烧写程序,通过USB将PC和开发板连接后,使用MFGTool就可以烧写uboot,kernel和filesys。MFGTool当前的版本是MFGToolV2。MFGTool程序的
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这