五子棋代码(Java)

1. `startGame()` 方法用于初始化棋盘并打印初始状态。
2. `init()` 方法用于初始化棋盘,将棋盘数组中的所有元素都设置为字符串 "十"。
3. `print()` 方法用于打印棋盘的当前状态,其中使用了一个包含棋盘列标号的字符串数组 `num`。
4. `play()` 方法实现了黑白子交替下棋的逻辑。它首先要求玩家输入下棋的行和列,然后检查输入的位置是否合法,如果合法则在该位置下子,并打印当前棋盘状态。接着检查是否有玩家获胜,如果有则返回 `false`,游戏结束。如果没有玩家获胜,则交换玩家,继续进行下一轮。
5. `check()` 方法用于检查下棋的位置是否合法,如果越界或者下在已有棋子的位置,则返回 `true`。
6. `over()` 方法用于判断游戏是否结束的条件。它检查横向、纵向、左上右下、左下右上四个方向上是否有五子连珠,如果有则返回 `false`,游戏结束。

这段代码实现了一个简单的五子棋游戏,通过命令行交互的方式进行游戏。玩家可以输入行和列来下子,程序会判断下子的合法性并判断是否有玩家获胜。

代码如下

package Game;

import java.util.Scanner;

public class wzq {
    public static void main(String[] args) {
        startGame();
        System.out.println("游戏开始");
        while(true){
            if(!play()){
                break;
            }
        }
        System.out.println("游戏结束");
    }
    		/*
		  1.提供一个启动五子棋游戏的方法
		      初始化棋盘方法
		      打印棋盘方法
		  2.开始下棋,黑白棋交替下棋

		  3.判断坐标是否合法,是否重复

		  4.判断输赢
		*/

    static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    static String line = "十";

    //启动五子棋游戏
    public static void startGame(){
        init();
        print();
    }

    //初始化棋盘
    public static void init(){
        for(int i=0;i< qp.length;i++){
            for(int j=0;j< qp.length;j++){
                qp[i][j]="十";
            }
        }
    }

    //打印棋盘
    public static void print(){
        for(int i=0;i< qp.length;i++){
            for(int j=0;j< qp.length-1;j++){
                if(i==qp.length-1){
                    qp[i][j]=num[j];
                }
                System.out.print(qp[i][j]);
            }
                System.out.print(i+1+".");
            System.out.println();
        }
    }

    //黑白子交替下棋
    public static  boolean play(){
        int r,l;
        Scanner scanner=new Scanner(System.in);
        do{
            System.out.println("黑子下");
            System.out.println("输入行");
            r= scanner.nextInt()-1;
            System.out.println("输入列");
            l= scanner.nextInt()-1;
            if(check(r,l)){
                System.out.println("下棋位置重复或越界");
                continue;
            }
            qp[r][l]=black;
            print();
            break;
        }while(true);
        if(!over(r,l)){
            System.out.println("黑棋赢了");
            return false;
        }
        do{
            System.out.println("白子下");
            System.out.println("输入行");
            r= scanner.nextInt()-1;
            System.out.println("输入列");
            l= scanner.nextInt()-1;
            if(check(r,l)){
                System.out.println("下棋位置重复或越界");
                continue;
            }
            qp[r][l]=white;
            print();
            break;
        }while(true);
        if(!over(r,l)){
            System.out.println("白棋赢了");
            return false;
        }
        else
        return true;
    }

    //判断下棋的位置是否有误
    public static boolean check(int r,int l){
        if(r<0||l<0||r> qp.length-1||l> qp[r].length-1){
            return true;
        }
        else if(qp[r][l]!=line){
            return true;
        }
        else
        return false;
    }

