最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java控制臺版實現(xiàn)五子棋游戲

 更新時間:2020年12月30日 08:04:11   作者:悲歌白狼  
這篇文章主要為大家詳細介紹了java控制臺版實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

控制臺實現(xiàn)五子棋游戲,供大家參考,具體內(nèi)容如下

  • 控制臺打印棋盤
  • 編寫兩人對弈的五子棋游戲,游戲規(guī)則:黑白雙方有一方首先實現(xiàn)五子連續(xù),則獲勝,游戲結束。

代碼:

import java.util.Scanner;

public class Wuziqi {
  //自定義二維數(shù)組來描述棋盤,默認初始值為0
  int[][] chessBoard = new int[16][16];

  //自定義成員方法來繪制棋盤
  void paint(){
    //1.先繪制棋盤中第一行的坐標信息,也就是列坐標信息
    for (int i = 0; i < 17; i++) {
      if( 0 == i){
        System.out.println(" ");
      }else {
        //按照16進制打印i-1的數(shù)值
        System.out.printf("%x " , i - 1);
      }
    }
    System.out.println();

    //2.繪制棋盤中除了第一行之外的其他部分以及行坐標信息
    for (int i = 0; i < 16; i++) {
      //用于打印行坐標信息
      System.out.printf("%x ", i);
      for (int j = 0; j < 16; j++) {
        //剛開始棋盤中所有內(nèi)容都是+ , 因此直接打印
        if (0 == chessBoard[i][j]){
          System.out.print("+ ");
        } else if (1 == chessBoard[i][j]){
          System.out.print("● ");
        }else {
          System.out.print("○ ");
        }
      }
      //打印完一行的所有內(nèi)容之后進行換行
      System.out.println();
    }
  }

  //自定義成員方法來提示黑方和白方分別下棋
  void play(){
    //定義標志位來進行黑方和白方的切換,true代表黑方,false代表白方
    boolean flag = true;
    //不斷地分別提示黑方和白方下棋
    while(true){
      System.out.println("請" + (flag ? "黑方" : "白方") + "輸入落子坐標(x,y):");
      Scanner sc = new Scanner(System.in);
      int x = sc.nextInt();
      int y = sc.nextInt();
      //根據(jù)用戶輸入的坐標來調整棋盤中的圖案,策略為改變數(shù)值的元素值,
      //當黑子落子時就將數(shù)組中對應的元素值改為1,當白方落子時就將數(shù)組中對應的元素改為2
      chessBoard[x][y] = (flag ? 1 : 2);
      //重新繪制圖案
      paint();
      //判斷當前方是否勝利,若勝利就結束游戲
      if (Success(x, y)) {
        System.out.println("恭喜" + (flag ? "黑方" : "白方") + "勝利了!");
        break;
      }
      // 此時切換下棋方
      flag = !flag;
    }
  }

