惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 里沃特

XR806开发板环境搭建记录 谈谈把网站迁移到阿里云的一些感想和其中遇到的一些问题 HTML5+JS 《五子飞》游戏实现(八)人机对战 HTML5+JS 《五子飞》游戏实现(七)游戏试玩 - 里沃特 HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择 HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对 - 里沃特 HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子 HTML5+JS 《五子飞》游戏实现(二)路线分析和资源准备 - 里沃特 HTML5+JS 《五子飞》游戏实现(一)规则 cocos2dx-2.2.1 免 Cygwin 环境搭建(Win8+VS2013+ADT Bundle+android-ndk-r9c) - 里沃特 深入理解 cocos2d-x 坐标系 - 里沃特 在VS2010 下编译 cocos2d-x-2.1.4 - 里沃特 FFmpeg 1.2 for Android 生成一个动态库 FFmpeg 1.2 for Android 编译动态库 - 里沃特 Linq 批量更新数据 C# 统一对 try...catch 的调用,方便保存错误日志。 手机:由全触摸屏失效所想到的 愚人节奉献给大家的礼物,敬请收下 C# 让控件全屏显示(WinForm) - 里沃特
HTML5+JS 《五子飞》游戏实现(五)移动棋子
里沃特 · 2015-01-13 · via 博客园 - 里沃特

上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子。现在里沃特跟大家分享分享,怎么移动棋子。

想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位置,如果可以移动,则把棋子移动的目标位置,原来的位置就要清空

上面这句话,我们要分两步来处理:1、判断目标是否可移动;2、可以移动则移动棋子。

1、判断目标是否可移动。

首先移动时只能按直线,其次目标位置与原始位置之间不能有其他棋子:

    // 是否可移动
    this.canMove = function (pDest, pSrc) {
        var pi = this.getIndex(pDest, pSrc);
        if (pi && pi.destIndex != pi.srcIndex) {
            if (this.chesses[pi.destIndex].player == Player.None && this.chesses[pi.srcIndex].player != Player.None) {
                var i1, i2, j;
                for (var i = 0; i < this.lines.length; i++) {
                    i1 = $.inArray(pi.destIndex, this.lines[i]);
                    i2 = $.inArray(pi.srcIndex, this.lines[i]);
                    if (i1 != -1 && i2 != -1) {
                        if (pi.destIndex < pi.srcIndex) {
                            for (var j = Math.min(i1, i2); j < Math.max(i1, i2) - 1; j++) {
                                if (this.chesses[this.lines[i][j]].player != Player.None) {
                                    return false;
                                }
                            }
                        } else {
                            for (var j = Math.min(i1, i2) + 1; j <= Math.max(i1, i2); j++) {
                                if (this.chesses[this.lines[i][j]].player != Player.None) {
                                    return false;
                                }
                            }
                        }
                        return pi;
                    }
                }
            }
        }
        return false;
    };

2、移动棋子:

可以移动时,要判断移动后,可不可以夹对方一个或挑对方一对,如果可以的话还要把对方被吃掉的棋子换成自己的棋子;同时根据上一章的函数,我们知道,夹一个或挑一对的同时有可能会出现同时有两条线或多条线的棋子被吃掉,(下一次我们再细讲)。:

    // 移动棋子
    this.moveChess = function (pDest, pSrc) {
        this.chessarray = null;
        var pi = this.canMove(pDest, pSrc);
        if (pi) {
            this.chesses[pi.srcIndex].moveTo(this.chesses[pi.destIndex]);

            var chess = this.chesses[pi.destIndex];
            var r1 = this.canCarry(chess), r2 = this.canClip(chess);
            if (r1 || r2) {
                var rl = (r1 ? r1.length : 0) + (r2 ? r2.length : 0);
                if (rl == 1) {
                    if (r1) {
                        // 被替换掉的棋子
                        this.chessreplace.push(r1[0][0]);
                        this.chessreplace.push(r1[0][1]);
                        // 替换
                        this.chesses[r1[0][0].point.index].player = chess.player;
                        this.chesses[r1[0][1].point.index].player = chess.player;
                    } else {
                        // 被替换掉的棋子
                        this.chessreplace.push(r2[0][0]);
                        // 替换
                        this.chesses[r2[0][0].point.index].player = chess.player;
                    }
                } else {
                    // 如果有多条路线的棋子可以吃,先存起来,再提示用户选择吃哪一条线上的
                    this.chessarray = [];
                    if (r1) {
                        for (var i = 0; i < r1.length; i++) {
                            this.chessarray.push(r1[i]);
                        }
                    }
                    if (r2) {
                        for (var i = 0; i < r2.length; i++) {
                            this.chessarray.push(r2[i]);
                        }
                    }
                }
            }
            return true;
        }
        return false;
    };

这一节讲的比较简单,大家先消化一下。下一节我们将实现多重棋子的操作与提示。

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

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

HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子

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

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