五子棋游戏的代码实现

文章目录

    • 需求
    • 思路算法
    • 代码实现
    • 运行结果

需求

用二维数组,实现五子棋功能:

在控制台通过Scanner输入黑白棋坐标),使用实心五角星和空心五角星表示黑白棋子.

五子棋游戏的代码实现_第1张图片

输入后重新输出棋盘如下图:

五子棋游戏的代码实现_第2张图片

黑白棋依次重复输入下棋
当任意一方构成五子相连时提示胜利,结束游戏.


思路算法

 使用二维数组定义棋盘 注意数组越界

    //开始游戏
    startGame();
    //判断输赢
    isWin() 
               //横向
               qp[i][j]==black&&qp[i][j+1]==black&&qp[i][j+2]==black&&qp[i][j+3]==black&&qp[i][j+4]==black
               //纵向
               qp[i][j]==black&&qp[i+1][j]==black&&qp[i+2][j]==black&&qp[i+3][j]==black&&qp[i+4][j]==black
               //斜向
               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
    //下棋 判断坐标
    check()
              //无效位置
              //棋子重复
    //初始化棋盘
    WuZiQi.initQp(count);
    //遍历输出
    WuZiQi.printQp();
    //重复上述步骤

代码实现

import java.util.Scanner;

public class WuZiQi {
     


     static char[] num = {
     '⒈','⒉','⒊','⒋','⒌','⒍','⒎','⒏','⒐','⒑','⒒','⒓','⒔','⒕','⒖'};
     static char black = '★';
     static char white = '☆';
     static char line = '十';
     static char[][] qp;//全局共享
     static Scanner scanner = new Scanner(System.in);
     static int count=15;
     static boolean flag = true;//true-黑棋  false-白棋
    public static void main(String[] args) {
     
        //初始化棋盘
        WuZiQi.initQp(count);
        //打印输出
        WuZiQi.printQp();
        //开始游戏
        startGame();
    }

    /*
      开始游戏
     */
    public static void startGame() {
     
             while(true){
     
                 if(flag){
     //黑棋下
                     System.out.println("黑棋下");
                      boolean res =   check();
                      if(!res){
     //棋子无效,跳过 重新下棋
                          continue;
                      }
                     printQp();
                     //判断输赢
                       if(isWin()){
     
                           System.out.println("黑棋胜");
                           break;
                       }

                     flag=false;
                 }else{
     //白棋下
                     System.out.println("白棋下");
                     boolean res =   check();
                     if(!res){
     //棋子无效,跳过 重新下棋
                         continue;
                     }
                     printQp();
                     flag= true;
                 }
             }
    }

    //判断输赢
    private static boolean isWin() {
     
          if(flag){
     
              for (int i = 0; i < qp.length; i++) {
     
                  for (int j = 0; j < qp[i].length; j++) {
     
                      //横向
                       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 true;
                       }
                       //纵向
                      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){
     
                          return true;
                      }
                      //斜向
                      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 true;
                      }
                  }
              }
              return false;
          }else{
     
              return false;
          }
    }

    //下棋 判断坐标
    public static boolean  check(){
     
        int c1 = scanner.nextInt();
        int c2 = scanner.nextInt();
        if((c1<0||c1>count-1)&&(c2<0||c2>count-1)){
     
            System.out.println("无效位置");
            return false;
        }
        if(qp[c1-1][c2-1]==black||qp[c1-1][c2-1]==white){
     
            System.out.println("棋子重复了");
            return false;
        }
         qp[c1-1][c2-1] = flag?black:white;
        return true;
    }

    //初始化棋盘
    public static void initQp(int count){
     
        qp=new char[count][count];
        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][count-1] = num[i];
                }

                if(i==count-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();
         }
     }

运行结果

当下到重复位置时,会显示重复了

五子棋游戏的代码实现_第3张图片

五子棋游戏的代码实现_第4张图片
直到五颗连成一条线时,显示*棋胜

五子棋游戏的代码实现_第5张图片

你可能感兴趣的:(java,java)