用Java完成(星星)五子棋

1.五子棋要求

1.提供一个启动五子棋游戏的方法
    初始化棋盘方法
    打印棋盘方法
2.开始下棋,黑白棋交替下棋

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

4.判断输赢
  static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    static String line = "十";
     static boolean flag = true;
    static  Scanner scanner =new Scanner(System.in);

五子棋步骤

(1)提供一个启动五子棋游戏的方法
package day03;

public class startWZQ {


        public static void main(String[] args) {
            WZQ.startGame();
        }
    }
(2)初始化棋盘方法
 //初始化棋盘
    public static void init(){

      for(int i=0;i< num.length;i++){
          for(int j=0;j< num.length;j++){
            qp[i][j]=line;
            if(i==qp.length-1){
                qp[i][j]=num[j];
            }
if(j==qp.length-1){
    qp[i][j]=num[i];
}
          }

      }
    }
(3)打印棋盘方法
 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();
}
    }

}
(4)开始下棋,黑白棋交替下棋
  public static void playgame(){
         System.out.println("开始游戏");
         while (true){
             if(flag){
                 System.out.println("黑棋:");
                 System.out.println("请输入行");
                 int r=scanner.nextInt()-1;
                 System.out.println("请输入列");
                 int c = scanner.nextInt()-1;
                 boolean res = pand(r,c);
                 if(res){
                     qp[r][c]=black;
                     print();
                     boolean iswin=chack(r,c,black);
                     if(iswin){
                         System.out.println("黑棋赢了");
                         break;
                     }
                     flag=false;
                 }
                 else{
                     System.out.println("越界或重复");
                     flag=true;
                     continue;
                 }
                    flag=false;
             }
            else{
                 System.out.println("白棋:");
                 System.out.println("请输入行");
                 int r=scanner.nextInt()-1;
                 System.out.println("请输入列");
                 int c = scanner.nextInt()-1;
                 boolean res = pand(r,c);
                 if(res){
                     qp[r][c]=white;
                     print();
                     boolean iswin=chack(r,c,white);
                     if(iswin){
                         System.out.println("白棋赢了");
                         break;
                     }
                     flag=false;
                 }
                 else{
                     System.out.println("越界或重复");
                     flag=false;
                     continue;
                 }
                 flag=true;
             }
         }
     }
(5).判断坐标是否合法,是否重复
  public static boolean pand(int r,int c) {
         if(r>=15||c>=15||r<0||c<0){
            return false;
         }
        if(qp[r][c]!=line){
            return false;
        }
        return true;
    }
(6)判断输赢

 

 代码如下
 //判断输赢
    public static  boolean chack(int r,int c,String qz){
         //水平判断
         int sum=1;
         for(int leftc=c-1;leftc>=0;leftc--){
             if(qp[r][leftc]==qz){
                 sum++;
             }
             else{break;};
         }
         if(sum==5){
             return true;
         }
        for(int rightc=c+1;rightc<=qp[r].length-1;rightc++){
            if(qp[r][rightc]==qz){
                sum++;
            }
            else{break;};
        }
        if(sum==5){
            return true;
        }
        //垂直判断
        int cont=1;
        for(int upr=r-1;upr>=0;upr--){
            if(qp[upr][c]==qz){
                cont++;
            }
            else{break;};
        }
        if(cont==5){
            return true;
        }
        for(int downr=r+1;downr<=qp.length-1;downr++){
            if(qp[downr][c]==qz){
                cont++;
            }
            else{break;};
        }
        if(cont==5){
            return true;
        }
        //斜向1(左上右下)
        int add=1;
        for(int slopleft=r-1;slopleft>=0;slopleft--){
            if(c==0&&qp[slopleft][0]==qz){
                add++;
                break;
            }
            if(c==0&&qp[slopleft][c]!=qz){
                break;
            }
            if(qp[slopleft][--c]==qz){
                add++;
            }
            else{break;};
        }
        if(add==5){
            return true;
        }
        for(int slopleft=r+1;slopleft<= qp.length-1;slopleft++){
            if(qp[slopleft][++c]==qz){
                add++;
            }
            else{break;};
        }
        if(add==5){
            return true;
        }
        //斜向2(右上左下)
        int keep=1;
        for(int slopright=r-1;slopright>=0;slopright--){
            if(qp[slopright][++c]==qz){
                keep++;
            }
            else{break;};
        }
        if(keep==5){
            return true;
        }//youwu
        for(int slopright=r+1;slopright<= qp.length-1;slopright++){

            if(c==0){
                break;
            }
            if(qp[slopright][--c]==qz){
                keep++;
            }
            else{break;};
        }
        if(keep==5){
            return true;
        }
         return false;
    }

 整体代码如下

