模擬游戲
模擬井字棋游戲
九個格子中雙方輪流落子。
其中一方畫x符號,另一方畫o符號。
開始時,9個格子都是空的。
程序顯示當前局面,提示某一方輸入落子位置,然後顯示局面,再提示另一方。
當某方棋子連成直線,該方獲勝!
例如:
初始:
_ _ _
_ _ _
_ _ _
o 輸入位置: 1,1
o _ _
_ _ _
_ _ _
x 輸入位置: 2,2
o _ _
_ x _
_ _ _
當某一方出現了3個棋子連成直線或對角線,則該方獲勝
標准答案:
import java.util.*; class MyChess { private char[][] data; // 棋局 private boolean side; // 輪到哪方走棋 true: o方,false: x方 private static Scanner scan = new Scanner(System.in); public MyChess() { data = new char[3][3]; side = true; } public void show() { for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { if(data[i][j]==0) System.out.print('_'); else System.out.print(data[i][j]); System.out.print(" "); } System.out.println(); } } public boolean isEnd() { //檢查是否已經分出勝負 if(judge()>0) return true; // 檢查是否還能走下去 for(int i=0; i<3; i++) for(int j=0; j<3; j++) { if(data[i][j]==0) return false; } return true; } // 勝負裁判 private int judge() { // 檢測橫線 for(int k=0; k<3; k++) { if(data[k][0] == data[k][1] && data[k][0] == data[k][2]) { if(data[k][0]=='o') return 1; // o 方勝利 if(data[k][0]=='x') return 2; // x 方勝利 } } // 檢測豎線 for(int k=0; k<3; k++) { if(data[0][k] == data[1][k] && data[0][k] == data[2][k]) { if(data[0][k]=='o') return 1; // o 方勝利 if(data[0][k]=='x') return 2; // x 方勝利 } } // 檢查斜線 if(data[0][0]==data[1][1] && data[0][0]==data[2][2]) { if(data[0][0]=='o') return 1; // o 方勝利 if(data[0][0]=='x') return 2; // x 方勝利 } if(data[0][2]==data[1][1] && data[0][2]==data[2][0]) { if(data[0][2]=='o') return 1; // o 方勝利 if(data[0][2]=='x') return 2; // x 方勝利 } return 0; } // 顯示比賽結果 public void showResult() { switch(judge()) { case 0: System.out.println("平局!"); break; case 1: System.out.println(" o 方勝利!"); break; case 2: System.out.println(" x 方勝利!"); break; } } public void play() { for(;;) { char side_char = side? 'o' : 'x'; System.out.print( " " + side_char + " 請輸入棋子位置(行,列):"); String s = scan.nextLine(); try { String[] ss = s.split(","); int row = Integer.parseInt(ss[0])-1; // 行號 int col = Integer.parseInt(ss[1])-1; // 列號 if(data[row][col]!=0) continue; // 該位置已經有棋子 data[row][col] = side_char; // 記錄落子 side = !side; break; } catch(Exception e) { } } } } public class MyTest { public static void main(String[] args) { // o x 填充游戲 /* 初始: _ _ _ _ _ _ _ _ _ o 輸入位置: 1,1 o _ _ _ _ _ _ _ _ x 輸入位置: 2,2 o _ _ _ x _ _ _ _ 當某一方出現了3個棋子連成直線或對角線,則該方獲勝 */ MyChess a = new MyChess(); for(;;) { a.show(); // 顯示局面 if(a.isEnd()) { a.showResult(); break; } a.play(); // 繼續走棋 } } }