HTML5+JS 《五子飞》游戏实现(二)路线分析和资源准备

上一节 里沃特与我们分享了《五子飞》的下棋规则,可能有些伙伴看得不清楚,像我们码农还是看到代码比较靠谱。下面就把可以走棋的路线跟大家说一下。

假设从左上角开始,以0开始编号,往右数(没看第一节棋盘的先去看一下)(因为路线比较简单,就直接写固定的数据了):

1.横着走有5条直线:

var lines_h = [
        [ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24]
];

2.竖着走也有5条直线:

var lines_v = [
        [ 0,  5, 10, 15, 20],
        [ 1,  6, 11, 16, 21],
        [ 2,  7, 12, 17, 22],
        [ 3,  8, 13, 18, 23],
        [ 4,  9, 14, 19, 24]
];

3.另外还有6条斜线可走:

var lines_o = [
        [ 0,  6, 12, 18, 24],
        [ 4,  8, 12, 16, 20],
        [ 2,  6, 10],
        [ 2,  8, 14],
        [10, 16, 22],
        [14, 18, 22]
];

合起来即理论下可以走的路线如下:

// 可走的路线
var lines = [
        [ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24],
        [ 0,  5, 10, 15, 20],
        [ 1,  6, 11, 16, 21],
        [ 2,  7, 12, 17, 22],
        [ 3,  8, 13, 18, 23],
        [ 4,  9, 14, 19, 24],
        [ 0,  6, 12, 18, 24],
        [ 4,  8, 12, 16, 20],
        [ 2,  6, 10],
        [ 2,  8, 14],
        [10, 16, 22],
        [14, 18, 22]
    ];

分别用 A,B 表示对战双方:

var Player = { A: 0, B: 1, None: -1 };

棋盘我们直接在 canvas 上画,棋子准备两个小图片:

 

为棋子定义一个对象:

function Point(x, y, index) {
    this.x = x;
    this.y = y;
    this.index = index;
}
function Bounds(x, y, w, h) {
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;

    this.toArray = function () {
        return [this.x, this.y, this.w, this.h];
    };

    this.toArrayXY = function () {
        return [this.x, this.y, this.x + this.w, this.y + this.h];
    };
}
// 棋子
function Chess(player) {
    this.player = player;
    this.point = new Point(-1, -1, -1);
    this.bounds = new Bounds(-1, -1, -1, -1);
    this.moveTo = function (chess) {
        chess.player = this.player;
        this.player = Player.None;
    };
}

棋盘上棋子定义(棋子初始化):

var i;
var cpc = 5;
var ctc = Math.pow(cpc, 2);
var chesses = [];

// 分配棋子
for (i = 0; i < cpc; i++) {
    chesses[i].player = Player.A;
}
for (i = cpc; i < ctc - cpc; i++) {
    chesses[i].player = Player.None;
}
for (i = ctc - cpc; i < ctc; i++) {
    chesses[i].player = Player.B;
}
for (i = 0; i < ctc; i++) {
    chesses[i].point = new Point(i % cpc, parseInt(i / cpc, 10), i);
}

这样,路线和棋子初始化就已经比较清楚了,下一节我们开始在 canvas 上把棋子画好。

时间: 2024-10-12 08:15:02

HTML5+JS 《五子飞》游戏实现(二)路线分析和资源准备的相关文章

HTML5+JS 《五子飞》游戏实现(五)移动棋子

上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子.现在里沃特跟大家分享分享,怎么移动棋子. 想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位置,如果可以移动,则把棋子移动的目标位置,原来的位置就要清空. 上面这句话,我们要分两步来处理:1.判断目标是否可移动:2.可以移动则移动棋子. 1.判断目标是否可移动. 首先移动时只能按直线,其次目标位置与原始位置之间不能有其他棋子: // 是否可移动 this.canMove = functio

HTML5+JS 《五子飞》游戏实现(八)人机对战

