VC++打地鼠游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章老鼠和滚球

1.1.实现思想

老鼠和滚球游戏,是我根据自己的意愿,是为了我将要说明的下面有关内容而设置的。由于没有经过具体实践,我并不能保证其趣味性和吸引力,我们学习的是它实现过程中的一些思想。希望对读者有所帮助。

其实,这种游戏,在街头电子游戏中是常见的。但由于电脑的渐渐普及,大规模游戏的迅速出现,已经不适合玩者的需求了。但是,我们可以以小见大,在学习小游戏的基础上,慢慢培养设计大游戏的一些方法和技巧。

关于游戏的角色:

老鼠,是游戏的主角,它有三条生命,它为了生存,必须能够逃脱灾难性的局面(被滚球撞到),它在经过所谓的适者生存的淘汰之后,学会了使用子弹;而且是一种能够消灭滚球的子弹,以达到防身的目的。每打中一个球得一分,每被撞一下失去一条生命。

滚球,一共有50个,但为了维持生态平衡,最多只能出来六个。滚球,是为了消灭老鼠而存在的,它将会在现代科技的伪随机函数中不定向地出现。

红心,生命的象征,只要你能碰到它,你就幸运了,因为由此你会得到一条生命。当然,生存需要竞争,需要你自己去创造;只要你在消灭了很多滚球之后,你才有可能取得。正因为这个原因,我把它安排在滚球出现的地方。

关于游戏的实现:

游戏,经常都是全屏的,但是由于我们的目的不仅仅在于游戏本身,我们的宗旨是利用游戏的趣味性和吸引力,来增强读者学习程序语言的信心。所以,在前面我们都没有用到全屏显示,我们不需要。

另外说明:本游戏的全屏只适应于800*600的分辨率。

全屏,是这个游戏的一点要学习的。多位图的移动,是本游戏要学习的第二个内容,上面的最多只有两个位图可以移动,这是由于游戏本身决定的。当然,这个游戏的多位图移动,也是游戏本身决定的,但却是我之所以选择它为第五章的原因。当然,我们没有那么多的手去操作键盘,去移动位图。我们必须设置我们的程序,让程序自己去执行,去移动,去显示计算机的优越性。

这个游戏,比起上面来,它是一个更加复杂的社会,它不再只是玩者一个人充当角色。所以,我们新建了各自的类。

新建工程5_1,为单文档默认设置。

2.2.制作位图

既然游戏是复杂的,它就需要很多位图,但由于我们在前面已经用了很多位图,我们这里就不多说了。只是说明一下位图的数量和大小。

背景位图:800*600 1张IDB_BITMAP1

老鼠位图:50*50 4张IDB_BITMAP2

(两只老鼠两个方向)IDB_BITMAP3

IDB_BITMAP7

IDB_BITMAP8

滚球位图:50*50 1张IDB_BITMAP4

红心位图:50*50 1张IDB_BITMAP11

子弹位图:50*50 4张IDB_BITMAP5

(两种颜色两个方向)IDB_BITMAP6

IDB_BITMAP9

IDB_BITMAP10

3.3.变量和函数

老鼠:

它有位置,分数,方向,生命力,子弹和它自己。其中它自己的图像及它射出来的子弹都有前后方向。我们必须为它定义一个类,以让两个老鼠共用。

新建类:CMouse

添加变量如下:

CPoint point;//位置

CBitmap bitmapa;//向后图像

CBitmap bitmapb;//向前图像

CBitmap shota;//向后子弹

CBitmap shotb;//向前子弹

int score;//分数

short direction;//方向

short lifes;//生命

滚球:

它也有位置,也有它自己的图像。由于一共有五十个球,最多会显示六个球,我们也定义它为一共类。

新建类:CBall

添加变量如下:

CPoint point;

CBitmap bitmap;//由于对称,我们只要一个位图

游戏:

由于它的复杂性,程序,由于它的复杂性,为了不使它们更加复杂,我们也为游戏的实现本身建立一个类。

新建类:CGame

添加变量如下:

CBall ball[6];//六个滚球

short ballnum;//滚球数:50

CMouse m1,m2;//两只老鼠

int yy[16][12];//屏幕数组

CBitmap shot;//子弹位图

bool heart1,heart2;//两个红心是否显示

CBitmap heart;//红心位图

既然是游戏本身,它必定要实现很多功能,我们添加如下函数:

void GetHeart();//老鼠得到红心

void KillBall();//老鼠打中滚球

void KillMouse();//滚球杀死老鼠

void Draw(CDC*pDC);//画界面

void DrawScore(CDC*pDC);//画分数

void BallMove();//使球滚动

最后,到了主程序,为了实现全屏,我们在CMainFrame 中添加如下变量和函数:CRect m_FullScreenRect;//全屏显示时的窗口位置

void OnFullScreen();//全屏显示

在CMy5_1View中添加如下变量和函数:

CGame game;//游戏对象

CBitmap cloud;//背景云图

OnTimer(UINT nIDEvent)

OnCreate(LPCREATESTRUCT lpCreateStruct)

OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

4.4.具体实现

全屏显示:

首先,我们必须使单文档以全屏形式出现,并设置为不能改动大小,没有工具栏和状态栏,没有菜单。

添加OnFullScreen()函数如下:

void CMainFrame::OnFullScreen()

{

// TODO: Add your command handler code here

CRect WindowRect;

GetWindowRect(&WindowRect);

CRect ClientRect;

RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);

ClientToScreen(&ClientRect);

//获取屏幕的分辨率

int nFullWidth=GetSystemMetrics(SM_CXSCREEN);

int nFullHeight=GetSystemMetrics(SM_CYSCREEN);

m_FullScreenRect.left=WindowRect.left-ClientRect.left;

m_FullScreenRect.top=WindowRect.top-ClientRect.top;

m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;

m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;

相关文档
最新文档