井字棋游戏案例C++语言

 案例分析:

每个玩家轮流输入下棋,要求使用在二维数组3*3中实现。

玩家1(棋子代表为:&)玩家2(棋子代表为:%)双方用char类型二维数组来记录棋子信息

判断胜负后询问是否继续游戏

代码实现具体如下:

#include<iostream>
using namespace std;
//声明全局变量
char board1[3][3];
bool gameover=true;
int winner = 0;
//声明函数定义
void printboard(char a[3][3]);
void win_fail2(char a[3][3]);
//设置一个棋盘的初始值为 
char input(char a[3][3])
{
	for (int x = 0; x < 3; x++)
	{
		for (int y = 0; y < 3; y++)
		{ 
			a[x][y] = ' ';
		}
	}
	return a[3][3];
}
//打印棋盘
void printboard(char a[3][3])
{
	system("cls");
	for (int x = 0; x < 3; x++)
	{
		cout << " +---+---+---+" << endl;
		for (int y = 0; y < 3; y++)
		{
			cout << " | " << a[x][y];
		}
		cout << " | ";
		cout << "\n";
	}
	cout << " +---+---+---+" << endl;
	win_fail2(a);
}
//玩家1输入
char palyer1(char a[3][3])
{
	int x = 0;
	int y = 0;
	cout << "请玩家1落子!!"<<endl;
	while (1)
	{
	    cout << "请输入x的坐标";
		cin >> x;
		cout << "请输入y的坐标";
		cin >> y;
		if (x <=0 || x > 3 || y <=0 || y > 3)
		{
			cout << "您输入的坐标有误!!请重新输入" << endl;
			continue;
		}
		if (a[x - 1][y - 1] != ' ')
		{
			cout << "此位置已经有子,不能落子!!" << endl;
			continue;
		}
		a[x - 1][y - 1] = '&';
		break;
	}
	return a[3][3];
}
//玩家2输入
char palyer2(char a[3][3])
{
	int x = 0;
	int y = 0;
	cout << "请玩家2落子!!" << endl;
	while(1)
	{ 
		cout << "请输入x位置的坐标";
		cin >> x;
		cout << "请输入y位置的坐标";
		cin >> y;

		if (x <= 0 || x > 3 || y <= 0 || y > 3)
		{
			cout<<"您输入的坐标有误!!请重新输入"<<endl;
			continue;
		}
		if (a[x - 1][y - 1] != ' ')
		{
			cout<<"此位置已经有子,不能落子!!"<<endl;
			continue;
		}
		a[x - 1][y - 1] = '%';
		break;
	}
	return a[3][3];
}
//判断棋盘是否已经满了
int Isfull(char a[3][3])
{
	//找不到空格了,说明满了
	//满了返回1,没满返回0
	for (int row = 0; row < 3; row++)
	{
		for (int col = 0; col < 3; col++)
		{
			if (a[row][col] == ' ') 
			{
				return 0;//没满
			}
		}
	}
	return 1;
}
//判断结果
void win_fail2(char a[3][3])
{
	if (a[0][0] == '&' && a[0][1] == '&'&& a[0][2] == '&')
	{
		winner = 1;
	}
	if (a[1][0] == '&' && a[1][1] == '&'&& a[1][2] == '&')
	{
		winner = 1;
	}
	if (a[2][0] == '&' && a[2][1] == '&'&& a[2][2] == '&')
	{
		winner = 1;
	}
	if (a[0][0] == '&' && a[1][0] == '&'&& a[2][0] == '&')
	{
		winner = 1;
	}
	if (a[0][1] == '&' && a[1][1] == '&'&& a[2][1] == '&')
	{
		winner = 1;
	}
	if (a[0][2] == '&' && a[1][2] == '&'&& a[2][2] == '&')
	{
		winner = 1;
	}
	if (a[0][0] == '&' && a[1][1] == '&'&& a[2][2] == '&')
	{
		winner = 1;
	}
	if (a[0][2] == '&' && a[1][1] == '&'&& a[2][0] == '&')
	{
		winner = 1;
	}
	//红方胜利
	if (a[0][0] == '%' && a[0][1] == '%'&& a[0][2] == '%')
	{
		winner = 2;
	}
	if (a[1][0] == '%' && a[1][1] == '%'&& a[1][2] == '%')
	{
		winner = 2;
	}
	if (a[2][0] == '%' && a[2][1] == '%'&& a[2][2] == '%')
	{
		winner = 2;
	}
	if (a[0][0] == '%' && a[1][0] == '%'&& a[2][0] == '%')
	{
		winner = 2;
	}
	if (a[0][1] == '%' && a[1][1] == '%'&& a[2][1] == '%')
	{
		winner = 2;
	}
	if (a[0][2] == '%' && a[1][2] == '%'&& a[2][2] == '%')
	{
		winner = 2;
	}
	if (a[0][0] == '%' && a[1][1] == '%'&& a[2][2] == '%')
	{
		winner = 2;
	}
	if (a[0][2] == '%' && a[1][1] == '%'&& a[2][0] == '%')
	{
		winner = 2;
	}
	//检测棋盘满没满
	if (Isfull(a))
	{
		winner = 3;
	}

}

//是否继续游戏并输出胜利者
char pdwin_fail(char a[3][3])
{
	if (winner < 1)
	{
		cout << "未分胜负,请继续" << endl;
	}
	else
	{
		if (winner == 1)
		{
			gameover = false;
			cout << "玩家1胜利" << endl;
			cout << "是否继续游戏呢?1继续,0退出" << endl;
			cin >> gameover;
			if(gameover)
			{
				a[3][3] = input(a);
				printboard(a);
				winner = 0;
			}
		}
		else if (winner == 2)
		{
			gameover = false;
			cout << "玩家2胜利" << endl;
			cout << "是否继续游戏呢?1继续,0退出" << endl;
			cin >> gameover;
			if (gameover)
			{
				a[3][3] = input(a);
				printboard(a);
				winner = 0;
			}
		}
		else
		{
			gameover = false;
			cout << "你两五五开" << endl;
			cout << "是否继续游戏呢?1继续,0退出" << endl;
			cin >> gameover;
			if (gameover)
			{
				a[3][3] = input(a);
				printboard(a);
				winner = 0;
			}
		}
	}
	return a[3][3];
}
//主函数:
int main()
{
	//初始化棋盘变量
	board1[3][3] = input(board1);
	//打印棋盘
	printboard(board1);
	//玩家1和玩家2分别循环下棋
	while (gameover) 
	{
		//玩家1下棋打印棋盘
		board1[3][3] = palyer1(board1);
		printboard(board1);
		board1[3][3] = pdwin_fail(board1);
		if (!gameover)
		{
			break;
		}
		//玩家2下棋打印棋盘
		board1[3][3] = palyer2(board1);
		printboard(board1);
		board1[3][3] = pdwin_fail(board1);
	
	}
	cout << "游戏结束,感谢你们的参与!" << endl;
	system("pause");
	return 0;
}

 这个简单的井字棋小游戏使用二维数组的方式来编写,大大提高了我对二维数组的认识,

在后期调试阶段,由于本人经验不足,在判断玩家胜利条件的众多条件数组中,没有认真仔细分析获胜条件,导致后期调试用了大量时间,借此审视自己的不足之处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值