前言:
  勿忘初心, 本系列的目标是实现一款类似QQ"火拼系列"人机对战版俄罗斯方块. 在完成了基本游戏框架和AI的算法探索后, 让我们来尝试一下人机大战雏形编写.
  本系列的文章链接如下:
  1). 需求分析和目标创新 
  2). 游戏的基本框架和实现 
  3). 游戏的AI算法 
  这些博文和代码基本是同步的, 并不确定需求是否会改变, 进度是否搁置, 但期翼自己能坚持和实现.

演示&下载:

  在线版本, 点击试玩(求点击, 求轻拍, ^_^).
  该版本界面依旧简陋, 效果如图所示:
   
  注: 左边为玩家, 右边为机器人, 使用键盘方向键(上下左右)控制.

  代码下载地址: http://pan.baidu.com/s/1gd2Hl6b
  下载解压目录结构如下所示:
  
  点击tetris.html, 在浏览器上运行(由于HTML5程序, 最好在Chrome/Firefox上运行).

游戏策划:
  游戏采用人机对战的方式, 是为了让玩家有个参照物. 这样在游戏过程中, 始终处于之中激烈的竞技状态中, 同时又有明确的目标(打败对方).
  当前整个游戏还不是很完全, 只是简单做了改造.
  1). 引入准备界面
  
  犹如短跑的发枪令一样, 让玩家有短暂时间去准备.
  2). 限定游戏时间
  
  由于AI机器人的强大(跑一天也不会挂), 因此无时间限定的挑战, 用户玩家必然会崩溃. 由此引入一个合适的时间限定. 在这个时间窗口中, 谁得分高, 谁就是最后的赢家.
  引入了这两个之后, 感觉游戏的可玩性强了很多, ^_^.

