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

Java實現(xiàn)三子棋小游戲簡易版

 更新時間:2022年05月04日 13:09:43   作者:Tara@  
這篇文章主要為大家詳細介紹了Java實現(xiàn)三子棋小游戲簡易版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

游戲操作如圖示:

原理:

主要借助3x3的二維數(shù)組

實現(xiàn):

1、Main–主程序

public class Main {
? ? public static void main(String[] args) {
? ? ? Player player=new Player();//玩家
? ? ? Game game=new Game(player);

? ? ? //一次循環(huán)代表一次游戲
? ? ? while (true){
? ? ? ? ? game.Init();//初始化
? ? ? ? ? game.play();//開始游戲

? ? ? ? ? game.destory();//釋放

? ? ? ? ? boolean q=player.queryContinue();
? ? ? ? ? //一局游戲結(jié)束后,詢問用戶是否開始下一局游戲
? ? ? ? ? if (!q){
? ? ? ? ? ? ? System.out.println("歡迎下次繼續(xù)游戲!");
? ? ? ? ? ? ? break;
? ? ? ? ? }
? ? ? }
? ? }
}

2、AI–電腦

import java.util.Random;
//返回AI對象的落子位置
//用數(shù)組表示 第幾行第幾列 從0開始
//所以有效范圍是[0,2]
public class AI {
? ? private final Random random=new Random();
? ? public int[] getPosition(){
? ? ? ? int r=random.nextInt(3);//生成[0,2]的隨機整數(shù) 0 1 2
? ? ? ? int c=random.nextInt(3);
? ? ? ? return new int[]{r,c};
? ? }
}

3、Player–玩家

import java.util.Scanner;

//返回玩家落子位置
//用數(shù)組表示 第幾行第幾列 從0開始
//所以有效范圍是[0,2]
public class Player {
? ? private final Scanner sc=new Scanner(System.in);

? ? public int[] getPosition(){
? ? ? ? System.out.println("請輸入要落子的位置,行列有效取值范圍為[0,2]");
? ? ? ? System.out.print(">>>");
? ? ? ? int r,c;
? ? ? ?while (true){
? ? ? ? ? ?System.out.print(">>>");
? ? ? ? ? ?r=sc.nextInt();
? ? ? ? ? ?c=sc.nextInt();

? ? ? ? ? ?if (r>=0&&r<=2&&c>=0&&c<=2){
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}
? ? ? ? ? ?System.out.println("行列有效范圍為[0,2],請重新輸入");

? ? ? ?}
? ? ? ? return new int[]{r,c};
? ? }
? ? //詢問用戶是否繼續(xù)下一局
? ? public boolean queryContinue(){
? ? ? ? System.out.println("本局游戲結(jié)束,開始新游戲請輸入true,否則輸入false");
? ? ? ? System.out.print(">>>");
? ? ? ? return sc.nextBoolean();
? ? }
}

4、ChessBoard–棋盤

import java.util.Arrays;

