第03讲-自底向上风格_模拟游戏

模拟游戏

模拟井字棋游戏

九个格子中双方轮流落子。

其中一方画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(); // 继续走棋
}

}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值