4/18学习总结

今天还是做项目的一天,今天主要是实现了三个东西,也被这三个东西折磨了很久很久,首先是制作三个框框分别是人机大战和人人大战和人机大战和悔棋其实就是画框,这也是其中最简单的这么一个

setlinecolor(BLACK);
	rectangle(550, 300, 450, 260);                   //设置的悔棋,以及大战的图标
	settextstyle(20, 0, _T("宋体"));

	// 计算文本输出位置
	int x = (550 + 450) / 2 -16*2;
	int y = (300 + 260) / 2 -8;
	outtextxy(x, y, _T("悔棋"));


	rectangle(550, 250, 450, 210);                                          
	settextstyle(20, 0, _T("宋体"));
	 x = (550 + 450) / 2 - 16 * 2;
	 y = (210 + 250) / 2 - 8;
	outtextxy(x, y, _T("人机大战"));

	rectangle(550, 200, 450, 160);                                         
	settextstyle(20, 0, _T("宋体"));
	 x = (550 + 450) / 2 - 16 * 2;
	 y = (200 + 160) / 2 - 8;
	outtextxy(x, y, _T("人人大战"));

其主要就是用rectangle和outtextxy来实现操作,总的来说这是最简单能解决的,接下来就是鼠标操作以及悔棋操作。

对于鼠标操作的话,我是直接在最开始建立的鼠标按下函数中进行借鉴然后进行操作

if (msg->message == WM_LBUTTONDOWN && msg->x <= 550 && msg->x >= 450 && msg->y <= 300 && msg->y >= 260)

这个主要是要实现悔棋,所以在后面加上的条件就是在悔棋这个框内按下鼠标才可进行下面的操作。

哦对了,今天还解决了一个小bug就是在下了一个棋子后再窗口的边缘外一两厘米处按一下在棋盘边缘也会下一个棋子,这个当时想了半天,其实也非常好解决,就是将最开始鼠标按下后面加上一个&&条件确保只有在棋盘内按下按钮才能下棋。

if (msg->message == WM_LBUTTONDOWN&&board[pos.r][pos.c]==0&&msg->x<=450&&msg->x>=75&&msg->y<=450&&msg->y>=75)

多亏把这个bug解决了做到后面的鼠标点击悔棋才更好。

最后就是今天把我折磨的最惨的悔棋操作,其实做完之后,发现整个操作并不难,但是一开始自己没有多家思索,就直接在网上搜索看别人怎么做的,看的多,也杂直接导致c语言尝试过,c++也尝试过但最后都无济于事都没啥用,到后面实在搜不动了,加上以及被折磨一天了,自己想了想,本质就是一个栈操作而已,但是因为之前看的太多导致自己忘了最基础的操作。

其实就是一个栈,操作,在下棋的时候将x,y坐标入栈,如果要悔棋的话,在按下悔棋那个世子里面将栈顶元素赋值在出栈再赋值,就得到了前一个棋子的坐标,再将其坐标再棋盘中的位置赋值为0,最后再重新画个棋盘和棋子图即可解决,很简单的其实,但是今天被折磨了一天,很恶心。

if (msg->message == WM_LBUTTONDOWN && msg->x <= 550 && msg->x >= 450 && msg->y <= 300 && msg->y >= 260)
	{
		if (top > 0)
		{
			top--;
			int k1 = st.top();st.pop();
			int k2 = st.top();
			board[k2][k1] = 0;
			draw();
		}
	}

就是这么一个操作 今天最后的效果就是这样

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值