zoukankan      html  css  js  c++  java
  • 【JAVA实例】五子棋小游戏

      1 /*
      2     (1)绘制棋盘 - 写一个成员方法实现
      3 
      4     (2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。
      5 
      6     (3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。
      7 
      8     (4)提示: 采用二维数组来模拟并描述棋盘,棋盘如下:
      9  */
     10 
     11 package stage1_module2.homework;
     12 
     13 import java.util.Scanner;
     14 import java.util.Arrays;
     15 
     16 public class FiveInARowGame {
     17 
     18     // 1. 绘制一个五子棋棋盘
     19     public String[][] drawChessBoard(){
     20 
     21         String[][] chessBoard = new String[17][17];
     22 
     23         for(int i = 0; i < chessBoard.length; i++) {
     24             for(int j = 0; j < chessBoard.length; j++) {
     25                 if(i == 0){
     26                     chessBoard[i][j] = "  "  + Long.toHexString(j-1) + "  ";
     27                 } else if(j == 0){
     28                     chessBoard[i][j] = Long.toHexString(i-1);
     29                 }
     30                 else {
     31                     chessBoard[i][j] = "  +  ";
     32                 }
     33                 chessBoard[0][0] = " ";
     34                 System.out.print(chessBoard[i][j] + " ");
     35             }
     36             System.out.println();
     37         }
     38         return chessBoard;
     39 
     40     }
     41 
     42     // 2. 提示黑方白方下棋
     43     public void playChess(){
     44 
     45         boolean flag = true;
     46         String side = "black";
     47 
     48         String[][] chessBoard = drawChessBoard();
     49 
     50         while ( flag ){
     51 
     52             System.out.println("请" + side + "落子(按照 行数 列数 的格式), eg: 7 8");
     53             System.out.println("PS:1 <= 行数 <= 16 / 1 <= 列数 <= 16 ");
     54             Scanner sc = new Scanner(System.in);
     55 
     56             int row = sc.nextInt();
     57             int column = sc.nextInt();
     58 
     59             if (chessBoard[row][column].equals("  +  ")) {
     60                 chessBoard[row][column] = side;
     61                 for (int i = 0; i < chessBoard.length; i++){
     62                     for (int j = 0; j < chessBoard[i].length; j++){
     63                         System.out.print
     64                                 (chessBoard[i][j]);
     65                     }
     66                     System.out.println();
     67                 }
     68 
     69                 if (judge(chessBoard, side).equals(side + " Winning")){
     70                     System.out.println("恭喜" + side + "方赢得胜利");
     71                     flag = false;
     72                 }else{
     73                     if (side.equals("black")){
     74                         side = " red ";
     75                     }else{
     76                         side = "black";
     77                     }
     78                 }
     79             } else{
     80                 System.out.println("请重新输入!");
     81             }
     82 
     83         }
     84     }
     85 
     86     // 3. 判断输赢
     87     public String judge(String[][] chessBoard, String side){
     88 
     89         // 1.判断横向是否连成五子
     90         for (int i = 1; i < chessBoard.length; i++) {
     91             int count = 0;
     92             for (int j = 1; j < chessBoard.length-1 ; j++) {
     93                 boolean horizontal = chessBoard[i][j].equals(chessBoard[i][j + 1])
     94                         && chessBoard[i][j].equals(side);
     95                 if ( horizontal ) {
     96                     count++;
     97                     if (count == 4) {
     98                         System.out.println(side + " Winning");
     99                         return side + " Winning";
    100                     }
    101                 } else {
    102                     count = 0;
    103                 }
    104             }
    105         }
    106 
    107         // 2.判断纵向是否连成五子
    108         for (int j = 1; j < chessBoard.length; j++) {
    109             int count = 0;
    110             for (int i = 1; i < chessBoard.length-1 ; i++) {
    111                 // 2.判断纵向是否连成五子
    112                 boolean vertical = chessBoard[i][j].equals(chessBoard[i + 1][j])
    113                         && chessBoard[i][j].equals(side);
    114                 if ( vertical ) {
    115                     count++;
    116                     if (count == 4) {
    117                         System.out.println(side + " Winning");
    118                         return side + " Winning";
    119                     }
    120                 } else {
    121                     count = 0;
    122                 }
    123             }
    124         }
    125 
    126         // 3.判断对角线是否连成五子(左上↖️️到右下↘️️)
    127         int cnt_1 = 2*(chessBoard.length-1)-9;
    128         for (int k = 0; k < cnt_1; k++){
    129             int count = 0;
    130             for ( int i = ((k <= (cnt_1/2)) ? 1 : (k-10)) ;
    131             i < ( (k <= cnt_1/2) ? k-(cnt_1/2)+chessBoard.length : (cnt_1/2)-k+chessBoard.length) - 1 ;
    132                  i++){
    133                 boolean diagLeftToRight =
    134                         chessBoard[i][chessBoard.length-k-6+i].equals(chessBoard[i+1][chessBoard.length-k-6+i+1])
    135                         && chessBoard[i][chessBoard.length-k-6+i].equals(side);
    136                 if ( diagLeftToRight ) {
    137                     count++;
    138                     if (count == 4) {
    139                         System.out.println(side + " Winning");
    140                         return side + " Winning";
    141                     }
    142                 } else {
    143                     count = 0;
    144                 }
    145 
    146             }
    147         }
    148 
    149         // 4.判断对角线是否连成五子(右上↗️到左下↙️)
    150         int cnt_2 = 2*(chessBoard.length-1)-9;
    151         for (int k = 0; k < cnt_2; k++){
    152             int count = 0;
    153             for ( int i = ((k <= (cnt_2/2)) ? 1 : (k-10)) ;
    154                   i < ( (k <= cnt_2/2) ? k-(cnt_2/2)+chessBoard.length : (cnt_2/2)-k+chessBoard.length) - 1;
    155                   i++){
    156                 boolean diagRightToLeft =
    157                         chessBoard[i][chessBoard.length+k-11-i].equals(chessBoard[i+1][chessBoard.length+k-11-i-1])
    158                                 && chessBoard[i][chessBoard.length+k-11-i].equals(side);
    159                 if ( diagRightToLeft ) {
    160                     count++;
    161 //                    System.out.print("inner count :" + count + " ");
    162                     if (count == 4) {
    163                         System.out.println(side + " Winning");
    164                         return side + " Winning";
    165                     }
    166                 } else {
    167                     count = 0;
    168 //                    System.out.print("count:" + count + " ");
    169                 }
    170             }
    171         }
    172 
    173         return "go on";
    174     }
    175 }
     1 package stage1_module2.homework;
     2 
     3 public class FiveARowGameTest {
     4 
     5     public static void main(String[] args){
     6 
     7         FiveInARowGame f1 = new FiveInARowGame();
     8         f1.drawChessBoard();
     9         f1.playChess();
    10     }
    11 }
  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/Tree0108/p/14107231.html
Copyright © 2011-2022 走看看