//棋盤 用來實例化對象
//棋盤對象
//功能 1、落子 2、判斷棋盤狀態(tài)
public class ChessBoard {
? ?private static final int empty=0;//空白位置用0表示
? ?private static final int circle=1;//落子為o的位置
? ?private static final int cross=2;//落子為x的位置
? ?private final int[][] array={
? ? ? ? ? ?{empty,empty,empty},
? ? ? ? ? ?{empty,empty,empty},
? ? ? ? ? ?{empty,empty,empty}
? ?};

? ?public boolean moveCircleAt(int row,int column){//落一個o
? ? ? if (array[row][column]!=empty){ //落子前需要先判斷該位置是否為空白
? ? ? ? ?return false;
? ? ? }
? ? ? array[row][column]=circle;
? ? ? return true;
? ?}

? ?public boolean moveCrossAT(int row,int column){//某個位置落個x
? ? ? if (array[row][column]!=empty){
? ? ? ? ?return false;
? ? ? }
? ? ? array[row][column]=cross;
? ? ? return true;
? ?}

? ?//棋盤的四種狀態(tài)
? ?public static final int CIRCLE_WIN=0;//執(zhí)o者贏 ?//三橫三豎兩對角成直線
? ?public static final int CROSS_WIN=1;//執(zhí)x者贏
? ?public static final int DRAW=2;//平局 //沒有成直線 但無落子位置了
? ? public static final int CONTINUE=3;//繼續(xù)

? ?public int getState(){//得到棋盤的狀態(tài)
? ? ? //判斷行
? ? ? for (int i=0;i<3;i++){
? ? ? ? ?if(array[i][0]==array[i][1]&&array[i][1]==array[i][2]){
? ? ? ? ? ? if (array[i][0]==circle){
? ? ? ? ? ? ? ?System.out.println("恭喜你贏了!");
? ? ? ? ? ? ? ?return CIRCLE_WIN;
? ? ? ? ? ? }
? ? ? ? ? ? else if (array[i][0]==cross){
? ? ? ? ? ? ? ?System.out.println("很遺憾你輸了!");
? ? ? ? ? ? ? ?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]==circle){
? ? ? ? ? ? ? ?System.out.println("恭喜你贏了!");
? ? ? ? ? ? ? ?return CIRCLE_WIN;
? ? ? ? ? ? }
? ? ? ? ? ? else if(array[0][i]==cross){
? ? ? ? ? ? ? ?System.out.println("很遺憾你輸了!");
? ? ? ? ? ? ? ?return CROSS_WIN;
? ? ? ? ? ? }
? ? ? ? ?}
? ? ? }

? ? ? //正負對角線
? ? ? //正負對角線
? ? ? if ((array[0][0]==array[1][1]&&array[1][1]==array[2][2])
? ? ? ? ? ? ? ||(array[0][2]==array[1][1]&&array[1][1]==array[2][0])){
? ? ? ? ?if (array[1][1]==circle){
? ? ? ? ? ? System.out.println("恭喜你贏了!");
? ? ? ? ? ? return CIRCLE_WIN;
? ? ? ? ?}
? ? ? ? ?else if (array[1][1]==cross){
? ? ? ? ? ? System.out.println("很遺憾你輸了!");
? ? ? ? ? ? return CROSS_WIN;
? ? ? ? ?}
? ? ? }
? ? ? //無獲勝
? ? ? for (int i=0;i<3;i++){
? ? ? ? for (int j=0;j<3;j++){
? ? ? ? ? ?if (array[i][j]==empty){
? ? ? ? ? ? ? return CONTINUE;
? ? ? ? ? ?}
? ? ? ? }
? ? ? }
? ? ? return DRAW;//無獲勝也無空白 平局
? ?}

? ?private static String show(int i){ //顯示
? ? ? switch (i){
? ? ? ? ?case empty:
? ? ? ? ? ? return " ";
? ? ? ? ?case circle:
? ? ? ? ? ? return "o";
? ? ? ? ?case cross:
? ? ? ? ? ? return "x";
? ? ? ? ?default:
? ? ? ? ? ? return "1";
? ? ? }
? ?}

? ?@Override
? ?public String toString() {
? ? ? String s="---------\n";
? ? ? for (int i=0;i<2;i++){ //前兩行
? ? ? ? ?s+=String.format("|%s|%s|%s|\n",show(array[i][0]),show(array[i][1]),show(array[i][2]));
? ? ? ? ?s+="---------\n";
? ? ? }
? ? ? //最后一行
? ? ? s+=String.format("|%s|%s|%s|\n",show(array[2][0]),show(array[2][1]),show(array[2][2]));
? ? ? s+="---------";

? ? ? return s;
? ?}

? ?public void reset() {
? ? ? for (int i=0;i<3;i++){
? ? ? ? ?Arrays.fill(array[i],empty);//所有位置再次設(shè)置為空白
? ? ? }
? ?}
}

5、Game–游戲

import java.util.Arrays;

