Java双人五子棋

通过手动输入坐标落子。


package Fivespot;

public class ChessBoard {
    char [][] board;
    int n;
    
    ChessBoard(int n){
        this.n = n;
        board = new char[n][n];
    }
    public void setBoard() {
        for(int i=0;i<n;i++) {
            for(int j=0;j<n;j++) {
                board[i][j] = '+';
            }
        }
    }
    public void setBlack(int x,int y) {
        board[x][y] = '●';
    }
    public void setWhite(int x,int y) {
        board[x][y] = '○';
    }
    
    public void Print() {
        System.out.println("ok");
        for(int i=0;i<n;i++) {
            for(int j=0;j<n;j++) {
                System.out.print(board[i][j]);
                if(j==n-1)
                    System.out.println();
            }
        }
    }
    public boolean Judge(int x, int y) {
        int wl = 0;//白子水平方向上五连贯判断值
        int wh = 0;//白子竖直方向上五连贯判断值
        int wld = 0;//白子主对角线上五连贯判断值
        int wcd = 0;//白子副对角线上五连贯判断值
        
        int bl = 0;//黑子水平方向上五连贯判断值
        int bh = 0;//黑子竖直方向上五连贯判断值
        int bld = 0;//黑子主对角线上五连贯判断值
        int bcd = 0;//黑子副对角线上五连贯判断值
        
        int lnx = x;//主对角线
        int lny = y;//主对角线
        int cnx = x;//副对角线
        int cny = y;//副对角线
        
        if(board[x][y]=='○') {//判白子;
//判断水平和竖直方向上的棋子;
            for(int i=0;i<n;i++) {
                if(i+1>=n) break;
                if(board[x][i]=='○'&&board[x][i+1]=='○') {//水平
                    wl = wl+1;
                    if(wl==4) break;
                }
                if(board[i][y]=='○'&&board[i+1][y]=='○') {//竖直
                    wh = wh+1;
                    if(wh==4) break;
                }
            }
//判断主对角线上的棋子
            
            if(x+y<=2*x) {
                if(x+y<n) {
                    while(lny!=0) {
                        lnx = lnx-1;
                        lny = lny-1;
                        cnx = cnx+1;
                    }
                    cny = cnx;
                    cnx = 0;
                    for(;lnx<n;lnx++) {
                        if(lnx+1>=n||lny+1>=n) break;
                        if(board[lnx][lny]=='○'&&board[lnx+1][lny+1]=='○') {
                            wld = wld+1;
                        }
                        lny = lny+1;
                    }
                    for(;cny>=0;cny--) {
                        if(cnx+1>=n||cny-1<0) break;
                        if(board[cnx][cny]=='○'&&board[cnx+1][cny-1]=='○') {
                            wcd = wcd+1;
                        }
                        cnx = cnx+1;
                    }
            }
            else {
                while(lny!=0) {
                    lnx = lnx-1;
                    lny = lny-1;
                }
                while(cnx!=n-1) {
                    cnx = cnx+1;
                    cny = cny-1;
                }
                for(;lnx<n;lnx++) {
                    if(lnx+1>=n||lny+1>=n) break;
                    if(board[lnx][lny]=='○'&&board[lnx+1][lny+1]=='○') {
                        wld = wld+1;
                    }
                    lny=lny+1;
                }
                for(;cny<n;cny++) {
                    if(cnx-1<0||cny+1>=n) break;
                    if(board[cnx][cny]=='○'&&board[cnx-1][cny+1]=='○') {
                        wcd = wcd+1;
                    }
                    cnx=cnx-1;
                }
            }
            
            }    
        }
        if(board[x][y]=='●') {//判黑子;
//判断水平和竖直方向上的棋子;
            for(int i=0;i<n;i++) {
                if(i+1>=n) break;
                if(board[x][i]=='●'&&board[x][i+1]=='●') {//水平
                    bl = bl+1;
                    if(bl==4) break;
                }
                if(board[i][y]=='●'&&board[i+1][y]=='●') {//竖直
                    bh = bh+1;
                }
            }
//判断主对角线上和副对角线上的棋子
            if(x+y<=2*x) {
                if(x+y<n) {
                    while(lny!=0) {
                        lnx = lnx-1;
                        lny = lny-1;
                        cnx = cnx+1;
                        cny = cny-1;
                    }
                    for(;lnx<n;lnx++) {
                        if(lnx+1>=n||lny+1>=n) break;
                        if(board[lnx][lny]=='●'&&board[lnx+1][lny+1]=='●') {
                            bld = bld+1;
                        }
                        lny = lny+1;
                    }
                    for(;cnx>=0;cnx--) {
                        if(cnx-1<0||cny+1>=n) break;
                        if(board[cnx][cny]=='●'&&board[cnx-1][cny+1]=='●') {
                            bcd = bcd+1;
                        }
                        cny = cny+1;
                    }
                }
                else {
                    while(lny!=0) {
                        lnx = lnx-1;
                        lny = lny-1;
                    }
                    while(cnx!=n-1) {
                        cnx = cnx+1;
                        cny = cny-1;
                    }
                    for(;lnx<n;lnx++) {
                        if(lnx+1>=n||lny+1>=n) break;
                        if(board[lnx][lny]=='●'&&board[lnx+1][lny+1]=='●') {
                            bld = bld+1;
                        }
                        lny=lny+1;
                    }
                    for(;cny<n;cny++) {
                        if(cnx-1<0||cny+1>=n)break;
                        if(board[cnx][cny]=='●'&&board[cnx-1][cny+1]=='●') {
                            bcd = bcd+1;
                        }
                        cnx=cnx-1;
                    }
                }
                
                
            }
            else {
                if(x+y<n) {
                    while(lnx!=0) {
                        lnx = lnx-1;
                        lny = lny-1;
                        cnx = cnx-1;
                        cny = cny+1;
                    }
                    for(;lny<n;lny++) {
                        if(board[lnx][lny]=='●'&&board[lnx+1][lny+1]=='●') {
                            bld = bld+1;
                        }
                        lnx = lnx+1;
                    }
                    for(;cny>=0;cny--) {
                        if(board[cnx][cny]=='●'&&board[cnx+1][cny-1]=='●') {
                            bcd = bcd+1;
                        }
                        cnx = cnx+1;
                    }
                }
                else {
                    while(lnx!=0) {
                        lnx = lnx-1;
                        lny = lny-1;
                    }
                    while(cnx!=n-1) {
                        cnx = cnx+1;
                        cny = cny-1;
                    }
                    for(;lny<n;lny++) {
                        if(board[lnx][lny]=='●'&&board[lnx+1][lny+1]=='●') {
                            bld = bld+1;
                        }
                        lnx = lnx+1;
                    }
                    for(;cny<n;cny++) {
                        if(board[cnx][cny]=='●'&&board[cnx-1][cny+1]=='●') {
                            bcd = bcd+1;
                        }
                        cnx = cnx+1;
                    }
                }
                
            }
        }
            
//        System.out.println(wl+" "+wh+" "+wld+" "+wcd);
        if((wl>=4)||(wh>=4)||(wld>=4)||(wcd>=4)) {
            System.out.println("白胜");
            return true;
        }
        else if((bl>=4)||(bh>=4)||(bld>=4)||(bcd>=4)) {
            System.out.println("黑胜");
            return true;
        }
        else
            return false;
    }
}
 


