欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java控制臺(tái)版實(shí)現(xiàn)五子棋游戲

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

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

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

代碼:

import java.util.Scanner;

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

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

    //2.繪制棋盤中除了第一行之外的其他部分以及行坐標(biāo)信息
    for (int i = 0; i < 16; i++) {
      //用于打印行坐標(biāo)信息
      System.out.printf("%x ", i);
      for (int j = 0; j < 16; j++) {
        //剛開(kāi)始棋盤中所有內(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)容之后進(jìn)行換行
      System.out.println();
    }
  }

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

  //自定義成員方法來(lái)判斷用戶是否獲勝,獲勝的規(guī)則時(shí):任意相同顏色的5個(gè)棋子連成一條線
  boolean Success(int x, int y){
    //1.判斷豎向是否連成一線,則需要以該點(diǎn)為中心向上四個(gè)點(diǎn)向下四個(gè)點(diǎn)
    //聲明變量來(lái)統(tǒng)計(jì)豎向相同顏色棋子的個(gè)數(shù),先統(tǒng)計(jì)向上同色棋子的個(gè)數(shù)
    //先統(tǒng)計(jì)向上顏色相同的個(gè)數(shù)
    int count = 1;
    for (int i = x - 1; i >= 0; i--) {
      //若當(dāng)前點(diǎn)代表的棋子與上述某個(gè)點(diǎn)代表的棋子不一樣,則向上統(tǒng)計(jì)結(jié)束
      if (chessBoard[x][y] != chessBoard[i][y]){
        break;
      }
      count++;
    }
    //再統(tǒng)計(jì)向下顏色相同的個(gè)數(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.判斷橫向是否連成一條線,則需要以該店為中心向左四個(gè)點(diǎn)向右四個(gè)點(diǎn)
    count = 1;
    //先統(tǒng)計(jì)向左顏色相同的個(gè)數(shù)
    for (int j = y - 1; j >= 0; j--) {
      //若當(dāng)前點(diǎn)代表的棋子與上述某個(gè)點(diǎn)代碼的棋子不一樣,則向上統(tǒng)計(jì)結(jié)束
      if (chessBoard[x][y] != chessBoard[x][j]) {
        break;
      }
      count++;
    }
    //再統(tǒng)計(jì)向右顏色相同的個(gè)數(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.判斷左上到右下是否連成一線,則需要以該點(diǎn)為中心向左上四個(gè)點(diǎn)向右下四個(gè)點(diǎn)
    count = 1;
    // 先統(tǒng)計(jì)左上顏色相同的個(gè)數(shù)
    for (int i = x-1, j = y - 1; i >= 0 && j >= 0; i--, j--) {
      // 若當(dāng)前點(diǎn)代表的棋子與上述某個(gè)點(diǎn)代表的棋子不一樣,則向上統(tǒng)計(jì)結(jié)束
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    // 再統(tǒng)計(jì)右下顏色相同的個(gè)數(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.判斷右上到左下是否連成一線,則需要以該點(diǎn)為中心向右上四個(gè)點(diǎn)向左下四個(gè)點(diǎn)
    count = 1;
    // 先統(tǒng)計(jì)右上顏色相同的個(gè)數(shù)
    for (int i = x-1, j = y + 1; i >= 0 && j <= 15; i--, j++) {
      // 若當(dāng)前點(diǎn)代表的棋子與上述某個(gè)點(diǎn)代表的棋子不一樣,則向上統(tǒng)計(jì)結(jié)束
      if (chessBoard[x][y] != chessBoard[i][j]) {
        break;
      }
      count++;
    }
    // 再統(tǒng)計(jì)左下顏色相同的個(gè)數(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;
    }

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

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

結(jié)果如下

文中沒(méi)有對(duì)下棋時(shí)候的數(shù)組下標(biāo)進(jìn)行合理值判斷,各位可自行完善。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 運(yùn)用示例詳細(xì)總結(jié)Java多線程

    運(yùn)用示例詳細(xì)總結(jié)Java多線程

    本文主要講解了Java多線程,該篇幅大量使用代碼以及圖片文字進(jìn)行解析,可以讓小伙伴們了解該方面的知識(shí)更加迅速快捷
    2021-08-08
  • idea創(chuàng)建spring boot項(xiàng)目及java版本只能選擇17和21的問(wèn)題

    idea創(chuàng)建spring boot項(xiàng)目及java版本只能選擇17和21的問(wèn)題

    這篇文章主要介紹了idea創(chuàng)建spring boot項(xiàng)目及java版本只能選擇17和21的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解

    java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解

    這篇文章主要介紹了java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解,jar包實(shí)現(xiàn)了特定功能的,java字節(jié)碼文件的壓縮包,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Java中BigDecimal使用注意避坑指南

    Java中BigDecimal使用注意避坑指南

    Java在java.math包中提供的API類BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算,下面這篇文章主要給大家介紹了關(guān)于Java中BigDecimal使用注意避坑的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 用SpringBoot Admin監(jiān)控SpringBoot程序

    用SpringBoot Admin監(jiān)控SpringBoot程序

    這篇文章主要介紹了用SpringBoot Admin監(jiān)控SpringBoot程序,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • 解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況

    解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況

    這篇文章主要介紹了解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 在java中 利用匿名內(nèi)部類進(jìn)行較簡(jiǎn)潔的雙括弧初始化的方法

    在java中 利用匿名內(nèi)部類進(jìn)行較簡(jiǎn)潔的雙括弧初始化的方法

    本篇文章小編將為大家介紹,關(guān)于在java中 利用匿名內(nèi)部類進(jìn)行較簡(jiǎn)潔的雙括弧初始化的方法,有需要的朋友可以參考一下
    2013-04-04
  • Flink入門級(jí)應(yīng)用域名處理示例

    Flink入門級(jí)應(yīng)用域名處理示例

    這篇文章主要介紹了一個(gè)比較簡(jiǎn)單的入門級(jí)Flink應(yīng)用,代碼很容易寫,主要用到的算子有FlatMap、KeyBy、Reduce,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 基于Hadoop實(shí)現(xiàn)Knn算法

    基于Hadoop實(shí)現(xiàn)Knn算法

    這篇文章主要為大家詳細(xì) 介紹了基于Hadoop實(shí)現(xiàn)Knn算法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Spring框架中一個(gè)有用的小組件之Spring Retry組件詳解

    Spring框架中一個(gè)有用的小組件之Spring Retry組件詳解

    Spring Retry 是從 Spring batch 中獨(dú)立出來(lái)的一個(gè)功能,主要實(shí)現(xiàn)了重試和熔斷,對(duì)于那些重試后不會(huì)改變結(jié)果,毫無(wú)意義的操作,不建議使用重試,今天通過(guò)本文給大家介紹Spring Retry組件詳解,感興趣的朋友一起看看吧
    2021-07-07

最新評(píng)論