    //判断游戏是否结束的条件
    public static boolean over(int r,int l){
        int wide,straight,left1,left2,rigth1,rigth2;

        //横向
        int piece=1;
        for(wide=l-1;wide>=0;wide--){
            if(qp[r][wide]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        for(wide=l+1;wide<=qp[r].length;wide++){
            if(qp[r][wide]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        if(piece==5){
            return false;
        }

        //纵向
        piece=1;
        for(straight=r-1;straight>=0;straight--){
            if(qp[straight][l]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        for(straight=r+1;straight<qp.length;straight++){
            if(qp[straight][l]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        if(piece==5){
            return false;
        }

        //左上右下
        piece=1;
        rigth1=l;
        for(left1=r-1;left1>=0;left1--){
            if(rigth1>0){
                rigth1--;
            }
            if(qp[left1][rigth1]==qp[r][l]){
                piece++;
                continue;
            }
            rigth1=l;
            break;
        }
        for(left1=r+1;left1<=qp.length-1;left1++){
            if(rigth1<qp[r].length-1){
                rigth1++;
            }
            if(qp[left1][rigth1]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        if(piece==5){
            return false;
        }

        //左下右上
        piece=1;
        rigth2=l;
        for(left2=r-1;left2>=0;left2--){
            if(rigth2<qp[r].length){
                rigth2++;
            }
            if(qp[left2][rigth2]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        rigth2=l;
        for(left2=r+1;left2<= qp.length;left2++)
        {
            if(rigth2>0){
                rigth2++;
            }
            if(qp[left2][rigth2]==qp[r][l]){
                piece++;
                continue;
            }
            break;
        }
        if(piece==5){
            return false;
        }
        return true;
    }
}

由于背景原因,白色实心的是黑棋,黑色空心的是白棋

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
A: 以下是一个简单的五子棋代码示例,使用Java语言编写: import java.util.Scanner; public class FiveChess { public static final int BOARD_SIZE = 15; // 棋盘大小 public static final int EMPTY = 0; // 空棋子 public static final int BLACK = 1; // 黑棋子 public static final int WHITE = 2; // 白棋子 public static void main(String[] args) { int[][] board = new int[BOARD_SIZE][BOARD_SIZE]; // 初始化棋盘 Scanner scanner = new Scanner(System.in); int player = BLACK; // 黑方先手 int row, col; while (true) { System.out.print("Player " + player + " input row and col: "); row = scanner.nextInt(); col = scanner.nextInt(); if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE) { // 越界检查 System.out.println("Invalid input. Please try again."); continue; } if (board[row][col] != EMPTY) { // 该位置已有棋子 System.out.println("This position has been taken. Please try again."); continue; } board[row][col] = player; // 下子 if (win(board, row, col)) { // 判断胜利 System.out.println("Player " + player + " wins!"); break; } player = (player == BLACK ? WHITE : BLACK); // 轮换玩家 } } // 判断是否胜利 public static boolean win(int[][] board, int row, int col) { int count = 1; // 记录连续棋子数量 int color = board[row][col]; int i, j; // 水平方向检查 for (i = col - 1; i >= 0 && board[row][i] == color; i--) { count++; } for (i = col + 1; i < BOARD_SIZE && board[row][i] == color; i++) { count++; } if (count >= 5) { return true; } // 垂直方向检查 count = 1; for (i = row - 1; i >= 0 && board[i][col] == color; i--) { count++; } for (i = row + 1; i < BOARD_SIZE && board[i][col] == color; i++) { count++; } if (count >= 5) { return true; } // 左上到右下方向检查 count = 1; for (i = row - 1, j = col - 1; i >= 0 && j >= 0 && board[i][j] == color; i--, j--) { count++; } for (i = row + 1, j = col + 1; i < BOARD_SIZE && j < BOARD_SIZE && board[i][j] == color; i++, j++) { count++; } if (count >= 5) { return true; } // 右上到左下方向检查 count = 1; for (i = row - 1, j = col + 1; i >= 0 && j < BOARD_SIZE && board[i][j] == color; i--, j++) { count++; } for (i = row + 1, j = col - 1; i < BOARD_SIZE && j >= 0 && board[i][j] == color; i++, j--) { count++; } if (count >= 5) { return true; } return false; } } 以上代码实现了基本的五子棋游戏逻辑,包括: - 棋盘的初始化和打印; - 玩家的输入和下子; - 胜利状态的判断。 需要注意的是,该示例代码仅实现了最基本的检查,还存在一些需要改进的地方,例如: - 没有实现禁手规则; - 没有考虑平局的情况; - 没有实现人机对战或者网络对战等高级功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值