Android象棋游戏开发之--游戏规则

源码下载

棋盘棋子绘制完成后,接下来玩家要移动棋子开始与机器对弈。
那么如何判断当前棋子移动合法?

棋盘中所有的位置坐标映射为一个二维数组效果图,蓝色数字代表数组维数


棋盘二维数组表示图

黑帅移动规则:不能出九宫格,走直线,每步只能走一格

黑方九宫格

黑士移动规则:不能出九宫格,走斜线,每步只能走一格

黑方九宫格

黑象移动规则:不能过河,走“田”字,象眼处没有棋子

黑象移动规则图

马移动规则:马走"日",马蹄处没有棋子
车移动规则:走直线
兵移动规则:走直线,不能后退,过河前,只能向前,过了河,可左右移动,每步只能走一格
炮移动规则:走直线,隔棋吃棋子

了解完棋子移动规则。
我们用代码来实现如上规则
首先要把坐标转变为数组的维数

//二维数组
int[][] qizi;
//起始位置维数
int fromY, fromX;
//目的位置维数
int toY, toX;
// 起始位置是什么棋子
int moveChessID = qizi[fromX][fromY] ;
//黑帅
moveChessID == 1;
if (toY > 2 || toX < 3 || toX > 5 ) {//出了九宫格
    return false;
} else  if ((Math.round(toX-fromX) + Math.round(toY - fromY)) == 1) {
//只能走一格
    return true;
} else {
    return false;
}
//黑士
moveChessID == 5;
if (toY > 2 || toX < 3 || toX > 5) { //出了九宫格
    return false;
} else if (Math.round(toX - fromX) == 1 && Math.round(toY - fromY) == 1) {
//走斜线,直走一格
    return true;
} else {
    return false;
}
//黑象
moveChessID == 6;
if (toY > 4) {//过河了
    return false;
} else if (Math.roung(toY - fromY) == 2 && Math.round(toX - fromX) == 2) {
//走"田"字
    int centerX = ( toY + fromY) / 2;
    int centerY = (toX + fromX) / 2;
    if (qizi[centerY][centerX] != 0) {// 象眼处有棋子
        return false;
    }
    return true;
} else {
     return false;
}
//黑马
moveChessID == 3;
if (Math.round(toY - fromY) == 2 && Math.round(toX - fromX) == 1) {
    int centerY = (toY + fromY) / 2;
    if (qizi[centerY][fromX] != 0) {//马蹄处有棋子
        return false;
    }
    return true;
} else if (Math.round(toY - fromY) == 1 && Math.round(toX - fromX) == 2) {
    int centerX = (toX + fromX) / 2;
    if (qizi[fromY][centerX] != 0) {//马蹄处有棋子
        return false;
    }
    return true;
} else {
    return false;
}
//车
moveChessID == 2 || moveChessID == 9;
if (Math.round(toY - fromY) > 0 && Math.round(toX - fromX) == 0) {
//走的横竖线
    if (toY > fromY) {
        for (int i = fromY + 1 ; i < toY; i++) {
            if (qizi[i][fromX] != 0) {
                return false;
            }
        }
    } else {
        for (int i = toY - 1 ; i > fromY; i--) {
            if (qizi[i][fromX] != 0) {
                return false;
            }
        }
    }
    return true;
} else if (Math.round(toX - fromX) > 0 && Math.round(toY - fromY) == 0) {
//走的横线
    if (toX > fromX) {
        for (int i = fromX + 1 ; i < toX; i++) {
            if (qizi[fromY][i] != 0) {
                return false;
            }
        }
    } else {
        for (int i = toX - 1 ; i > fromX; i--) {
            if (qizi[fromY][i] != 0) {
                return false;
            }
        }
    }
    return true;
} else {
    return false;
}
//黑士
moveChessID == 7;
if ((toY - fromY) < 0 ) {
//后退
    return false;
} else if (fromY > 4) {//过了河
    if () {
    }
} else {//没过河
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 快速小测试:如何重写下面的语句?要求不使用条件判断语句交换两个常量的值。 if (x == a) x= b; el...
    Colay阅读 907评论 0 0
  • 1.走棋和吃子 ·走棋 对局时,由执红棋一方先行,以后双方轮流各走一着,直到分出胜负或走成和局为止。走棋一方将棋子...
    上下笔尖子阅读 634评论 0 5
  • LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVI...
    VIFamily阅读 808评论 0 3
  • 高大爷和她男人跑了,她打算回老家做个英语老师 。任我努力的挤着泪水,吞着委屈,她头也不回的走了,没有些许留恋~ 平...
    马大花阅读 277评论 0 0
  • 下午孩子一到家就给我电话,怕妈妈担心,感赏懂得体谅妈妈的乖巧孩子。 孩子一边吃饭,一边跟我分享...
    记得祝福阅读 227评论 0 6