12月9日学习总结

  小开心一波,项目到今天,所有的基本功能已经全部完成了,包括基本的对战,输赢算法的判断,重新开始游戏,最重要的悔棋功能也完成了,虽然优化做的不是很好,但是已经实现了基本功能,后续可以适当的再进行界面的优化,以及算法的完善,功能的增加等,那么今天接着昨天的地方继续来讲。

1.悔棋功能:

其实这个功能是比较简单的,而且算法也人尽皆知,在控制台比较容易实现,但是现在图形库的一块画布上进行操作还是相对有点难度的,要用到众多的库函数实现图形的框选以及覆盖,抠图面积大小的精确化。

实操思想:利用栈将我们点击点的坐标保存下来,这里我们需要用一个算法将坐标进行处理一下,如下:

m = GetMouseMsg();//获取一个鼠标消息
			for (int i = 1; i < 20; i++)
			{
				for (int j = 1; j < 20; j++)
				{
					if (abs(m.x - i * 25) < 12 && abs(m.y - j * 25) < 12)
					{
						x = i * 25;
						y = j * 25;
						a = i;
						b = j;
					}
				}
			}

这样,我们的x和y的值正好是横线所交叉的哪个点的坐标,接下来我们将a,b,x,y进行入栈操作

当用户选择悔棋的时候我们则先利用getimage抠出未落子前的图像,再来利用putimage将图片贴到栈顶的x,y所指向的坐标,实现悔棋功能,具体代码如下:

//当鼠标点击悔棋点的坐标的时候,开始执行悔棋功能
if (m.x >= 520 && m.x <= 570 && m.y >= 190 && m.y <= 230)
{
//栈顶元素不能直接使用,因为此时它保存的是悔棋点的坐标,我们需要先把他弹出
	A.pop(), B.pop(), X.pop(), Y.pop();
//将悔棋点的二维数字具体点赋值为零,实现下次落子
	board[A.top()][B.top()] = 0;
	putimage(X.top() - 13, Y.top() - 13, 25, 25, &back, 19, 16);
//对用户进行提示
	MessageBox(NULL, "您以悔棋成功,请继续", "提示", MB_OK);
//悔棋成功后将该点坐标也弹出栈。
	A.pop(), B.pop(), X.pop(), Y.pop();
	flag--;
	goto NEW;
}

来测试一下啊: 这里大家可以很明显的看到悔棋提示和覆盖点的位置(我的ps技术不太过关) 

就这样,一个简单的五子棋小游戏便开发完成了,不过还得进行后期界面优化设计,这就得看个人的想象力了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值