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

JavaSE實(shí)現(xiàn)三子棋游戲

 更新時(shí)間:2022年05月04日 12:58:32   作者:yemaozi1501  
這篇文章主要為大家詳細(xì)介紹了JavaSE實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了JavaSE實(shí)現(xiàn)三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

用面向?qū)ο蟮乃季S把實(shí)現(xiàn)三子棋劃分為四個(gè)模塊:

main函數(shù)

public class main {
? ? public static void main(String[] args) {
? ? ? ? player player1 = new player();
? ? ? ? game game1 = new game(player1);

? ? ? ? while(true){

? ? ? ? ? ? game1.initialize();

? ? ? ? ? ? game1.play();

? ? ? ? ? ? game1.destroy();

? ? ? ? ? ? boolean b = player1.queryContinue();
? ? ? ? ? ? if (!b) {

? ? ? ? ? ? ? ? System.out.println("歡迎下次繼續(xù)游戲");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }


? ? ? ? }
? ? }
}

棋盤(pán)模塊設(shè)計(jì)

棋盤(pán)初始化

接受玩家落子并返回當(dāng)前棋盤(pán)狀態(tài)

接受AI落子并返回當(dāng)前棋盤(pán)狀態(tài)

判斷獲勝方、平局或是繼續(xù)游戲,新游戲重置棋盤(pán)。

import java.util.Arrays;

