美文网首页
Android象棋游戏开发之--游戏规则

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

作者: IT枫 | 来源:发表于2016-04-12 21:43 被阅读419次

源码下载

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

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


棋盘二维数组表示图

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

黑方九宫格

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

黑方九宫格

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

黑象移动规则图

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

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

//二维数组
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 {//没过河
}

相关文章

网友评论

      本文标题:Android象棋游戏开发之--游戏规则

      本文链接:https://www.haomeiwen.com/subject/psjwlttx.html