模拟实现九宫棋的游戏,两个人轮流下棋,下棋的一方使自己的棋子在某一行或某一列或对角线即为赢家
代码写的的比较挫,没有面向对象的思想,有待改进
import java.util.*;
public class Chess
{
public static char map[][]=new char[3][3];
public static void init() //初始化
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
map[i][j]=' ';
}
public static void print(char map[][])
{
System.out.printf("当前的棋盘状态为\n");
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
System.out.printf("%c",map[i][j]);
}
System.out.print('\n');
}
}
public static int cmp(int x)
{
int n,m;
n=x/3;
m=x%3;
if(map[n][m]==' ')
return 1;
return 0;
}
public static int change(String point)
{
if(point.equals("A1")) return 0;
if(point.equals("A2")) return 1;
if(point.equals("A3")) return 2;
if(point.equals("B1")) return 3;
if(point.equals("B2")) return 4;
if(point.equals("B3")) return 5;
if(point.equals("C1")) return 6;
if(point.equals("C2")) return 7;
if(point.equals("C3")) return 8;
return -1; //不符合规范的输入
}
public static char judge(int x,char t)
{
int n,m;
n=x/3;
m=x%3;
map[n][m]=t;
//判断该棋子所在行
if(map[n][0]==t&&map[n][1]==t&&map[n][2]==t)
return t;
//判断该棋子所在列
if(map[0][m]==t&&map[1][m]==t&&map[2][m]==t)
return t;
//判断主对角线
if(n==m)
{
if(map[0][0]==t&&map[1][1]==t&&map[2][2]==t)
return t;
}
//斜对角线
if(x==2||x==4||x==6)
{
if(map[0][2]==t&&map[1][1]==t&&map[2][0]==t)
return t;
}
return '*';
}
public static void main(String args[])
{
init();
//用于输入坐标
String p;
Scanner reader=new Scanner(System.in);
int num=1;
int turn=1;//轮流下棋
//共有9步
int flag=0;
while(num<9)
{
if(turn==1)
{
System.out.printf("当前X方下棋,请输入下棋的坐标:");
p=reader.nextLine();
int q=change(p);
if(q==-1)
{
System.out.printf("输入坐标不符合规范,请重新输入\n");
continue;
}
if(cmp(q)==0)
{
System.out.printf("当前位置已有棋子,请重新输入\n");
continue;
}
if(judge(q,'X')=='X')
{
print(map);
System.out.printf("X方赢");
flag=1;
break;
}
else
{
print(map);
turn=-1; //轮到O下棋
num++;
}
}
else
{
System.out.printf("当前O方下棋,请输入下棋的坐标:");
p=reader.nextLine();
int q=change(p);
if(q==-1)
{
System.out.printf("输入坐标不符合规范,请重新输入\n");
continue;
}
if(cmp(q)==0)
{
System.out.printf("当前位置已有棋子,请重新输入\n");
continue;
}
if(judge(q,'O')=='O')
{
print(map);
System.out.printf("O方赢");
flag=1;
break;
}
else
{
print(map);
turn=1; //轮到X下棋
num++;
}
}
}
if(flag==0)
System.out.printf("和棋,未分胜负\n");
}
}