package day03;

import java.util.Scanner;

/*
 * 五子棋
 */
public class WZQ {

		/*
		  1.提供一个启动五子棋游戏的方法
		      初始化棋盘方法
		      打印棋盘方法
		  2.开始下棋,黑白棋交替下棋

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

		  4.判断输赢
		*/

    static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    static String line = "十";
     static boolean flag = true;
    static  Scanner scanner =new Scanner(System.in);
    //开始游戏
     public static void playgame(){
         System.out.println("开始游戏");
         while (true){
             if(flag){
                 System.out.println("黑棋:");
                 System.out.println("请输入行");
                 int r=scanner.nextInt()-1;
                 System.out.println("请输入列");
                 int c = scanner.nextInt()-1;
                 boolean res = pand(r,c);
                 if(res){
                     qp[r][c]=black;
                     print();
                     boolean iswin=chack(r,c,black);
                     if(iswin){
                         System.out.println("黑棋赢了");
                         break;
                     }
                     flag=false;
                 }
                 else{
                     System.out.println("越界或重复");
                     flag=true;
                     continue;
                 }
                    flag=false;
             }
            else{
                 System.out.println("白棋:");
                 System.out.println("请输入行");
                 int r=scanner.nextInt()-1;
                 System.out.println("请输入列");
                 int c = scanner.nextInt()-1;
                 boolean res = pand(r,c);
                 if(res){
                     qp[r][c]=white;
                     print();
                     boolean iswin=chack(r,c,white);
                     if(iswin){
                         System.out.println("白棋赢了");
                         break;
                     }
                     flag=false;
                 }
                 else{
                     System.out.println("越界或重复");
                     flag=false;
                     continue;
                 }
                 flag=true;
             }
         }
     }
    //启动五子棋游戏
    public static void startGame(){
        init();
        print();
        playgame();

    }
    //判断是否越界
    public static boolean pand(int r,int c) {
         if(r>=15||c>=15||r<0||c<0){
            return false;
         }
        if(qp[r][c]!=line){
            return false;
        }
        return true;
    }
    //判断输赢
    public static  boolean chack(int r,int c,String qz){
         //水平判断
         int sum=1;
         for(int leftc=c-1;leftc>=0;leftc--){
             if(qp[r][leftc]==qz){
                 sum++;
             }
             else{break;};
         }
         if(sum==5){
             return true;
         }
        for(int rightc=c+1;rightc<=qp[r].length-1;rightc++){
            if(qp[r][rightc]==qz){
                sum++;
            }
            else{break;};
        }
        if(sum==5){
            return true;
        }
        //垂直判断
        int cont=1;
        for(int upr=r-1;upr>=0;upr--){
            if(qp[upr][c]==qz){
                cont++;
            }
            else{break;};
        }
        if(cont==5){
            return true;
        }
        for(int downr=r+1;downr<=qp.length-1;downr++){
            if(qp[downr][c]==qz){
                cont++;
            }
            else{break;};
        }
        if(cont==5){
            return true;
        }
        //斜向1(左上右下)
        int add=1;
        for(int slopleft=r-1;slopleft>=0;slopleft--){
            if(c==0&&qp[slopleft][0]==qz){
                add++;
                break;
            }
            if(c==0&&qp[slopleft][c]!=qz){
                break;
            }
            if(qp[slopleft][--c]==qz){
                add++;
            }
            else{break;};
        }
        if(add==5){
            return true;
        }
        for(int slopleft=r+1;slopleft<= qp.length-1;slopleft++){
            if(qp[slopleft][++c]==qz){
                add++;
            }
            else{break;};
        }
        if(add==5){
            return true;
        }
        //斜向2(右上左下)
        int keep=1;
        for(int slopright=r-1;slopright>=0;slopright--){
            if(qp[slopright][++c]==qz){
                keep++;
            }
            else{break;};
        }
        if(keep==5){
            return true;
        }//youwu
        for(int slopright=r+1;slopright<= qp.length-1;slopright++){

            if(c==0){
                break;
            }
            if(qp[slopright][--c]==qz){
                keep++;
            }
            else{break;};
        }
        if(keep==5){
            return true;
        }
         return false;
    }
    //初始化棋盘
    public static void init(){

      for(int i=0;i< num.length;i++){
          for(int j=0;j< num.length;j++){
            qp[i][j]=line;
            if(i==qp.length-1){
                qp[i][j]=num[j];
            }
if(j==qp.length-1){
    qp[i][j]=num[i];
}
          }

      }
    }