实现package Fivespot;
import java.util.*;
public class Realized {
    public static void main(String args[]) {
        ChessBoard chess = new ChessBoard(9);
        chess.setBoard();
        chess.Print();
        int i=1;//i为0时白子先,i为1时,黑子先
        while(true) {
            System.out.println("输入您的落棋坐标:");
            int x = new Scanner(System.in).nextInt();
            int y = new Scanner(System.in).nextInt();
//            System.out.println(x+"ok"+y);
            if(x==-1&&y==-1)
                break;
            i = i+1;
            if(i%2!=0) {
                chess.setWhite(x, y);
            }
            else{
                chess.setBlack(x, y);
            }
            chess.Print();
            if(i>=9) {
//                System.out.println("iok");
                if(chess.Judge(x, y)) {
//                    System.out.println("Jok");
                    break;
                }
            }
        }
    }
}
 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个用Java编写的双人五子棋游戏的示例代码: ```java import java.util.Scanner; public class GomokuGame { private char[][] board; private char currentPlayer; private boolean isGameOver; public GomokuGame() { board = new char[15][15]; currentPlayer = 'X'; isGameOver = false; initializeBoard(); } private void initializeBoard() { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { board[i][j] = '-'; } } } public void playGame() { Scanner scanner = new Scanner(System.in); while (!isGameOver) { System.out.println("Player " + currentPlayer + ", enter your move (row and column):"); int row = scanner.nextInt(); int col = scanner.nextInt(); if (isValidMove(row, col)) { makeMove(row, col); printBoard(); checkWin(row, col); switchPlayer(); } else { System.out.println("Invalid move. Try again."); } } scanner.close(); } private boolean isValidMove(int row, int col) { return row >= 0 && row < 15 && col >= 0 && col < 15 && board[row][col] == '-'; } private void makeMove(int row, int col) { board[row][col] = currentPlayer; } private void printBoard() { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { System.out.print(board[i][j] + " "); } System.out.println(); } } private void checkWin(int row, int col) { if (checkHorizontal(row) || checkVertical(col) || checkDiagonal(row, col)) { System.out.println("Player " + currentPlayer + " wins!"); isGameOver = true; } } private boolean checkHorizontal(int row) { int count = 0; for (int i = 0; i < 15; i++) { if (board[row][i] == currentPlayer) { count++; if (count == 5) { return true; } } else { count = 0; } } return false; } private boolean checkVertical(int col) { int count = 0; for (int i = 0; i < 15; i++) { if (board[i][col] == currentPlayer) { count++; if (count == 5) { return true; } } else { count = 0; } } return false; } private boolean checkDiagonal(int row, int col) { int count = 0; int i = row; int j = col; while (i >= 0 && j >= 0 && board[i][j] == currentPlayer) { count++; i--; j--; } i = row + 1; j = col + 1; while (i < 15 && j < 15 && board[i][j] == currentPlayer) { count++; i++; j++; } if (count >= 5) { return true; } count = 0; i = row; j = col; while (i >= 0 && j < 15 && board[i][j] == currentPlayer) { count++; i--; j++; } i = row + 1; j = col - 1; while (i < 15 && j >= 0 && board[i][j] == currentPlayer) { count++; i++; j--; } return count >= 5; } private void switchPlayer() { currentPlayer = currentPlayer == 'X' ? 'O' : 'X'; } public static void main(String[] args) { GomokuGame game = new GomokuGame(); game.playGame(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值