模擬游戲
模擬井字棋游戲
九個格子中雙方輪流落子。
其中一方畫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(); // 繼續走棋
}
}
}