前言:

勿忘初心, 本系列的目标是实现一款类似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来实现, 站在巨人的肩膀上, 看得更远.

希望自己能坚持, 完成最初的目标和设想. 也期待你的关注.

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

俄罗斯方块java机器人_H5版俄罗斯方块(4)---火拼对战的雏形相关推荐

  1. H5版俄罗斯方块(4)---火拼对战的雏形

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

  2. java俄罗斯方块英文书籍_Java版俄罗斯方块

    Java版俄罗斯方块 08年写的一个Java版俄罗斯方块程序 界面做的中规中矩,每种形状颜色都不相同 程序控制还可以,没什么大的Bug 消磨时间的时候可以Down下来玩玩 下载链接:http://do ...

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

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

  4. Java版俄罗斯方块

    Java版俄罗斯方块 08年写的一个Java版俄罗斯方块程序 界面做的中规中矩,每种形状颜色都不相同 程序控制还可以,没什么大的Bug 消磨时间的时候可以Down下来玩玩 下载链接:http://do ...

  5. 《游戏学习》Java版俄罗斯方块小游戏源码实战

    [Java版俄罗斯方块]     增加保存配置信息到文件的功能,声音设置.显示设置.关卡选择等配置信息在修改后将会保存在jar包同级目录下(以jar相同的文件名+.cfg后缀保存) [菜单选项]    ...

  6. java版的俄罗斯方块_Java版俄罗斯方块

    Java版俄罗斯方块 08年写的一个Java版俄罗斯方块程序 界面做的中规中矩,每种形状颜色都不相同 程序控制还可以,没什么大的Bug 消磨时间的时候可以Down下来玩玩 下载链接:http://do ...

  7. java双人俄罗斯方块_双人版俄罗斯方块

    改进 1. 方块旋转修改 2. 实现没达到一个成绩等级进行加速并且保持速度直到下一次加速(使用两个定时器) 3. 实现两个人分别暂停 4. 界面优化 图片大家网上自己搜索一下 ------------ ...

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

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

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

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

最新文章

  1. 2021年,自动驾驶将我们带到何处去?
  2. java网络流传输,中文乱码问题。
  3. 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
  4. java中jtansforms,java – 使用AffineTransform旋转图像
  5. 2020 阿里云原生实战峰会开幕 云原生落地的正确姿势
  6. leetcode 388. Longest Absolute File Path | 388. 文件的最长绝对路径(栈+DFS)
  7. python中matplotlib画图_Python-matplotlib画图(莫烦笔记)
  8. Android手机用wifi连接adb调试的方法
  9. centos运行python程序_CentOS 7定时执行python脚本
  10. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
  11. android手机连接PC后怎样切换为U 盘模式
  12. mysql主从复制从机开启读_MySQL主从复制和读写分离
  13. vmware workstation 9注册码
  14. lumion自动保存_19条新人必看的Lumion良好操作习惯
  15. POJ 2387 Dijkstra
  16. 层次分析法详解(matlab)
  17. java提现功能开发_如何利用java实现提现金额到支付宝账户的功能
  18. jQuery教程——jQuery的快速入门
  19. win 10 PHP开发环境配置
  20. 计算机知识及保密培训目的,二勘院举办保密知识和计算机网络安全专题培训会...

热门文章

  1. 迷茫!工作之余要学点什么呢?
  2. 逻辑回归二分类算法python_多分类逻辑回归 (Multinomial Logistic Regression)
  3. J9数字论:如何理解区块链中的公链,私链,侧链,联盟链
  4. Word 插入内容表格不换页
  5. HBase应该知道的
  6. 概率论——均匀分布、指数分布
  7. python+smtp邮件
  8. mongodb备份与还原
  9. 拓嘉辰丰电商:拼多多无货源开店该怎么做
  10. CTFer成长之路--一道历届逆向题解题过程(包含脱壳、算法分析)