五子棋代码(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;
    }
}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值