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

原创 2012年03月26日 22:34:43

本篇将会是这个游戏图形化界面的核心,如何将逻辑和绘图联系,真正吧界面做出来~

其实各位应该已经想到了,在前面的绘图讲解中的那个绘图函数是通过像素操作进行绘图的,那么逻辑处理中也是二维数组的处理,很容易能将二维数组中的数据处理出具有像素数据的绘图用参数。

好了,那么下面我们将来实现这个想法:

首先既然要联系逻辑和绘图,那么逻辑类和绘图类都要做好准备,逻辑类要负责传出数据,绘图类需要提供接收数据的容器,请看下面代码:

int * COthelloLogic::GetColorData(void)
{
	return &Color[0][0];
}

int COthelloLogic::Getcolor(void)
{
	return color;
}

上面两份代码分别是要输出这个棋盘的二维数组的首地址和当前所执棋子的颜色。应该很好理解。

那么还要建立绘图类中的容器,于是我们要为绘图类添加成员变量和接口函数:

private:
	int Color_View[8][8];
        int color_View;
public:
	void LoadDataFromLogic(int * Color,int color);

成员变量很显然就是View版本的棋盘和棋子颜色,函数从名字都可以知道是从逻辑类中获取数据的函数,参数对于逻辑类中两个输出函数的返回值。

void COthelloView::LoadDataFromLogic(int * Color,int color)
{
	memcpy( Color_View, Color, sizeof(int)*8*8);
	color_View = color;
}
memcpy是一个复制用函数,大家查百度很容易理解这个函数的。

那么我们在什么场合能在视图和逻辑这两个类以上的高度进行调用这些函数呢?那么就是我们主类的存在意义了,主类由于有这两个类的实例作为成员变量,所以可以轻易调用各种公开的函数:

m_View.LoadDataFromLogic(m_Logic.GetColorData(),m_Logic.Getcolor());

在主类中写入这样的代码编可以将数据传递到绘图类中。

但是这句应该怎么放才好呢?应该是在初始化的时候以及在响应鼠标的时候。具体位置我们后面再讲。

那么我们下面来修改绘图函数OnPaint,既然都得到了逻辑类的数据,那么我们将要使用这些数据画图,下面一次性全部贴出,毕竟要将一个双缓冲绘图的技术,分开不好将:

HDC hdcMem;
		HDC hdcScr = GetDC(m_hWnd);
		hdcMem = CreateCompatibleDC(hdcScr);
		SelectObject(hdcMem,m_hBmpBack);

		HDC hdcBlack;
		hdcBlack = CreateCompatibleDC(hdcMem);
		SelectObject(hdcBlack,m_hBmpBlack);
		HDC hdcWhite;
		hdcWhite = CreateCompatibleDC(hdcMem);
		SelectObject(hdcWhite,m_hBmpWhite);
		for(int i=0;i<8;i++)
			for(int j=0;j<8;j++)
			{
				if( Color_View[i][j] == 1)
				{
					BitBlt(hdcMem,i*60+4,j*60+4,52,52,hdcBlack,0,0,SRCCOPY);
				}
				if( Color_View[i][j] == 2)
				{
					BitBlt(hdcMem,i*60+4,j*60+4,52,52,hdcWhite,0,0,SRCCOPY);
				}
			}
		DeleteDC(hdcWhite);
		DeleteDC(hdcBlack);

		BitBlt(hdcScr,0,0,480,480+80,hdcMem,0,0,SRCCOPY);
		DeleteDC(hdcMem);
		DeleteDC(hdcScr);
呃,大家先慢慢看,我慢慢更新,今天一天更新的太多了,吃不消= =


相关文章推荐

【MFC三天一个游戏】之 局域网黑白棋

花了三天上班时间,妈的上班写就是不能静下心来,擦,要防BOSS巡山.... 以前也写过小游戏,俄罗斯方块,贪吃蛇....不过也都是单机版的,也没用MFC写过,是用QT写的,一天半天就出来了... ...
  • xinmuba
  • xinmuba
  • 2013年10月31日 17:07
  • 1592

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

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

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

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

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

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

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

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

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

文章的开头奉送上代码,方便大家对照学习。这二天写了一个仿美团的下拉刷新效果,效果图如下:怎么样还不错吧,下面我就教大家做。这个做的还是太粗糙,学习还行,用在项目中还要再改改。1.用到的知识点:其实这个...

VB做的黑白棋小游戏

  • 2009年05月22日 13:17
  • 5KB
  • 下载

一步一步教你做web套打

  • 2010年08月27日 16:39
  • 4.43MB
  • 下载

P3084 黑白棋游戏

P3084 黑白棋游戏  时间: 1000ms / 空间: 65536KiB / Java类名: Main 描述   黑白棋游戏的棋盘由4×4方格阵列构成。棋盘的每一方格中放...

一步一步教你做widows界面

  • 2011年08月27日 10:21
  • 168KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(连载)一步一步教你做黑白棋游戏(五)
举报原因:
原因补充:

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