井字游戏

C、C++和Java语言
回复
hanis_ghost
帖子: 41
注册时间: 2015-06-19 21:16
送出感谢: 26 次
接收感谢: 0

井字游戏

#1

帖子 hanis_ghost » 2016-07-09 22:40

井字游戏就是在一个九宫格内谁先连成三个(横 竖 斜都行),谁就赢
本着代码简洁的目标就用for写了玩家输入落子点的那几行代码(虽然这让玩家在玩的时候有点别扭,但起码代码看着简洁一些)
我也是新手,大家可以提意见(我已经自己玩了几次了,没啥问题)

代码: 全选

//井字棋游戏
#include<stdio.h>
int main()
{
	int huihe=0,winner=0,choice,row,column;
	char board[3][3]={'1','2','3','4','5','6','7','8','9'};		//棋盘
	printf("游戏开始\t玩家1是A\t玩家2是B\n\n");
	while(1)
	{
		++huihe;
		printf(" %c | %c | %c\n",board[0][0],board[0][1],board[0][2]);
		printf("---+---+---\n");
		printf(" %c | %c | %c\n",board[1][0],board[1][1],board[1][2]);
		printf("---+---+---\n");
		printf(" %c | %c | %c\n",board[2][0],board[2][1],board[2][2]);
		for(int i=1;i<=2;i++)
		{
			printf("请玩家%d走棋\n",i);
			scanf("%d",&choice);
			choice-=1;
			row=(int)choice/3;
			column=(int)choice%3;
			board[row][column]=(i==1?'A':'B');
			if(huihe>=3)
			{
				for(int i=0;i<=2;i++)
					if(board[i][0]==board[i][1]&&board[i][1]==board[i][2])
						if(board[i][0]=='A')
							winner=1;
						else
							winner=2;
				for(int j=0;j<=2;j++)
					if(board[0][j]==board[1][j]&&board[1][j]==board[2][j])
						if(board[0][j]=='A')
							winner=1;
						else
						winner=2;
				if(board[0][0]==board[1][1]&&board[1][1]==board[2][2])
					if(board[0][0]=='A')
						winner=1;
					else 
						winner=2;
				if(board[0][2]==board[1][1]&&board[1][1]==board[2][0])
					if(board[0][2]=='A')
						winner=1;
					else
						winner=2;
			}
			if(winner!=0)
				break;
		}
		if(winner!=0)
		break;
	}
	printf("恭喜玩家%d获胜!!\n",winner);
}
上次由 hanis_ghost 在 2016-07-10 7:33,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 3103
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 512 次

Re: 井字游戏

#2

帖子 astolia » 2016-07-10 2:17

还说代码没问题
1、

代码: 全选

winner==2;
2、没有防止在同一个位置重复落子的机制
3、没有处理和棋情况
这些用户感谢了作者 astolia 于这个帖子:
hanis_ghost (2016-07-10 7:33)
评价: 3.7%
回复

回到 “C/C++/Java”