laya游戏开发之贪吃蛇大作战

  • 一、背景
  • 二、引擎选择
  • 三、整体架构
    • 3.1 玩法分析
    • 3.2 游戏架构
    • 3.3 技术选型

一、背景

需要快速实现一个贪吃蛇的 demo 以验证功能,非传统贪吃蛇玩法,是类似贪吃蛇大作战的多人联机玩法

二、引擎选择

引擎和语言的选择比较多样,但因为一开始的需求是 H5 或者微信小游戏的形式,因此没有考虑 Unity / UE4 等传统引擎(对 H5 的支持比较有限),转而考虑使用 cocos2d、laya 等原生支持 H5 的引擎 (引擎支持 JavaScript 开发)。

经过易用性、上手成本的考虑,最终决定用 laya 进行开发。laya 写一份代码可同时支持安卓/IOS/H5/微信小游戏,更满足当前开发时间有限、平台暂未确定的情况,用 JavaScript/TypeScript 开发也更容易上手。(:并不是说 laya 就是最好的选择,日常开发还要考虑配套工具的完整性、平台迁移难度、社区活跃度等因素)

三、整体架构

接着是分析整个游戏的架构、确定技术选型等事项。

3.1 玩法分析

贪吃蛇大作战的玩法相对于传统贪吃蛇有一定不同,其核心玩法有其三:

  1. 通过吃掉食物来增加身体长度
  2. 在有限的地图内规避其他玩家控制的贪吃蛇
  3. 通过圈住或者拦截其他贪吃蛇,使其撞上自己或者墙壁导致死亡,其死亡后分数会转换为食物进行掉落

由以上三个核心玩法可以演变出许多进阶的游戏策略,但仅从实现上分析,游戏的核心玩法并不难:主要涉及到的局内功能点有蛇的角色控制和表现变化、多人游戏的碰撞和胜负结算、食物的随机生成等;局外系统也比较简单,包括排行榜、长度击杀数以及重开局等。

3.2 游戏架构

相对于传统单机游戏,贪吃蛇大作战涉及到了服务端开发,所以除了客户端功能的实现之外,需要同时考虑服务端的技术选型以及架构。

这里客户端选择了用 laya 引擎 js 语言去开发,服务端就选择了同一技术栈下的 nodejs 来开发,节约学习成本。

客户端简单的功能拆解如下:
(不是特别规范,请不要学习ToT)

服务端则比较复杂一些,因为涉及到多人游戏的同步问题(简单来说就是所有蛇在同一时间内在不同玩家的设备上表现一致,不会出现这边我移动了三格,那边我只移动了两格的情况),这里不过多讲解,可以看下这篇文章。

一般来说,网络同步有帧同步和状态同步两种方案,这两种方案并没有孰优孰劣之分,但有各自的应用场景。网上有大段的文章从同步效果、延时、可实现程度等方面去分析两者的区分,这里只对本项目进行分析:

  • 同步效果来说,状态同步负责同步状态(蛇的位置、食物的位置),帧同步负责同步输入指令(玩家的移动指令),可能存在的风险点是当地图很大食物很多时,食物的状态同步会有问题

  • 实现难度而言,状态同步所有计算都在服务器,帧同步在客户端,所以帧同步是需要一些特殊的实现去保证一致性的(比如伪随机和浮点数计算等) ,这些会在之后的文章里介绍

  • 重连和回放机制而言,帧同步易于实现,无非是重新计算一遍,而状态同步只能通过类似录像的形式

其实从实现成本而言,本应该用状态同步去做,但这个小 demo 有两个特殊需求:一个是必须要支持回放操作,而且是完完全全的复盘,这一点其实就相当于否决了状态同步了;另一个是严格同步,也就是每一帧各个设备的表现必须完全一致,而状态同步是允许一些误差的,因此最后还是选了帧同步。

3.3 技术选型

最终决定:
客户端这边开发语言 js,引擎选择 laya,通信协议用 protobuf
服务端选择 nodejs,语言 js,同步方式用帧同步,协议pb

PS: 之所以单独用一篇文章单独分析决定技术选型的过程,是因为笔者认为一个清晰的思路和合理的技术选型,可以缩减大半不必要的开发时间,哪怕是需要快速成型的小游戏,也同样如此


接下来还会用三到四篇文章讲解贪吃蛇大作战小游戏开发过程中客户端、服务端的主要代码框架,以及碰到的问题和解决方法等,欢迎关注!

