您好,登錄后才能下訂單哦!
本篇內容主要講解“Java實現三子棋小游戲的代碼怎么寫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java實現三子棋小游戲的代碼怎么寫”吧!
游戲操作如圖示:
主要借助3x3的二維數組
1、Main–主程序
public class Main { public static void main(String[] args) { Player player=new Player();//玩家 Game game=new Game(player); //一次循環代表一次游戲 while (true){ game.Init();//初始化 game.play();//開始游戲 game.destory();//釋放 boolean q=player.queryContinue(); //一局游戲結束后,詢問用戶是否開始下一局游戲 if (!q){ System.out.println("歡迎下次繼續游戲!"); break; } } } }
2、AI–電腦
import java.util.Random; //返回AI對象的落子位置 //用數組表示 第幾行第幾列 從0開始 //所以有效范圍是[0,2] public class AI { private final Random random=new Random(); public int[] getPosition(){ int r=random.nextInt(3);//生成[0,2]的隨機整數 0 1 2 int c=random.nextInt(3); return new int[]{r,c}; } }
3、Player–玩家
import java.util.Scanner; //返回玩家落子位置 //用數組表示 第幾行第幾列 從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}; } //詢問用戶是否繼續下一局 public boolean queryContinue(){ System.out.println("本局游戲結束,開始新游戲請輸入true,否則輸入false"); System.out.print(">>>"); return sc.nextBoolean(); } }
4、ChessBoard–棋盤
import java.util.Arrays; //棋盤 用來實例化對象 //棋盤對象 //功能 1、落子 2、判斷棋盤狀態 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; } //棋盤的四種狀態 public static final int CIRCLE_WIN=0;//執o者贏 //三橫三豎兩對角成直線 public static final int CROSS_WIN=1;//執x者贏 public static final int DRAW=2;//平局 //沒有成直線 但無落子位置了 public static final int CONTINUE=3;//繼續 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]==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);//所有位置再次設置為空白 } } }
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){ //一次循環=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("該位置已經有棋子,請重新選擇位置"); } System.out.println(chessboard); return chessboard.getState()!=ChessBoard.CONTINUE; } //新一局游戲開始時 游戲的界面需要重置 否則會是上一局游戲的結局界面 public void destory(){ chessboard.reset(); } }
運行結果:
1、測試落子位置合法性
2、測試棋盤狀態/輸贏
3、測試平局
到此,相信大家對“Java實現三子棋小游戲的代碼怎么寫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。