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

原创 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);
呃,大家先慢慢看,我慢慢更新,今天一天更新的太多了,吃不消= =


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

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

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

好吧,懒了大半年终于碰到需要这份教程的人了,我也要慢慢连载完这个东西了= = 好了,既然是C++,那么请允许我用类的基础方法实现这个小程序。 我们将要创建3个类, COthelloMai...
  • z175269158
  • z175269158
  • 2012年02月26日 11:29
  • 1852

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

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

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

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

一步一步教你做IOS推送

APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释。如下图   Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification ...
  • st646889325
  • st646889325
  • 2016年03月22日 11:15
  • 531

使用JavaScript和Canvas开发游戏

JavaScript与Canvas元素 HTML是为创建静态页面而生的。HTML所能实现的动态效果,也仅限于显示GIF动画和闪烁的文本。JavaScript改变了这一切,通过它能够动态修改网页。...
  • dang_jiajia
  • dang_jiajia
  • 2014年04月09日 11:15
  • 476

一步一步教你做ios推送

最近在研究ios的推送问题,遇到了一些问题,最终整理了一下。放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释。如下图   ...
  • sbvfhp
  • sbvfhp
  • 2013年09月03日 17:46
  • 1002

一步一步教你做LIS接口教程(五)

前面的一系列教程,都是讲的LIS接口与仪器设备的数据交换,既然是LIS接口,那么还有一部分就是LIS接口与LIS系统交互了。 之所以没有讲这个,一来是不同的LIS系统,数据结构不同,而且不同系统...
  • lazarus_net
  • lazarus_net
  • 2015年08月02日 18:55
  • 2714

一步一步教你做iOS推送

原文地址:http://blog.csdn.net/showhilllee/article/details/8631734 最近在研究ios的推送问题,遇到了一些问题,最终整理了一下。放在这...
  • u012894479
  • u012894479
  • 2015年05月12日 18:47
  • 322

简单的跑酷游戏

策划部分:关于游戏背景,我把主角设置成了《爱宠大机密》中的兔子小白(雪球),相信大家对与这只兔子相关的表情包不会陌生。       以此为背景,我打算设置一个在人类的追逐下,兔子尽力逃跑的故事情...
  • dkshkb
  • dkshkb
  • 2017年11月18日 23:00
  • 140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(连载)一步一步教你做黑白棋游戏(五)
举报原因:
原因补充:

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