模拟游戏
模拟井字棋游戏
九个格子中双方轮流落子。
其中一方画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(); // 继续走棋
}
}
}