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

推荐订阅源

Engineering at Meta
Engineering at Meta
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
IT之家
IT之家
F
Full Disclosure
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
B
Blog
H
Help Net Security
The Cloudflare Blog
Recorded Future
Recorded Future
P
Proofpoint News Feed
P
Proofpoint News Feed
C
Cisco Blogs
T
Tailwind CSS Blog
P
Palo Alto Networks Blog
D
Docker
爱范儿
爱范儿
Know Your Adversary
Know Your Adversary
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Y
Y Combinator Blog
雷峰网
雷峰网
AWS News Blog
AWS News Blog
D
DataBreaches.Net
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
Blog — PlanetScale
Blog — PlanetScale
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
C
CERT Recently Published Vulnerability Notes
阮一峰的网络日志
阮一峰的网络日志
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
CXSECURITY Database RSS Feed - CXSecurity.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cyber Attacks, Cyber Crime and Cyber Security
腾讯CDC
小众软件
小众软件
G
Google Developers Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Scott Helme
Scott Helme
O
OpenAI News

博客园 - 里沃特

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 《五子飞》游戏实现(六)鼠标响应与多重选择