public class Game {
? ? private final ChessBoard chessboard;
? ? private final Player player;
? ? private final AI ai;

? ? public Game(Player player){
? ? ? ? this.chessboard=new ChessBoard();
? ? ? ? this.player=player;
? ? ? ? this.ai=new AI();
? ? }

? ? //初始化
? ? public void Init(){
? ? ? ? System.out.println("歡迎進入三子棋游戲");
? ? ? ? System.out.println(chessboard);
? ? }

? ? //回合制游戲,游戲主流程
? ? public void play(){
? ? ? ? while (true){ ?//一次循環(huán)=player回合+AI回合
? ? ? ? ? ?if (playerTurn()){//玩家回合
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}
? ? ? ? ? ?if (aiTurn()){//ai回合
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}
? ? ? ? }
? ? }

? ? private boolean aiTurn() {
? ? ? ? System.out.println("AI回合:");
? ? ? ? while (true) {
? ? ? ? ? ? int[] rc=ai.getPosition();
? ? ? ? ? ? int row=rc[0];
? ? ? ? ? ? int column=rc[1];
? ? ? ? ? ? if(chessboard.moveCrossAT(row, column)){
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? System.out.println(chessboard);

? ? ? ? return chessboard.getState()!=ChessBoard.CONTINUE;

? ? }

? ? private boolean playerTurn() {
? ? ? ? System.out.println("玩家回合:");

? ? ? ? while (true) {
? ? ? ? ? ? int[] rc=player.getPosition();
? ? ? ? ? ? int row=rc[0];
? ? ? ? ? ? int column=rc[1];
? ? ? ? ? ? if(chessboard.moveCircleAt(row, column)){
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? System.out.println("該位置已經(jīng)有棋子,請重新選擇位置");
? ? ? ? }
? ? ? ? System.out.println(chessboard);
? ? ? ? return chessboard.getState()!=ChessBoard.CONTINUE;
? ? }
? ? //新一局游戲開始時 游戲的界面需要重置 否則會是上一局游戲的結(jié)局界面
? ? public void destory(){
? ? ? ? chessboard.reset();
? ? }

}

運行結(jié)果:

1、測試落子位置合法性

2、測試棋盤狀態(tài)/輸贏

3、測試平局

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

相關(guān)文章

  • Java Swing JPasswordField密碼框的實現(xiàn)示例

    Java Swing JPasswordField密碼框的實現(xiàn)示例

    這篇文章主要介紹了Java Swing JPasswordField密碼框的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Java多線程事務管理的實現(xiàn)

    Java多線程事務管理的實現(xiàn)

    本文主要介紹了Java多線程事務管理的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • java如何獲取yml配置文件工具類

    java如何獲取yml配置文件工具類

    本文介紹了java獲取yml配置文件的工具類引入pom文件的方法,首先,創(chuàng)建一個與工具類同名的類,然后將工具類的代碼復制到新創(chuàng)建的類中,運行后輸出:0*/1***?完成操作,此方法簡單易行,適合初學者使用
    2024-10-10
  • 詳解SpringBoot簡化配置分析總結(jié)

    詳解SpringBoot簡化配置分析總結(jié)

    這篇文章主要介紹了詳解SpringBoot簡化配置分析總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 利用Spring JPA中的@Version注解實現(xiàn)樂觀鎖

    利用Spring JPA中的@Version注解實現(xiàn)樂觀鎖

    樂觀鎖是數(shù)據(jù)庫和應用程序中使用的一種并發(fā)控制策略,用于在多個事務嘗試更新單個記錄時確保數(shù)據(jù)完整性,Java Persistence API (JPA) 提供了一種借助@Version注解在 Java 應用程序中實現(xiàn)樂觀鎖的機制,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • 使用Intellij IDEA查看Java源碼技巧

    使用Intellij IDEA查看Java源碼技巧

    這篇文章主要介紹了使用Intellij IDEA查看Java源碼技巧,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Spring Boot項目@RestController使用重定向redirect方式

    Spring Boot項目@RestController使用重定向redirect方式

    這篇文章主要介紹了Spring Boot項目@RestController使用重定向redirect方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 創(chuàng)建網(wǎng)關(guān)項目(Spring Cloud Gateway)過程詳解

    創(chuàng)建網(wǎng)關(guān)項目(Spring Cloud Gateway)過程詳解

    這篇文章主要介紹了創(chuàng)建網(wǎng)關(guān)項目(Spring Cloud Gateway)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Java編程Iterator迭代器設(shè)計原理及實現(xiàn)代碼示例

    Java編程Iterator迭代器設(shè)計原理及實現(xiàn)代碼示例

    這篇文章主要介紹了Java編程Iterator迭代器設(shè)計原理及實現(xiàn)代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Java 反射機制原理與用法詳解

    Java 反射機制原理與用法詳解

    這篇文章主要介紹了Java 反射機制原理與用法,結(jié)合實例形式詳細分析了java反射機制的相關(guān)概念、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-12-12

最新評論

鄂尔多斯市| 南华县| 周口市| 嘉义县| 贵南县| 孟州市| 乌恰县| 乌拉特后旗| 蓝山县| 博湖县| 阿城市| 常宁市| 紫阳县| 沛县| 华容县| 洛浦县| 鸡泽县| 龙江县| 亳州市| 独山县| 兴和县| 池州市| 平遥县| 昌乐县| 龙山县| 舞钢市| 黄浦区| 宝丰县| 化德县| 称多县| 剑阁县| 辽中县| 高台县| 汉中市| 横峰县| 元江| 长沙县| 扎鲁特旗| 乌兰察布市| 宁河县| 资阳市|