    //打印棋盘
    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();
}
    }

}
最后实例

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个用Java编写的双人五子棋游戏的示例代码: ```java import java.util.Scanner; public class GomokuGame { private char[][] board; private char currentPlayer; private boolean isGameOver; public GomokuGame() { board = new char[15][15]; currentPlayer = 'X'; isGameOver = false; initializeBoard(); } private void initializeBoard() { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { board[i][j] = '-'; } } } public void playGame() { Scanner scanner = new Scanner(System.in); while (!isGameOver) { System.out.println("Player " + currentPlayer + ", enter your move (row and column):"); int row = scanner.nextInt(); int col = scanner.nextInt(); if (isValidMove(row, col)) { makeMove(row, col); printBoard(); checkWin(row, col); switchPlayer(); } else { System.out.println("Invalid move. Try again."); } } scanner.close(); } private boolean isValidMove(int row, int col) { return row >= 0 && row < 15 && col >= 0 && col < 15 && board[row][col] == '-'; } private void makeMove(int row, int col) { board[row][col] = currentPlayer; } private void printBoard() { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { System.out.print(board[i][j] + " "); } System.out.println(); } } private void checkWin(int row, int col) { if (checkHorizontal(row) || checkVertical(col) || checkDiagonal(row, col)) { System.out.println("Player " + currentPlayer + " wins!"); isGameOver = true; } } private boolean checkHorizontal(int row) { int count = 0; for (int i = 0; i < 15; i++) { if (board[row][i] == currentPlayer) { count++; if (count == 5) { return true; } } else { count = 0; } } return false; } private boolean checkVertical(int col) { int count = 0; for (int i = 0; i < 15; i++) { if (board[i][col] == currentPlayer) { count++; if (count == 5) { return true; } } else { count = 0; } } return false; } private boolean checkDiagonal(int row, int col) { int count = 0; int i = row; int j = col; while (i >= 0 && j >= 0 && board[i][j] == currentPlayer) { count++; i--; j--; } i = row + 1; j = col + 1; while (i < 15 && j < 15 && board[i][j] == currentPlayer) { count++; i++; j++; } if (count >= 5) { return true; } count = 0; i = row; j = col; while (i >= 0 && j < 15 && board[i][j] == currentPlayer) { count++; i--; j++; } i = row + 1; j = col - 1; while (i < 15 && j >= 0 && board[i][j] == currentPlayer) { count++; i++; j--; } return count >= 5; } private void switchPlayer() { currentPlayer = currentPlayer == 'X' ? 'O' : 'X'; } public static void main(String[] args) { GomokuGame game = new GomokuGame(); game.playGame(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值