本篇內容主要講解“怎么用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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。