用java实现五子棋

五子棋要求如下

1.使用二维数组存储五子棋棋盘
如下图 

 
2.在控制台通过Scanner输入黑白棋坐标(例如:1,2  2,1格式 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子.
如下图:
 

 
白棋输入后如下图

 


 
黑白棋依次重复输入下棋
3.判断棋子是否越界,棋子是否重复,判断输赢

解题思路

1.打印棋盘

利用二维数组,和for循环,将每个位置初始化,到15行和列就打印数字,然后打印棋盘

2.黑、白子下棋

创建两个方法,一个控制白子下棋,一个控制黑子下棋。创建横纵,坐标,将黑白棋打印在棋盘上

3.判断是否重复和超界

判断所下黑白棋子是否已经是黑色和白色进行判断,

判断所下黑白棋子横纵坐标是否超过15个位置

4.判断输赢

第一种方法:判断每个位置是否有相邻的5个同样颜色的棋子。

第二种方法:判断所下棋子位置是否有相邻的5个同色棋子。

代码如下:
import java.util.Scanner;

public class demo2 {
    //在全局定义黑白棋子和棋盘
    static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    static String line = "十";
    static Scanner scanner=new Scanner(System.in);
    //定义下棋所要用的行和列
    static int i,j;
    //用来判断黑子下棋或白子下棋
    static int flag=0;


    /**
     * 开始下棋
     * */
    public static void start() {
        //初始化棋盘
       inti();
       //开始打印棋盘
       print();
       //判断是否胜利如果没有胜利则继续动子;
       while(true)
       {
           if(jugewin()==1)
           {
               System.out.println("白子赢了");
               start();
               return;
           }
           if(jugewin()==0)
           {
               System.out.println("黑子赢了");
               start();
               return;
           }
           if(flag==0)
           {
               setBlack();

           }
           else if(flag==1)
               {
                   setWhite();
               }
       }
    }
    /**
     * 初始化棋盘
     * */
    public static void inti() {
          for (int i=0;i< qp.length;i++)
          {
              for (int j=0;j< qp[i].length;j++)
              {
                  if(j== qp.length-1)
                  {
                      qp[i][j]=num[i];
                  }
                  else if(i== qp.length-1)
                  {
                      qp[i][j]=num[j];
                  }
                  else {
                      qp[i][j]=line;
                  }
              }
          }

    }
    /**
     * 打印棋盘
     * */
    public static void print() {
        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();
        }
    }
    /**
     * 黑子开始下棋
     * */
    public static void setBlack()
    {
        System.out.println("请黑子下");
        //黑子的行和列
        i = scanner.nextInt();
        j = scanner.nextInt();
        //黑棋限制边界
        if(i>=15||j>=15)
        {
            setBlack();
            return;
        }
        //默认该白子下棋
        flag=1;
        //判断是否重复,重复的话黑子重新下棋
        if(jugeRepeat()==true)
        {
            flag=0;
        }
        qp[i-1][j-1] =black;
        //打印棋盘
        print();
    }
    /**
     * 白子开始下棋
     * */
    public static void setWhite()
    {
        System.out.println("请白子下");
        //白子的行和列
        i = scanner.nextInt();
        j = scanner.nextInt();
        //白子是否超出界限
        if(i>=15||j>=15)
        {
            setWhite();
            return;
        }
        flag=0;
        //判断是否重复
        if(jugeRepeat()==true)
        {
            flag=1;
        }
        qp[i-1][j-1]=white;
        //打印棋盘
        print();
    }
/**
 * 判断是否重复的方法
 * */
    public  static boolean jugeRepeat() {
       //如果要下的棋子所在的位置已经是黑子或白子
        if (qp[i-1][j-1] == white || qp[i-1][j-1] == black) {
                    System.out.println("请重下");
                    return true;
                }
        return false;
        }
/**
 * 判断是否胜利
 * */
    public static int jugewin()
    {
        //判断每个位置是否达到胜利条件
        for (int i=0;i< qp.length;i++)
        {
            for (int j=0;j< qp[i].length;j++)
            {
                if (qp[i][j]==black&&qp[i+1][j]==black&&qp[i+2][j]==black&&qp[i+3][j]==black&&qp[i+4][j]==black)
                {
                    //黑子胜利代表0
                    return 0;
                }
                else if(qp[i][j]==black&&qp[i][j+1]==black&&qp[i][j+2]==black&&qp[i][j+3]==black&&qp[i][j+4]==black)
                {
                    return 0;
                }
                else if(qp[i][j]==black&&qp[i+1][j+1]==black&&qp[i+2][j+2]==black&&qp[i+3][j+3]==black&&qp[i+4][j+4]==black)
                {
                    return 0;
                }
                else if(qp[i][j]==white&&qp[i+1][j]==white&&qp[i+2][j]==white&&qp[i+3][j]==white&&qp[i+4][j]==white)
                {
                    //白子胜利代表1;
                    return 1;
                }
                else if(qp[i][j]==white&&qp[i][j+1]==white&&qp[i][j+2]==white&&qp[i][j+3]==white&&qp[i][j+4]==white)
                {
                    return 1;
                }
                else if(qp[i][j]==white&&qp[i+1][j+1]==white&&qp[i+2][j+2]==white&&qp[i+3][j+3]==white&&qp[i+4][j+4]==white)
                {
                    return 1;
                }
            }
        }
        return 3;
    }
    public static void main(String[] args) {
           start();
    }
}
 测试结果:

1.黑子下

2.白子下

 

 3.黑子赢

4.白子重复

5. 白子超界

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值