longchao9527 2014-03-16 02:51 采纳率: 0%
浏览 2215

小弟不才,求教给位java大神,五子棋输赢判断问题。。

判断西北斜方向的时候可以准确判断,但是反过来北西方向就不行了
public boolean isWon(int posX,int posY){
int sameCount=0;
int startX=0;
int startY=0;
int endX=BOARD_SIZE-1;
int endY=endX;
int tmp=0;

    tmp=posX-4;
    startX=tmp<0?0:tmp;

    tmp=posY-4;
    startY=tmp<0?0:tmp;

    tmp=posX+4;
    endX=tmp>BOARD_SIZE-1?BOARD_SIZE-1:tmp;

    tmp=posY+4;
    endY=tmp>BOARD_SIZE-1?BOARD_SIZE-1:tmp;

    //纵向扫描黑子
    for(int i=startY;i<endY;i++){
        if(board[posX][i]=="●"&&board[posX][i+1]=="●"){
            sameCount++;
        }else if(sameCount>=4){
            System.out.println("黑子赢!");
            sameCount=0;
            return true;
        }else if (board[posX][i]=="●"&&board[posX][i+1]!="●") {
            sameCount=0;
        }
    }

    //横向扫描黑子
            for(int i=startX;i<endX;i++){
                if(board[i][posY]=="●"&&board[i+1][posY]=="●"){
                    sameCount++;
                }else if(sameCount>=4){
                    System.out.println("黑子赢!");
                    sameCount=0;
                    return true;
                }else if (board[i][posY]=="●"&&board[i+1][posY]!="●") {
                    sameCount=0;
                }
            }

    //斜方向扫描黑子

            for(int i=startX,j=startY;i<endX&&j<endY;i++,j++){
                if(board[i][j]=="●"&&board[i+1][j+1]=="●"){
                    sameCount++;
                }else if(sameCount>=4){
                    System.out.println("黑子赢!");
                    sameCount=0;
                    return true;
                }else if (board[i][j]=="●"&&board[i+1][j+1]!="●") {
                    sameCount=0;
                }
            }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 21:01
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    public class CheckWin {
    
        private static final int BOARD_SIZE = 8; 
    
        /**
         * 判断是否为胜利状态
         * @param posX 某一行的x坐标
         * @param posY 某一列的y坐标
         */
        public static void checkWin(int posX, int posY) {
            int startRow = 0;
            int endRow = BOARD_SIZE - 1;
            int startCol = 0;
            int endCol = BOARD_SIZE - 1;
    
            // 纵向检查
            while(startRow <= endRow && startCol >= endCol) {
                if(posX == startRow && posY == startCol || 
                   posX == startRow && posY == endCol || 
                   posX == endRow && posY == startCol ||
                   posX == endRow && posY == endCol) {
                    if(board[posX][startCol].equals(board[posX][endCol]) &&
                       board[startRow][posX].equals(board[endRow][posX])) {
                        System.out.println("黑子赢!");
                        return;
                    }
                }
                startRow++;
                startCol--;
            }
    
            // 横向检查
            while(startCol >= endCol && startRow >= endRow) {
                if(posX == startCol && posY == startRow || 
                   posX == startCol && posY == endRow || 
                   posX == endCol && posY == startRow ||
                   posX == endCol && posY == endRow) {
                    if(board[posX][startCol].equals(board[posX][endCol]) &&
                       board[startCol][posX].equals(board[startCol][endCol])) {
                        System.out.println("黑子赢!");
                        return;
                    }
                }
                startCol--;
                startRow++;
            }
    
            // 斜向检查
            while(startCol < endCol && startRow > endRow) {
                if(posX == startCol && posY == startRow || 
                   posX == startCol && posY == endRow || 
                   posX == endCol && posY == startRow ||
                   posX == endCol && posY == endRow) {
                    if(board[posX][startCol].equals(board[posX][endCol]) &&
                       board[startCol][posX].equals(board[startCol][endCol])) {
                        System.out.println("黑子赢!");
                        return;
                    }
                }
                startCol++;
                startRow--;
            }
        }
    
        public static void main(String[] args) {
            String[][] board = new String[BOARD_SIZE][BOARD_SIZE];
            board[0][0] = "●";
            board[0][1] = "●";
            board[0][2] = "●";
            board[0][3] = "●";
            board[0][4] = "●";
            board[0][5] = "●";
            board[0][6] = "●";
            board[0][7] = "●";
    
            board[1][0] = "●";
            board[1][1] = "●";
            board[1][2] = "●";
            board[1][3] = "●";
            board[1][4] = "●";
            board[1][5] = "●";
            board[1][6] = "●";
            board[1][7] = "●";
    
            board[2][0] = "●";
            board[2][1] = "●";
            board[2][2] = "●";
            board[2][3] = "●";
            board[2][4] = "●";
            board[2][5] = "●";
            board[2][6] = "●";
            board[2][7] = "●";
    
            board[3][0] = "●";
            board[3][1] = "●";
            board[3][2] = "●";
            board[3][3] = "●";
            board[3][4] = "●";
            board[3][5] = "●";
            board[3][6] = "●";
            board[3][7] = "●";
    
            board[4][0] = "●";
            board[4][1] = "●";
            board[4][2] = "●";
            board[4][3] = "●";
            board[4][4] = "●";
            board[4][5] = "●";
            board[4][6] = "●";
            board[4][7] = "●";
    
            board[5][0] = "●";
            board[5][1] = "●";
            board[5][2] = "●";
            board[5][3] = "●";
            board[5][4] = "●";
            board[5][5] = "●";
            board[5][6] = "●";
            board[5][7] = "●";
    
            board[6][0] = "●";
            board[6][1] = "●";
            board[6][2] = "●";
            board[6][3] = "●";
            board[6][4] = "●";
            board[6][5] = "●";
            board[6][6] = "●";
            board[6][7] = "●";
    
            board[7][0] = "●";
            board[7][1] = "●";
            board[7][2] = "●";
            board[7][3] = "●";
            board[7][4] = "●";
            board[7][5] = "●";
            board[7][6] = "●";
            board[7][7] = "●";
    
            checkWin(0,0);
            checkWin(0,7);
            checkWin(7,0);
            checkWin(7,7);
    
            for(int i = 0; i < BOARD_SIZE; i++) {
                for(int j = 0; j < BOARD_SIZE; j++) {
                    System.out.print(board[i][j]);
                }
                System.out.println();
            }
        }
    }
    
    评论

报告相同问题?