五子棋--java实现

import java.util.Scanner;

public class WZQ {
    static String[][] qp = new String[15][15]; //{{null,null},{null,null}}
    static String white = "☆";
    static String black = "★";
    static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
    static String line = "十";
    static boolean flag = true;
    static Scanner sca =new Scanner(System.in);

    public static void main(String[] args) {
        WZQ.initqp();
        WZQ.printqp();
        WZQ.start();
    }
    //开始下棋
    public static void start(){
        while(true){
            if(flag==true){
                System.out.println("请黑棋落子");
                int x =sca.nextInt()-1;
                int y= sca.nextInt()-1;
                boolean res=check(x,y);
                if(res){
                    qp[y][x]= black;
                    WZQ.printqp();
                    boolean win =WZQ.iswin(y,x,black);
                    if(win){
                        System.out.println("黑棋胜");
                        break;
                    }else{
                    flag =false;
                    }
                    }else{
                    System.out.println("落子有误,请黑棋重新落子");
                }
            }else{
                System.out.println("请白棋落子");
                int x =sca.nextInt()-1;
                int y= sca.nextInt()-1;
                boolean res=check(x,y);
                if(res){
                    qp[y][x]= white;
                    WZQ.printqp();
                    boolean win = WZQ.iswin(y,x,white);
                    if(win){
                        System.out.println("白棋胜");
                        break;
                    }else{
                    flag = true;
                    }
                }else{
                    System.out.println("落子有误,请白棋重新落子");
                }
            }
        }
    }
    //判断输赢
    public static boolean iswin(int y,int x,String qz){
        int spsum=1;//水平计数
        int szsum =1;//竖直计数
        //水平查找
        for(int lx=x-1;lx>=0;lx--){  //水平向左查
            if(qp[y][lx].equals(qz)){
                spsum++;
            }else{
                break;
            }
        }
        if(spsum>=5){
            return true;
        }else{
            for(int rx=x+1;rx< qp.length-1;rx++){  //水平向右查
                if(qp[y][rx].equals(qz)){
                    spsum++;
                }else{
                    break;
                }
            }
            if(spsum>=5){
                return true;
            }
        }
        //竖直查找
        for(int uy=y-1;uy>=0;uy--){  //竖直向上查
            if(qp[uy][x].equals(qz)){
                szsum++;
            }else{
                break;
            }
        }
        if(szsum>=5){
            return true;
        }else{
            for(int dy=y+1;dy< qp.length-1;dy++){  //垂直向下查找
                if(qp[dy][x].equals(qz)){
                    szsum++;
                }else{
                    break;
                }
            }
            if(szsum>=5){
                return true;
            }
        }

        int lusum=1;//西北--东南方向
        for(int lx=x-1,uy=y-1;lx>=0&&uy>=0;lx--,uy--) {
            if (qp[uy][lx].equals(qz)) {
                lusum++;
            } else {
                break;
            }
        }
            if(lusum>=5){
                return true;
            }else{
                for(int rx=x+1,dy=y+1;rx< qp.length-1&&dy< qp.length-1;rx++,dy++){
                    if(qp[dy][rx].equals(qz)){
                        lusum++;
                    }else{
                        break;
                    }
                    if(lusum>=5){
                        return true;
                    }
            }
        }

            int ulsum=1;//东北--西南方向
            for(int xr=x+1,yu=y-1;xr<=qp.length-1&&yu>=0;xr++,yu--) {
                if (qp[yu][xr].equals(qz)) {
                    ulsum++;
                } else {
                    break;
                }
                if (ulsum >= 5) {
                    return true;
                } else {
                    for (int xl =x-1,yd=y+1;xl>=0&&yd<qp.length-1;xl--, yd++) {
                        if (qp[yd][xl].equals(qz)) {
                            ulsum++;
                        } else {
                            break;
                        }
                        if (ulsum >= 5) {
                            return true;
                        }
                    }
                }
            }


return false;
    }
    //判断是否越界与重复
    public static boolean check(int x,int y){
        if(x<0||x>=qp.length-1||y<0||y>=qp.length-1){
            return false;//不可落子
        }
        if(!qp[y][x].equals(line)){
            return false;//false表示不可落子
        }
        return true;
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值