九宫棋

模拟实现九宫棋的游戏,两个人轮流下棋,下棋的一方使自己的棋子在某一行或某一列或对角线即为赢家

代码写的的比较挫,没有面向对象的思想,有待改进

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");
    }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值