要想实现人机对战,就必须让电脑自动下棋,而且要知道自动去查找对方的棋子,看看有没有可以挑一对的,有没有可以夹一个的,这样下起来才有意思. 当电脑用户下完棋后,电脑应立即搜索用户的棋子,然后如果没有被吃的,就再随机走一个棋子(要想让电脑成为下棋高手就不能随机下棋,要考虑下棋后会不会再被对方吃掉等等,这里只简单做随机下子了). 完整<五子飞>游戏人机对战:http://www.lyout.com/projects/Fiveflychess/FiveflyChess8.htm // 查找是否有可挑的

HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择

上一章我们提到了如果有多条线上的棋子可以被吃掉,那么游戏需要提示用户,让用户选择吃哪条线上的.另外因为是网页游戏,所以一定要实现鼠标单击棋子可以进行操作. 当鼠标移动棋子上面后,切换鼠标指针为手形,移开棋子后再切换回默认的状态: el.mousemove(function (e) { var o = el.offset(); var p = { x: e.clientX - o.left, y: e.clientY - o.top }; el.css("cursor", "d

HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对

在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 this.lines = [ [ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24], [ 0, 5, 10, 15, 20], [ 1, 6, 11, 16,

HTML5+JS 《五子飞》游戏实现(七)游戏试玩

前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:http://www.lyout.com/projects/fiveflychess/FiveflyChess7.htm 现在我们来总结一下该小游戏的一些基本定义: // 定义游戏对象 function GameChess(){ // 初始配置 this.init = function ()//... // 画棋

HTML5+JS 《五子飞》游戏实现(一)规则

很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种益智游戏,我们先来看看棋盘布局: 规则如下: 一.黑白双方(对方黑,我方白)各执五子,分别摆放在双方的边线上: 二.棋子只能走直线(斜的直线也是),不能转弯: 三.只要前面没有棋子(任何一方的)就可以跳格走: 四.可以夹死对方一个或可以挑对方两个棋子(以1表示黑子,0表示白子,-表示空白): 夹一个:任何一条

Cocos2d-x 小试牛刀五子连珠游戏

Cocos2d-x 小试牛刀五子连珠游戏 声明:本文游戏使用的是cocos2d-x-3.13的代码 游戏介绍 本文将介绍有Cocos编写经典游戏,五子连珠.游戏规则,有一个10*10的棋盘,里面有六种颜色的珠子,点击棋盘的珠子可以移动到任意有开放路径的位置,如果横.竖.斜.反斜可以连接相同颜色珠子数大于等于5个,就可以消除.如果移动珠子后没有消除珠子,则会增3个珠子,如果棋盘被所有珠子填满则游戏结束. 游戏界面如下: 游戏代码 游戏代码下载地址:https://pan.baidu.com/s/1

用html5+js实现掌机游戏赛车demo

最近无聊,用html5+js做了一个以前玩过的掌机赛车游戏,顺便学习一下画布的api以及巩固一下js基础. 游戏界面,没做什么美化. 游戏规则:游戏界面分为三列,黑色方块随机落下,红色方块可以在三列自由移动(用方向键,长按下方向键黑色方块加速下滑).红色方块碰到黑色方块即为输. 得分:每正常通过一次黑色方块加12分,加速通过加30分. 下面直接上代码: html: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"&g

Ext JS学习第五天 Ext_window组件(二)

此文用来记录学习笔记 •上一讲我们已经学过了window的使用,那么在这将中,我们将结合然后把Ext中需要注意的地方,以及组建的使用给予介绍.indow做几个Web开发的经典示例. •ExtWeb实战300例: –例1:点击按钮打开一个window,window重复创建的问题 •重点分析:这个问题是初学者经常会犯错的地方,一般来说简单的代码不会产生此问题,但是如果以后代码复杂以后,这个问题如果发生调试起来会非常麻烦!! 附上栗子代码 1 Ext.onReady(function () { 2 3