源码解读:
  代码文件结构如图所示:
  
  • game_engine.js: 定义了游戏引擎了一些基本类.
  • tetris_player.js: 封装了玩家和机器人的agent类.
  • tetris_game.js: 实现了具体的scene和layer类, 并用状态模式串联.
  游戏编程中, 状态模式(state pattern)以及状态机(state machine)尤被推崇. 程序中并没有完全按照该模式来实现, 不过多少有些影子.
  场景(Scene)和画板层(Layer)的类结构如下所示:
  
  BaseScene的类定义如下:

    function BaseScene() {this.currentLayer = null;}BaseScene.prototype.switchLayer = function(baseLayer) {// *) 上一个画板层执行 exitLayer的操作if ( this.currentLayer != null ) {this.currentLayer.exitLayer();}this.currentLayer = baseLayer;// *) 下一个画板层执行 entryLayer的操作if ( this.currentLayer != null ) {this.currentLayer.entryLayer();}}BaseScene.prototype.update = function(interval) {if ( this.currentLayer != null ) {this.currentLayer.update(interval);}}BaseScene.prototype.render = function(ctx) {if ( this.currentLayer != null ) {this.currentLayer.render(ctx);}}

  BaseLayer的类定义如下:

    function BaseLayer() {}BaseLayer.prototype.entryLayer = function() {}BaseLayer.prototype.exitLayer = function() {}BaseLayer.prototype.update = function(interval) {}BaseLayer.prototype.render = function(ctx) {}

  角色之间的交互, 往往采用消息通知的机制来实现. 不过该程序并没有实现. 对于玩家和机器人, 其通过BasePlayer来进行了抽象. 其类结构如下所示:
  
  对于其他部分的代码, 这边不再具体展开, 请详细见该系列的前面几篇文章.

总结:
  人机对战的实现进展还是比较顺利的, 一方面游戏本身比较简单, 另一方面之前做了很多铺垫的工作. 但越写到后面, 越发觉得一个好的游戏引擎对一个游戏编写的重要性. 犹如IDE对于代码编写的重要性. 后续想借助cocos2d-js来实现, 站在巨人的肩膀上, 看得更远.
  希望自己能坚持, 完成最初的目标和设想. 也期待你的关注.

写在最后:
  
如果你觉得这篇文章对你有帮助, 请小小打赏下. 其实我想试试, 看看写博客能否给自己带来一点小小的收益. 无论多少, 都是对楼主一种由衷的肯定.

  

转载于:https://www.cnblogs.com/mumuxinfei/p/4643629.html

H5版俄罗斯方块(4)---火拼对战的雏形相关推荐

  1. 俄罗斯方块java机器人_H5版俄罗斯方块(4)---火拼对战的雏形

    前言: 勿忘初心, 本系列的目标是实现一款类似QQ"火拼系列"的人机对战版俄罗斯方块. 在完成了基本游戏框架和AI的算法探索后, 让我们来尝试一下人机大战雏形编写. 本系列的文章链 ...

  2. H5版俄罗斯方块(5)---需求演进和产品迭代

    前言: 产品的形态是不断迭代的, 从粗糙到精致, 从简易到立体. 有了最初的技术积累和时间思考后, 终于明确了该游戏的方向. 我想说的是: 技术不是重点, 产品/用户体验才是核心议题.  结合朋友的游 ...

  3. H5版俄罗斯方块游戏开发:需求分析和框架实现

    俄罗斯方块和五子棋一样,规则简单,上手容易.几乎每个开发者,都会在其青春年华时,签下"xx到此一游".犹记得大一老师在布置大程作业的时候提过:"什么都可以写,唯一不能写的 ...

  4. H5版俄罗斯方块(1)---需求分析和目标创新

    前言: 俄罗斯方块和五子棋一样, 规则简单, 上手容易. 几乎每个开发者, 都会在其青春年华时, 签下"xx到此一游". 犹记得大一老师在布置大程作业的时候提过: "什么 ...

  5. H5版俄罗斯方块(3)---游戏的AI算法

    前言: 算是"long long ago"的事了, 某著名互联网公司在我校举行了一次"lengend code"的比赛, 其中有一题就是"智能俄罗斯方 ...

  6. “恶意版”俄罗斯方块游戏火了,永远给你不想要的方块,世界纪录才消掉31行...

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 玩俄罗斯方块(Tetris),你有没有过这样的经历?总是怕什么来什么,想要什么永远等不来. 留下一个缝隙,明明只要来个长条,就能消除得一干二 ...

  7. “恶意版”俄罗斯方块游戏火了

    本文转载自程序员极客实验室 玩俄罗斯方块(Tetris),你有没有过这样的经历?总是怕什么来什么,想要什么永远等不来. 留下一个缝隙,明明只要来个长条,就能消除得一干二净,但它就是不来,还给你疯狂掉& ...

  8. 单机版火拼俄罗斯方块源程序

    发表日期:2005年11月12日      已经有3587位读者读过此文 /*这是我在参考别人的的俄罗斯方块的基础上,写的一个单机版火拼俄罗斯方块源程序,*/ /*如果有须要下载可到www.jxncz ...

  9. javascript异步编程系列【八】--Jscex版火拼俄罗斯

    一.简介 俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名.俄罗斯方块的基本规则是移动.旋转和摆放游戏自动输出 ...

最新文章

  1. 06年编写的E阳指源码V1.7大放送
  2. WF4.0 基础篇 (十八) Flowchar
  3. Python使用@property方法改变方法为参数
  4. 一 SpringMVC源码之DispatcherServlet AbstractHanderMapping
  5. 生成二维码接口,前端调用接口将二维码显示在页面上
  6. 算法系列15天速成——第十三天 树操作【下】
  7. Git commit/pull/push的操作步骤
  8. 返回的图片 buffer 怎么接收_面试题:Kafka 会不会丢消息?怎么处理的?
  9. 面向对象(二) 继承/里氏替换
  10. 无声也能语音识别?微软这个黑科技有点厉害
  11. UVA - 11520 Fill the Square
  12. MySQL之流程控制
  13. ZigBee协议栈解析
  14. 拓端tecdat|matlab递归神经网络RNN实现:桨距控制控制风力发电机组研究
  15. 火车套餐惊现2013年豆浆
  16. SQL教程1_数据库及SQL语言基础知识
  17. Delphi Xe Web开发之 unigui入门视频教程
  18. 电商小程序如何实现分账?
  19. js中的字符串替换replace操作
  20. go-redis 读和存储json数组

热门文章

  1. 安徽 职称 计算机 英语,安徽正式发文取消职称外语和计算机考试
  2. 构架中为什么要域控服务器,AD域控升级和迁移
  3. springboot上传图片到宝塔Linux(本地上传和跨域上传)
  4. 【Git上传】上传大文件
  5. 深度学习面试高频之Batch Normalization
  6. AUTOCAD——门的两种画法、统一修改所有文字高度
  7. 农业土壤检测服务发展前景预测报告-
  8. 突破天量 通达信指标公式 副图 源码 贴图
  9. Pig4Cloud之验证码
  10. Discuz社区西瓜微信的登录插件