public class chessboard {
? ? private static final int 空白 = 0;
? ? private static final int 畫(huà)圈 = 1;
? ? private static final int 畫(huà)叉 = 2;

? ? private int[][] array = {
? ? ? ? ? ? {空白,空白,空白},
? ? ? ? ? ? {空白,空白,空白},
? ? ? ? ? ? {空白,空白,空白},
? ? };

? ? public boolean moveCircleAt(int row,int column){
? ? ? ? if(array[row][column] != 空白){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? array[row][column] = 畫(huà)圈;
? ? ? ? return true;
? ? }
? ? public boolean moveCrossAt(int row,int column){
? ? ? ? if(array[row][column] != 空白){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? array[row][column] = 畫(huà)叉;
? ? ? ? return true;
? ? }
? ? public static final int CIRCLE_WIN = 0;
? ? public static final int CROSS_WIN = 1;
? ? public static final int DRAW = 2;
? ? public static final int CONTINUE = 3;

? ? private static String display(int i){
? ? ? ? switch (i){
? ? ? ? ? ? case 空白:return " ";
? ? ? ? ? ? case 畫(huà)圈:return "@";
? ? ? ? ? ? case 畫(huà)叉:return "*";
? ? ? ? ? ? default:return " ";
? ? ? ? }
? ? }
? ? @Override
? ? public String toString() {
? ? ? ? String s = "+-+-+-+-+-+\n";
? ? ? ? for(int i = 0;i<2;i++){
? ? ? ? ? ?s += ?String.format("|%s|%s|%s|\n",display(array[i][0]),display(array[i][1]),display(array[i][2]));
// ? ? ? ? ? s += "+-+-+-+-+-+\n";
? ? ? ? }
? ? ? ? s += ?String.format("|%s|%s|%s|\n",display(array[2][0]),display(array[2][1]),display(array[2][2]));
? ? ? ? s += "+-+-+-+-+-+";
? ? ? ? return s;
? ? }

? ? public int getState(){
? ? ? ? //按行判斷
? ? ? ? for(int i = 0;i<3;i++){
? ? ? ? ? ? if(array[i][0] == array[i][1] && array[i][1]== array[i][2]){
? ? ? ? ? ? ? ? if(array[i][0] == 畫(huà)圈 ){
? ? ? ? ? ? ? ? ? ? System.out.println("玩家勝");
? ? ? ? ? ? ? ? ? ? return CIRCLE_WIN;

? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(array[i][0] == 畫(huà)叉){
? ? ? ? ? ? ? ? ? ? System.out.println("機(jī)器贏");
? ? ? ? ? ? ? ? ? ? return CROSS_WIN;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //列判斷
? ? ? ? for(int i = 0;i<3;i++){
? ? ? ? ? ? if(array[0][i] == array[1][i] && array[1][i]== array[2][i]){
? ? ? ? ? ? ? ? if(array[0][i] == 畫(huà)圈 ){
? ? ? ? ? ? ? ? ? ? System.out.println("玩家勝");
? ? ? ? ? ? ? ? ? ? return CIRCLE_WIN;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(array[0][i] == 畫(huà)叉){
? ? ? ? ? ? ? ? ? ? System.out.println("機(jī)器贏");
? ? ? ? ? ? ? ? ? ? return CROSS_WIN;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //斜線(xiàn)判斷
? ? ? ? if(array[0][0] == array[1][1] && array[1][1]== array[2][1]){
? ? ? ? ? ? if(array[1][1] == 畫(huà)圈 ){
? ? ? ? ? ? ? ? return CIRCLE_WIN;
? ? ? ? ? ? }
? ? ? ? ? ? else if(array[1][1] == 畫(huà)叉){
? ? ? ? ? ? ? ? return CROSS_WIN;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if(array[0][2] == array[1][1] && array[1][1]== array[2][0]){
? ? ? ? ? ? if(array[1][1] == 畫(huà)圈 ){
? ? ? ? ? ? ? ? return CIRCLE_WIN;
? ? ? ? ? ? }
? ? ? ? ? ? else if(array[1][1] == 畫(huà)叉){
? ? ? ? ? ? ? ? return CROSS_WIN;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //沒(méi)人贏
? ? ? ? for(int i = 0;i<3;i++){
? ? ? ? ? ? for(int j = 0;j<3;j++){
? ? ? ? ? ? ? ? if(array[i][j] == 空白){
? ? ? ? ? ? ? ? ? ? return CONTINUE;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return DRAW;
? ? }

? ? public void reset() {
? ? ? ? for(int i = 0;i<3;i++){
? ? ? ? ? ? Arrays.fill(array[i],空白);
? ? ? ? }
? ? }
}

玩家模塊設(shè)計(jì)

輸入想要落子的位置,決定退出游戲還是再來(lái)一局。

import java.util.Scanner;

public class player {
? ? private final Scanner scanner = new Scanner(System.in);

? ? public int[] getStation(){
? ? ? ? System.out.println("請(qǐng)輸入要落子的位置,行,列,有效輸入是0,1,2");

? ? ? ? int r,c;
? ? ? ? while (true) {
? ? ? ? ? ? System.out.print(">>>");
? ? ? ? ? ? ?r = scanner.nextInt();
? ? ? ? ? ? ?c = scanner.nextInt();

? ? ? ? ? ? ?if(r >= 0 && r <= 2 &&c >= 0 && c <= 2){
? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ?}
? ? ? ? ? ? System.out.println("有效范圍是0,1,2,請(qǐng)重新輸入。");
? ? ? ? }

? ? ? ? return new int[] {r,c};
? ? }

? ? public boolean queryContinue(){
? ? ? ? System.out.println("是否再來(lái)一把?,請(qǐng)輸入true or false");
? ? ? ? System.out.println(">>>");
? ? ? ? return scanner.nextBoolean();

? ? }
}

AI(電腦)模塊設(shè)計(jì)

生成隨機(jī)坐標(biāo)

import java.util.Random;

public class AI {
? ? //返回落子的位置
? ? //第幾行,第幾列都是從0開(kāi)始
? ? //有效值0~2

? ? private final Random random = new Random();
? ? int r,c;
? ? public int[] getStation(){
? ? ? ? r = random.nextInt(3);
? ? ? ? c = random.nextInt(3);
? ? ? ? return new int[] {r,c};
? ? }
}

游戲模塊設(shè)計(jì)

初始化工作:打印提示內(nèi)容和分割線(xiàn),加載棋盤(pán)

判斷是玩家落子還是AI落子

玩家落子情況下:判斷玩家輸入的合法性,超出邊界或是覆蓋落子都是不合法行為

AI落子情況下:判斷輸入的合法性。

控制棋盤(pán)重置新棋局

package 三子棋;

public class game {
? ? private final chessboard chessboard1;
? ? private final player player1;
? ? private final AI ai;
? ? public game(player player1){
? ? ? ? this.chessboard1 = new chessboard();
? ? ? ? this.player1 = player1;
? ? ? ? this.ai = new AI();
? ? }
? ? //游戲開(kāi)始之前,進(jìn)行一些準(zhǔn)備工作
? ? public void initialize(){

? ? ? ? System.out.println("歡迎進(jìn)入井字棋游戲");
? ? ? ? System.out.println("規(guī)則如下;省略");
? ? ? ? System.out.println("===========================");
? ? ? ? System.out.println(chessboard1);

? ? }
? ? public void play(){//cintinue會(huì)繼續(xù),玩家勝,AI勝和平局 都是break,退出循環(huán)。
? ? ? ? while(true){
? ? ? ? ? ? if(playerTurn()){
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? if(aiTurn()) {
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }

? ? ? ? }
? ? }
? ? //游戲結(jié)束之前,完成一些收尾工作
? ? public void destroy(){
// ? ? ? ?ai.reset();
// ? ? ? ?player1.reset();
? ? ? ? chessboard1.reset();
? ? }
? ? private boolean playerTurn(){

? ? ? ? System.out.println("玩家回合");


? ? ? ? while (true){
? ? ? ? ? ? int[] rc = player1.getStation();
? ? ? ? ? ? int row = rc[0];
? ? ? ? ? ? int column = rc[1];
? ? ? ? ? ? if(chessboard1.moveCircleAt(row,column))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? System.out.println("該位置已經(jīng)有子,請(qǐng)重新選擇位置");
? ? ? ? }

? ? ? ? System.out.println(chessboard1);

? ? ? ? if(chessboard1.getState() == chessboard.CONTINUE){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? return true;
? ? }
? ? private boolean aiTurn(){
? ? ? ? System.out.println("AI回合");


? ? ? ? while (true){
? ? ? ? ? ? int[] rc = ai.getStation();
? ? ? ? ? ? int row = rc[0];
? ? ? ? ? ? int column = rc[1];
? ? ? ? ? ? if(chessboard1.moveCrossAt(row,column))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? System.out.println("該位置已經(jīng)有子,請(qǐng)重新選擇位置");
? ? ? ? }

? ? ? ? System.out.println(chessboard1);
? ? ? ? if(chessboard1.getState() == chessboard.CONTINUE){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? return true;
? ? }
}

代碼還有不完善的地方,希望大家多提意見(jiàn)啦

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

相關(guān)文章

  • Spring Data + Thymeleaf 3 + Bootstrap 4 實(shí)現(xiàn)分頁(yè)器實(shí)例代碼

    Spring Data + Thymeleaf 3 + Bootstrap 4 實(shí)現(xiàn)分頁(yè)器實(shí)例代碼

    本篇文章主要介紹了Spring Data + Thymeleaf 3 + Bootstrap 4 實(shí)現(xiàn)分頁(yè)器實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Java基礎(chǔ)之Unsafe內(nèi)存操作不安全類(lèi)詳解

    Java基礎(chǔ)之Unsafe內(nèi)存操作不安全類(lèi)詳解

    Java是面向?qū)ο笳Z(yǔ)言,在使用Java編程時(shí),大多數(shù)情況下都不會(huì)直接操作內(nèi)存,而且Java也不提倡直接操作內(nèi)存,但是Java中到底有沒(méi)有可以直接操作內(nèi)存的工具類(lèi)呢?有!Java中提供Unsafe類(lèi)可以用來(lái)來(lái)直接操作內(nèi)存,文中詳細(xì)介紹了Unsafe內(nèi)存操作不安全類(lèi),需要的朋友可以參考下
    2021-06-06
  • Jmeter非GUI模式運(yùn)行分布式測(cè)試

    Jmeter非GUI模式運(yùn)行分布式測(cè)試

    這篇文章主要介紹了Jmeter非GUI模式運(yùn)行分布式測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java如何讀取文件目錄返回樹(shù)形結(jié)構(gòu)

    java如何讀取文件目錄返回樹(shù)形結(jié)構(gòu)

    這篇文章主要介紹了java如何讀取文件目錄返回樹(shù)形結(jié)構(gòu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MyBatis-Plus中更新操作的兩種實(shí)現(xiàn)

    MyBatis-Plus中更新操作的兩種實(shí)現(xiàn)

    本文主要介紹了MyBatis-Plus中更新操作的兩種實(shí)現(xiàn),主要是通過(guò)id更新和條件更新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • spring解決循環(huán)依賴(lài)

    spring解決循環(huán)依賴(lài)

    這篇文章主要介紹了spring如何解決循環(huán)依賴(lài),幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-09-09
  • 淺談java switch如果case后面沒(méi)有break,會(huì)出現(xiàn)什么情況?

    淺談java switch如果case后面沒(méi)有break,會(huì)出現(xiàn)什么情況?

    這篇文章主要介紹了淺談java switch如果case后面沒(méi)有break,會(huì)出現(xiàn)什么情況?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨想小編過(guò)來(lái)看看吧
    2020-09-09
  • Java 線(xiàn)程池ThreadPoolExecutor源碼解析

    Java 線(xiàn)程池ThreadPoolExecutor源碼解析

    這篇文章主要介紹了Java 線(xiàn)程池ThreadPoolExecutor源碼解析
    2022-03-03
  • 詳解Java中Method的Invoke方法

    詳解Java中Method的Invoke方法

    這篇文章主要介紹了詳解Java中Method的Invoke方法,需要的朋友可以參考下
    2017-10-10
  • java web實(shí)現(xiàn)自動(dòng)登錄

    java web實(shí)現(xiàn)自動(dòng)登錄

    這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)自動(dòng)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論