laya游戏开发之贪吃蛇大作战(一)相关推荐

  1. laya游戏开发之贪吃蛇大作战(二)—— 贪吃蛇客户端

    文章目录 一 功能分析 二 实现方案 1. 代码结构 2. 关键函数实现 2.1 游戏主循环(GameLoop) 2.2 数据层(Model) 2.3 画面绘制层(View) 帧同步的困难与解决方法 ...

  2. 贪吃蛇大作战JavaFx版完整源码

    贪吃蛇大作战 Java版 项目源码:https://github.com/silence1772/JavaFX-GreedySnake (记得点star啊,收藏一个项目最好的方式是star而不是for ...

  3. php蛇蛇大作战,贪吃蛇大作战

    贪吃蛇大作战是一款和球球大作战十分相似的游戏,不少玩家都在找贪吃蛇大作战网页版的网址,本次牛游戏网为大家带来了游戏在线玩的网址链接,快来在线玩贪吃蛇大作战吧. 小编提示: 点击上面的网址进入后,在紫色 ...

  4. cocos creator开发微信小游戏(五)贪吃蛇大作战

    目录 小游戏介绍 小游戏cocos creator场景图 小游戏部分JS代码 开发中碰到的问题 工程及说明 小游戏介绍 贪吃蛇小游戏:贪吃蛇试玩(首次加载比较慢),类似贪吃蛇大作战的小游戏.当玩家的蛇 ...

  5. html5小游戏 typescript,使用TypeScript和Canvas编写移动端贪吃蛇大作战游戏

    基本介绍 一款移动端贪吃蛇大作战游戏.(只支持移动端) 这是一个临近 deadline 的课设项目,为了方便地使用TS,我直接使用angular-cli生成了TypeScript的项目结构.如果你有好 ...

  6. python贪吃蛇论文_爆款游戏《贪吃蛇大作战》的 Python 实现

    感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核.媒体们除了之前竞相追捧<Pokemon Go>热闹了一把,似乎也听不到什么声音了.直到最近几天,突然听见好几人 ...

  7. 贪吃蛇大作战的开发(一)

    最近想开发一套属于自己的游戏框架,主要由三部分,客户端.游戏服务端.游戏机器人,这里客户端采用的是cocos2d-x 3.17,客户端的业务逻辑我统一用lua编写,原因是脚本语言可以动态解释,游戏的话 ...

  8. 仿照贪吃蛇大作战的原型做的小游戏

    仿照贪吃蛇大作战的原型做的小游戏,通过摇杆移动小蛇,吃掉食物可以增加身体的长度.有加速功能,还有不太智能的AI电脑. 文件:590m.com/f/25127180-493401547-1ed8d3(访 ...

  9. 贪吃蛇大作战ai_当玩家发现《贪吃蛇大作战》是单机游戏后 世界都炸了

    贪吃蛇大作战是最近朋友圈最火爆的手游,不少玩家都通过分享得分进行炫耀并邀请好友加入游戏.这种火爆很快引起了多方关注,有不少媒体开始揭露<贪吃蛇大作战>只是包裹在完美AI模式下的单机游戏.近 ...

最新文章

  1. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解
  2. Python_Statsmodels包_时间序列分析_ARIMA模型
  3. 测验2: Python基本图形绘制 (第2周)
  4. vue面向切面_vue:在路由跳转中使用拦截器
  5. 入侵和反击 动态规划
  6. 大数据时代 | 数据分析方法及理论详解
  7. Spring差缺补漏
  8. cassandra使用心得_使用Cassandra和Nutch爬网
  9. MVVM Light Toolkit使用指南
  10. String*Buffer*Builder理解
  11. eclipse fat jar 打包插件
  12. 计算机文档调换顺序,word文档页面顺序调换
  13. 30-40W/年,某银行招聘架构设计岗(地点:上海)
  14. 用禅道编写测试用例(详细)
  15. OneNET麒麟座应用开发之七:控制采样电机
  16. vba程序的vb6封装_调试VBA和VB6应用程序
  17. Redis实现好友关注 | 黑马点评
  18. python For 循环 三种遍历方式
  19. 液晶显示器c语言编程,51驱动1602液晶显示器c程序
  20. 【NLP基础中文处理】jieba分词初级的应用,以及统计《茅山后裔》的主要人物

热门文章

  1. 异构计算给我们带来了哪些思考?
  2. MapReduce中的自定义多目录/文件名输出转
  3. Zephyr:undefined reference to `__device_dts_ord_xx‘
  4. You can't take the sky from me
  5. 区块链100讲:Hyperledger Cello简介
  6. CSS基础(13)- 更多的选择器
  7. OneHotEncoder
  8. Debian下载内核源码的方法
  9. 2022第七届少儿模特明星盛典 全能TOP艺人蒋松廷 T台风采展示
  10. 分享几个常做甘特图的软件