写了个简易的3子棋,即X,O方轮流下棋,有三个棋子在一行一列或对角线即为获胜
代码写的很挫,没有体现面向对象的思想,还待改进。。。
import java.util.Scanner;
class weizhi
{
//输入棋子的位置,用一个整数返回
public int cmp(String s1)
{
if(s1.equals("A1")) return 0;
if(s1.equals("A2")) return 1;
if(s1.equals("A3")) return 2;
if(s1.equals("B1")) return 3;
if(s1.equals("B2")) return 4;
if(s1.equals("B3")) return 5;
if(s1.equals("C1")) return 6;
if(s1.equals("C2")) return 7;
if(s1.equals("C3")) return 8;
return -1; //表示输入的字符串不符合规范
}
}
class qipan
{
//将3*3的棋盘看成二维数组
public char[][] a=new char [3][3];
//初始化棋盘
public void init()
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
a[i][j]=' ';
}
}
}
//打印棋盘状态
public void print()
{
System.out.println("当前棋盘状态");
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
System.out.print(a[i][j]);
}
System.out.print("\n");
}
}
//t1表示下棋的位置,t2表示棋子
public int xiaqi(int t1,char t2)
{
int x,y;
x=t1/3;
y=t1%3;
if(a[x][y]==' ')
{
a[x][y]=t2;
int ans=judge(x,y,t2);
if(ans==1)
{
System.out.println("X方获得胜利");
return 1;
}
if(ans==2)
{
System.out.println("O方获得胜利");
return 2;
}
return 0;
}
else
{
System.out.println("该位置已有棋子,重新输入");
return -1;
}
}
//判断是否有人获胜
public int judge(int x,int y,char t)
{
//x表示该棋子所在行,y表示该棋子所在列
if(a[x][0]==t&&a[x][1]==t&&a[x][2]==t) //判断该行
{
if(t=='X')
return 1;
if(t=='O')
return 2;
}
if(a[0][y]==t&&a[1][y]==t&&a[2][y]==t) //判断该列
{
if(t=='X')
return 1;
if(t=='O')
return 2;
}
if(a[0][0]==t&&a[1][1]==t&&a[2][2]==t) //判断对角线
{
if(t=='X')
return 1;
if(t=='O')
return 2;
}
return -1;
}
}
public class threechess {
public static void main(String args[])
{
System.out.println("棋子用X,O表示");
System.out.println("默认X方首先下棋");
int i=1;
int flag=0;
int t=1;//1表示X下棋,-1表示O下棋
//最多有9个位置可供下棋
Scanner scanner=new Scanner(System.in);
String line;
weizhi w=new weizhi();
qipan q=new qipan();
q.init();
while(i<=9)
{
if(t==1)
{
System.out.println("X方下棋");
line=scanner.nextLine();
int temp1=w.cmp(line);
if(temp1==-1)
System.out.println("输入的位置不符合规范,重新输入");
else
{
int temp2=q.xiaqi(temp1,'X');
if(temp2==1||temp2==2)
{
q.print();
flag=1;
break;
}
if(temp2==0)
{
q.print();
t=-1;
i++;
}
if(temp2==-1)
{
//该位置已有棋子,重新输入
}
}
}
else
{
System.out.println("O方下棋");
line=scanner.nextLine();
int temp1=w.cmp(line);
if(temp1==-1)
System.out.println("输入的位置不符合规范");
else
{
int temp2=q.xiaqi(temp1,'O');
if(temp2==1||temp2==2)
{
q.print();
flag=1;
break;
}
if(temp2==0)
{
q.print();
t=1;
i++;
}
if(temp2==-1)
{
//该位置已有棋子,重新输入
}
}
}
}
if(flag==0)
System.out.println("和局,未分出胜负");
scanner.close();
}
}