3子棋

写了个简易的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();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值