(连载)一步一步教你做黑白棋游戏(四)

原创 2012年03月26日 20:29:12

本篇要讲的是windows编程里面的灵魂,消息响应处理。windows中各种事物或者外部输入等等这些东西的数据传输都是通过消息响应的机制实现的,那么现在我们将会为我们的黑白棋游戏添加鼠标响应处理,从鼠标点击窗口的消息中获取我们需要的坐标信息。


下面看看我们需要看的代码:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;
	int x=0;
	int y=0;
	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
	case WM_LBUTTONDOWN:   
            x=LOWORD(lParam);   
            y=HIWORD(lParam);
		g_OthelloMain.OnClick(x,y);//调用主类的鼠标单击响应函数
		break;

可以对比自己的源码看到添加了一个case WM_LBUTTONDOWN这一列。

了解过windows消息响应机制的基础的应该清楚,每一个case对应的是Message的一个消息。这个消息是用宏定义的,方便大家使用,这里的WM_LBUTTONDOWN就是响应鼠标左键按下的宏,响应的有响应右键,响应键盘等等,这些宏大家可以去查一下手册或者百度都很容易找到自己想要的。上诉代码会在鼠标左键按下的时候运行那一列case所对于的语句,所以我们在下面写下需要进行的各种功能。

那么我们如何知道鼠标按下的坐标呢?孙鑫老师第一课视频讲过

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

这个函数,其中wParam和lParam都是参数,用于传递消息自己所具有的各种数据,在这里我们需要获取的是鼠标按下的坐标,那么这个数据存在lParam中。取低位位lParam是鼠标按下对应的横坐标,高位对应的是纵坐标,注意原点是窗口客户区左上角的顶点。

那么我们给主类创建一个响应鼠标按下操作的函数:

void OnClick(int x, int y);
我们需要把这个响应传递给逻辑类进行处理,那么对于逻辑类也添加一个函数:

int COthelloLogic::PlayChess(int x, int y)
在主类中调用逻辑类的这个函数进行坐标传递,所以这个函数就要处理坐标变换而且要处理上一篇遗留的问题:

int COthelloLogic::PlayChess(int x, int y)
{
	Pos_X = x/60;         //根据鼠标的坐标得出点击的是那个棋子的位置
	Pos_Y = y/60;
        if((Color[Pos_X][Pos_Y] == 1) || (Color[Pos_X][Pos_Y] == 2))
	{
		return 3;//返回一个错误3,即这个位置有棋子
	}
	if(Color[Pos_X][Pos_Y] == 0)
	{
		int message = Judgement( Pos_X, Pos_Y);
		return message; //返回一个执行了Judgement函数的返回值1为落子正确,2为落子无解
	}
	return 0;
}

这样我们的程序的逻辑处理也就几乎完备了。

这一篇内容较少,专注讲这个消息响应,那么下一篇我们将把逻辑和视图联系起来。

敬请期待~



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

(连载)一步一步教你做黑白棋游戏(一)

这个是我的第一篇技术文章,旨在帮助刚刚学Windows API的童鞋能够早日从API的苦海中做出一些东西出来,由于本人也是初学者,一些的错误还是难免的,欢迎大家指正,我会用初学者更加易懂的方式讲解。本...

(连载)一步一步教你做黑白棋游戏(三)

本篇主要讲解的是黑白棋的逻辑实现机理,当然这个机理应该是很简单的,所以熟悉的人可以大致浏览之后跳过。而且这个是本人第一次写这样的代码时所用的自己想的逻辑,很搓轻喷。 既然是逻辑处理那么我们将...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

(连载)一步一步教你做黑白棋游戏(五)

本篇将会是这个游戏图形化界面的核心,如何将逻辑和绘图联系,真正吧界面做出来~ 其实各位应该已经想到了,在前面的绘图讲解中的那个绘图函数是通过像素操作进行绘图的,那么逻辑处理中也是二维数组的处理,很容...

reversi-cli - 跟风做的一个黑白棋小游戏

最近几天听说有一些实训的小伙伴的项目是做一个黑白棋游戏,于是我也跟风去凑个热闹,权当练练手,锻炼一下写个小项目的能力。断断续续做了两天(因为还有比赛),只做好了基本功能,没有来得及学习 AI 方面的东...

基于TCP的网络游戏黑白棋系列(四):游戏棋盘

我们讨论的游戏大厅的实现,这一节我们来看一下客户端游戏棋盘的处理关于棋盘的呈现采用了GDI的DrawImage方法,先准备一张400*400的棋盘图片和两个40*40的棋子图片(分别为黑棋和白棋),我...

拆轮子系列之一步一步教你做仿美团下拉刷新效果

文章的开头奉送上代码,方便大家对照学习。这二天写了一个仿美团的下拉刷新效果,效果图如下:怎么样还不错吧,下面我就教大家做。这个做的还是太粗糙,学习还行,用在项目中还要再改改。1.用到的知识点:其实这个...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)