您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么用JavaSE實現三子棋游戲”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用JavaSE實現三子棋游戲”吧!
用面向對象的思維把實現三子棋劃分為四個模塊:
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("歡迎下次繼續游戲"); break; } } } }
棋盤初始化
接受玩家落子并返回當前棋盤狀態
接受AI落子并返回當前棋盤狀態
判斷獲勝方、平局或是繼續游戲,新游戲重置棋盤。
import java.util.Arrays; public class chessboard { private static final int 空白 = 0; private static final int 畫圈 = 1; private static final int 畫叉 = 2; private int[][] array = { {空白,空白,空白}, {空白,空白,空白}, {空白,空白,空白}, }; public boolean moveCircleAt(int row,int column){ if(array[row][column] != 空白){ return false; } array[row][column] = 畫圈; return true; } public boolean moveCrossAt(int row,int column){ if(array[row][column] != 空白){ return false; } array[row][column] = 畫叉; 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 畫圈:return "@"; case 畫叉: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] == 畫圈 ){ System.out.println("玩家勝"); return CIRCLE_WIN; } else if(array[i][0] == 畫叉){ 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] == 畫圈 ){ System.out.println("玩家勝"); return CIRCLE_WIN; } else if(array[0][i] == 畫叉){ System.out.println("機器贏"); return CROSS_WIN; } } } //斜線判斷 if(array[0][0] == array[1][1] && array[1][1]== array[2][1]){ if(array[1][1] == 畫圈 ){ return CIRCLE_WIN; } else if(array[1][1] == 畫叉){ return CROSS_WIN; } } if(array[0][2] == array[1][1] && array[1][1]== array[2][0]){ if(array[1][1] == 畫圈 ){ return CIRCLE_WIN; } else if(array[1][1] == 畫叉){ return CROSS_WIN; } } //沒人贏 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],空白); } } }
輸入想要落子的位置,決定退出游戲還是再來一局。
import java.util.Scanner; public class player { private final Scanner scanner = new Scanner(System.in); public int[] getStation(){ System.out.println("請輸入要落子的位置,行,列,有效輸入是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,請重新輸入。"); } return new int[] {r,c}; } public boolean queryContinue(){ System.out.println("是否再來一把?,請輸入true or false"); System.out.println(">>>"); return scanner.nextBoolean(); } }
生成隨機坐標
import java.util.Random; public class AI { //返回落子的位置 //第幾行,第幾列都是從0開始 //有效值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}; } }
初始化工作:打印提示內容和分割線,加載棋盤
判斷是玩家落子還是AI落子
玩家落子情況下:判斷玩家輸入的合法性,超出邊界或是覆蓋落子都是不合法行為
AI落子情況下:判斷輸入的合法性。
控制棋盤重置新棋局
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(); } //游戲開始之前,進行一些準備工作 public void initialize(){ System.out.println("歡迎進入井字棋游戲"); System.out.println("規則如下;省略"); System.out.println("==========================="); System.out.println(chessboard1); } public void play(){//cintinue會繼續,玩家勝,AI勝和平局 都是break,退出循環。 while(true){ if(playerTurn()){ break; } if(aiTurn()) { break; } } } //游戲結束之前,完成一些收尾工作 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("該位置已經有子,請重新選擇位置"); } 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("該位置已經有子,請重新選擇位置"); } System.out.println(chessboard1); if(chessboard1.getState() == chessboard.CONTINUE){ return false; } return true; } }
到此,相信大家對“怎么用JavaSE實現三子棋游戲”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。