三子棋实现思路

三子棋实现思路

—自己做完后测试了一遍,基本玩法没有大问题(在菜单栏选择的时候如果输入超出预期会有bug 和上一个项目一样doge),源码在最后的链接。


实现思路

1、玩家可以选择先手还是后手,玩家的棋子是‘@’,机器的棋子是’*’,目前没有棋子用‘_’表示。
2、游戏开始后初始化并展示棋盘。
3、注意每一步落子之后都要判断游戏是否结束并展示最新的棋盘。
4、注意落子时要判断位置是否在棋盘外以及是否该区域已有棋子。

部分代码

1、判断落子区域

判断落子区域是否正确,if(who !=1)这个是判断是否为机器落子,如果是机器落子则不需要把提示输出到终端。

代码如下(示例):

int drop(char arr[][3], int row, int col, int who)
{
	char q = '@';  
	if (who == 1)//机器下棋时,who为1,用*表示棋子。
		q = '*';
	if (arr[row][col] == '_')
	{
		arr[row][col] = q;
	}else if (row >= 3 || col >= 3)
	{
		printf("落子区域超出棋盘范围,请重新输入\n");
		return 0;
	}
	else{
		if(who !=1)
			printf("%d行%d列已经有棋子,请换个位置落子\n", row, col);
		return 0;
	}
	return 1;
}

2.判断游戏是否结束

每次落子之后都先判断对角线、行或列是否有3个同样的棋子,若有则胜利。若没有再判断棋盘上有没有空位置,若没有则和棋,有则继续下棋。

int if_win_game(char arr[][3],int row,int col)//根据最后一步落子的位置判断
											//	,机器获胜返回1,人获胜返回0 ,和棋子返回2,游戏继续返回3
{
	if ((arr[row][0] == '*' && arr[row][1] == '*' && arr[row][2] == '*') || \
		(arr[0][col] == '*' && arr[1][col] == '*' && arr[2][col] == '*'))
		return 1;

	if ((arr[row][0] == '@' && arr[row][1] == '@' && arr[row][2] == '@') || \
		(arr[0][col] == '@' && arr[1][col] == '@' && arr[2][col] == '@'))
		return 0;
	if (row == col || (row == 0 && col == 2) || (row == 2 && col == 0))
	{
		if ((arr[0][0] == '*' && arr[1][1] == '*' && arr[2][2] == '*')||\
			(arr[0][2] == '*' && arr[1][1] == '*' && arr[2][0] == '*'))
			return 1;
		if ((arr[0][0] == '@' && arr[1][1] == '@' && arr[2][2] == '@') || \
			(arr[0][2] == '@' && arr[1][1] == '@' && arr[2][0] == '@'))
			return 0;
	}

	int i, j, flag = 2;
	for (i = 0; i < 3; ++i)
	{
		for (j = 0; j < 3; ++j)
		{
			if (arr[i][j] == '_')
				flag = 3;
		}
	}
	return flag;
}

源码放在我的码云:https://gitee.com/wszlight/code/tree/master/%E6%89%AB%E9%9B%B7

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值