  //自定義成員方法來判斷用戶是否獲勝,獲勝的規(guī)則時:任意相同顏色的5個棋子連成一條線
  boolean Success(int x, int y){
    //1.判斷豎向是否連成一線,則需要以該點為中心向上四個點向下四個點
    //聲明變量來統(tǒng)計豎向相同顏色棋子的個數(shù),先統(tǒng)計向上同色棋子的個數(shù)
    //先統(tǒng)計向上顏色相同的個數(shù)
    int count = 1;
    for (int i = x - 1; i >= 0; i--) {
      //若當前點代表的棋子與上述某個點代表的棋子不一樣,則向上統(tǒng)計結束
      if (chessBoard[x][y] != chessBoard[i][y]){
        break;
      }
      count++;
    }
    //再統(tǒng)計向下顏色相同的個數(shù)
    for (int i = x + 1; i < chessBoard.length; i++) {
      if (chessBoard[x][y] != chessBoard[i][y]){
        break;
      }
      count++;
    }
    if (5 == count){
      return true;
    }

    //2.判斷橫向是否連成一條線,則需要以該店為中心向左四個點向右四個點
    count = 1;
    //先統(tǒng)計向左顏色相同的個數(shù)
    for (int j = y - 1; j >= 0; j--) {
      //若當前點代表的棋子與上述某個點代碼的棋子不一樣,則向上統(tǒng)計結束
      if (chessBoard[x][y] != chessBoard[x][j]) {
        break;
      }
      count++;
    }
    //再統(tǒng)計向右顏色相同的個數(shù)
    for (int j = y + 1; j < chessBoard.length; j++) {
      if(chessBoard[x][y] != chessBoard[x][j]){
        break;
      }
      count++;
    }
    if (5 == count){
      return true;
    }

    // 3.判斷左上到右下是否連成一線,則需要以該點為中心向左上四個點向右下四個點
    count = 1;
    // 先統(tǒng)計左上顏色相同的個數(shù)
    for (int i = x-1, j = y - 1; i >= 0 && j >= 0; i--, j--) {
      // 若當前點代表的棋子與上述某個點代表的棋子不一樣,則向上統(tǒng)計結束
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    // 再統(tǒng)計右下顏色相同的個數(shù)
    for (int i = x+1, j = y + 1; i <= 15 && j <= 15; i++, j++) {
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    if (5 == count) {
      return true;
    }

    // 4.判斷右上到左下是否連成一線,則需要以該點為中心向右上四個點向左下四個點
    count = 1;
    // 先統(tǒng)計右上顏色相同的個數(shù)
    for (int i = x-1, j = y + 1; i >= 0 && j <= 15; i--, j++) {
      // 若當前點代表的棋子與上述某個點代表的棋子不一樣,則向上統(tǒng)計結束
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    // 再統(tǒng)計左下顏色相同的個數(shù)
    for (int i = x+1, j = y - 1; i <= 15 && j >= 0; i++, j--) {
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    if (5 == count) {
      return true;
    }

    // 當上述所有情況都不成立時,表示該下棋方?jīng)]有獲勝
    return false;
  }
}
public class WuziqiTest {

  public static void main(String[] args) {
    //聲明一個Wuziqi類型的引用指向Wuziqi類型的對象
    Wuziqi wz = new Wuziqi();
    //調用paint()方法打印列信息
    wz.paint();
    //下棋開始
    wz.play();
  }
}

結果如下

文中沒有對下棋時候的數(shù)組下標進行合理值判斷,各位可自行完善。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Redis原子計數(shù)器incr,防止并發(fā)請求操作

    Redis原子計數(shù)器incr,防止并發(fā)請求操作

    這篇文章主要介紹了Redis原子計數(shù)器incr,防止并發(fā)請求操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • quartz定時執(zhí)行任務,并配置web.xml的操作方法

    quartz定時執(zhí)行任務,并配置web.xml的操作方法

    下面小編就為大家?guī)硪黄猶uartz定時執(zhí)行任務,并配置web.xml的操作方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • springboot實現(xiàn)執(zhí)行sql語句打印到控制臺

    springboot實現(xiàn)執(zhí)行sql語句打印到控制臺

    這篇文章主要介紹了springboot實現(xiàn)執(zhí)行sql語句打印到控制臺的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java swing實現(xiàn)簡單計算器界面

    java swing實現(xiàn)簡單計算器界面

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)簡單計算器界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Springboot中如何使用Jackson

    Springboot中如何使用Jackson

    這篇文章主要介紹了Springboot中如何使用Jackson,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • Spring Boot2.x如何自定義Endpoint

    Spring Boot2.x如何自定義Endpoint

    這篇文章主要介紹了Spring Boot2.x如何自定義Endpoint,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java源碼解析之object類

    Java源碼解析之object類

    前些天看到別人討論閱讀源碼有什么用這個問題,有一句話說的特別好:學習別人實現(xiàn)某個功能的設計思路,來提高自己的編程水平。本文主要介紹了Java源碼解析之object類,需要的朋友可以參考。
    2017-10-10
  • RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

    RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

    這篇文章主要介紹了RestTemplate發(fā)送請求時Cookie的影響及注意事項說明,具有很好的參考價值,希望對大家有所幫助。
    2023-07-07
  • SpringBoot整合minio服務的示例代碼

    SpringBoot整合minio服務的示例代碼

    本文主要介紹了SpringBoot整合minio服務的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • java 快速實現(xiàn)異步調用的操作方法

    java 快速實現(xiàn)異步調用的操作方法

    這篇文章主要介紹了java 如何快速實現(xiàn)異步調用方法,今天我們就來了解下 CompletableFuture,它Java 8引入的一種功能強大的異步編程工具,可以用于實現(xiàn)復雜的異步操作和處理鏈式的異步任務,需要的朋友可以參考下
    2023-07-07

最新評論

金昌市| 楚雄市| 阳东县| 菏泽市| 吉安市| 安丘市| 苏州市| 顺义区| 冕宁县| 临猗县| 随州市| 丰宁| 灵寿县| 盐边县| 朝阳市| 蒙阴县| 江达县| 襄樊市| 平江县| 双流县| 信阳市| 贵阳市| 竹山县| 罗江县| 华宁县| 呼图壁县| 松溪县| 镇巴县| 丹寨县| 探索| 普洱| 电白县| 鹤山市| 濮阳县| 大丰市| 苏尼特右旗| 阿克苏市| 任丘市| 景东| 利津县| 航空|