⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.cpp

📁 简单的躲炸弹的游戏
💻 CPP
字号:
// Game.cpp: implementation of the CGame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "5_1.h"
#include "Game.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGame::CGame()
{
	int i,j;
	heart.LoadBitmap(IDB_BITMAP11);
	m1.bitmapb.LoadBitmap(IDB_BITMAP2);
	m2.bitmapb.LoadBitmap(IDB_BITMAP3);
	m1.bitmapa.LoadBitmap(IDB_BITMAP7);
	m2.bitmapa.LoadBitmap(IDB_BITMAP8);
	m1.shotb.LoadBitmap(IDB_BITMAP5);
	m2.shotb.LoadBitmap(IDB_BITMAP9);
	m1.shota.LoadBitmap(IDB_BITMAP6);
	m2.shota.LoadBitmap(IDB_BITMAP10);
	//生命数量为3
	m1.lifes=3;
	m2.lifes=3;
	//红心显示
	heart1=true;
	heart2=true;
	//滚球数量50
	ballnum=50;

	for(i=0;i<6;i++)
		ball[i].bitmap.LoadBitmap(IDB_BITMAP4);		
	//滚球开始出现的位置
	for(i=0;i<3;i++)
	{
		ball[i].point.x=4+i;
		ball[i].point.y=0;
		ball[i+3].point.x=9+i;
		ball[i+3].point.y=0;
	}
	//老鼠开始出现的位置
	m1.point.x=0;
	m1.point.y=10;
	m2.point.x=15;
	m2.point.y=10;
	//老鼠开始的方向
	m1.direction=1;
	m2.direction=-1;
	//清理背景数组,或1或0
	for(i=0;i<16;i++)
		for(j=0;j<11;j++)
			yy[i][j]=0;
	yy[4][1]=1;
	yy[5][1]=1;
	yy[6][1]=1;
	yy[9][1]=1;
	yy[10][1]=1;
	yy[11][1]=1;
	for(i=0;i<16;i++)
		yy[i][3]=1;
	yy[5][3]=0;
	yy[10][3]=0;
	
	for(i=5;i<11;i++)
		yy[i][5]=1;
	for(i=4;i<12;i++)
		yy[i][7]=1;
	for(i=0;i<5;i++)
		yy[i][9]=1;
	for(i=11;i<16;i++)
		yy[i][9]=1;
	for(i=0;i<16;i++)
		yy[i][11]=1;

}

CGame::~CGame()
{

}

void CGame::DrawScore(CDC *pDC)
{
	int nOldDC=pDC->SaveDC();	
	//设置字体
	CFont font;    
	if(0==font.CreatePointFont(250,"Comic Sans MS"))
					{
						AfxMessageBox("Can't Create Font");
					}
	pDC->SelectObject(&font);
    //设置字体颜色及其背景颜色
	CString str;
	pDC->SetTextColor(RGB(0,10,244));
	pDC->SetBkColor(RGB(0,255,0));
    //输出数字
	str.Format("%d",m1.score);	
	if(m2.score>=0)
		pDC->TextOut(40,28,str);
	str.Format("%d",m2.score);	
	if(m2.score>=0)
		pDC->TextOut(740,28,str);

	pDC->RestoreDC(nOldDC);

}

void CGame::Draw(CDC *pDC)
{
	int i,j;
	 CDC Dc;
	 if(Dc.CreateCompatibleDC(pDC)==FALSE)
		  AfxMessageBox("Can't create DC");
	 //在不同位置显示位图
	 //显示老鼠位图
	 if(m2.lifes>0)
	 {
		Dc.SelectObject(m2.direction==1?m2.bitmapb:m2.bitmapa);
		pDC->BitBlt(m2.point.x*50,m2.point.y*50,50,50,&Dc,0,0,SRCCOPY);
	 }
	 if(m1.lifes>0)
	 {
		Dc.SelectObject(m1.direction==1?m1.bitmapb:m1.bitmapa);
		pDC->BitBlt(m1.point.x*50,m1.point.y*50,50,50,&Dc,0,0,SRCCOPY);
	 }
	 //画滚球
	 //大于六个的画六个
	 j=ballnum-m1.score;
	 j=j-m2.score;
	 if(j>6)
		 j=6;
	for(i=0;i<j;i++)
	{
		Dc.SelectObject(ball[i].bitmap);
		pDC->BitBlt(ball[i].point.x*50,ball[i].point.y*50,50,50,&Dc,0,0,SRCCOPY);
	}
	//检查界面数组
	//2表示m2的子弹,3表示m1的子弹
		for(i=0;i<16;i++)
			for(j=0;j<12;j++)
			{
				if(yy[i][j]==2)
				{
					Dc.SelectObject(m2.direction==1?m2.shotb:m2.shota);
					pDC->BitBlt(i*50,j*50,50,50,&Dc,0,0,SRCCOPY);
				}
				if(yy[i][j]==3)
				{
					Dc.SelectObject(m1.direction==1?m1.shotb:m1.shota);
					pDC->BitBlt(i*50,j*50,50,50,&Dc,0,0,SRCCOPY);
				}
			}
	//画老鼠的生命数量
	for(i=0;i<m1.lifes;i++)
	{
		Dc.SelectObject(m1.bitmapb);
		pDC->StretchBlt(i*40+10,0,30,30,&Dc,0,0,50,50,SRCCOPY);
	}
	for(i=0;i<m2.lifes;i++)
	{
		Dc.SelectObject(m2.bitmapa);
		pDC->StretchBlt(760-i*40,0,30,30,&Dc,0,0,50,50,SRCCOPY);
	}
	//显示分数
	DrawScore(pDC);
	//显示红心
	Dc.SelectObject(heart);
	if(heart1)
		pDC->BitBlt(250,0,50,50,&Dc,0,0,SRCCOPY);
	if(heart2)
		pDC->BitBlt(500,0,50,50,&Dc,0,0,SRCCOPY);

}
void CGame::BallMove()
{	int i,j,k;
    j=ballnum-m1.score;
	j=j-m2.score;
	if(j>6)
		j=6;
	
	for( i=0;i<j;i++)
	{
		//其中三个
		if((i==1)||(i==3)||(i==5))
		{
			//向右移动
			ball[i].point.x++;
			//到了边界,在左边出现
			if(ball[i].point.x>15)
				ball[i].point.x=0;
			//下面空,下掉
			if(yy[ball[i].point.x][ball[i].point.y+1]!=1)
				for(k=ball[i].point.y;k<12;k++)
					if(yy[ball[i].point.x][k]==1)
					{
						ball[i].point.y=k-1;
						break;
					}
			//到了最底面
			if((ball[i].point.x==15)&&(ball[i].point.y==10))
			{
				//在上面出现
				if(i==1)
				{
				ball[i].point.x=10;
				ball[i].point.y=-1;
				}
				else
				{
					ball[i].point.x=5;
					ball[i].point.y=-1;
				}
			}
		}
		//同上
		else if((i==2)||(i==4)||(i==0))
		{
			ball[i].point.x--;
			if(ball[i].point.x<0)
				ball[i].point.x=15;
			if(yy[ball[i].point.x][ball[i].point.y+1]!=1)
				for(k=ball[i].point.y;k<12;k++)
					if(yy[ball[i].point.x][k]==1)
					{
						ball[i].point.y=k-1;
						break;
					}
				if((ball[i].point.x==0)&&(ball[i].point.y==10))
				{
					if(i==2)
					{
					ball[i].point.x=5;
					ball[i].point.y=0;
					}
					else
					{
						ball[i].point.x=10;
						ball[i].point.y=0;
					}

				}
		}

	}
}

void CGame::KillMouse()
{
	int i;
	for(i=0;i<6;i++)
	{
		//老鼠的位置和滚球的位置
		if(m1.point==ball[i].point)
		{
			//生命减少
			m1.lifes--;
			//老鼠重新出现
			m1.point.x=7;
			m1.point.y=6;
		}
		//同上
		if(m2.point==ball[i].point)
		{
			m2.lifes--;
			m2.point.x=8;
			m2.point.y=6;
		}

	}
}

void CGame::KillBall()
{
	for(int i=0;i<6;i++)
		//m2的子弹
		if(yy[ball[i].point.x][ball[i].point.y]==2)
		{	
			//m2的分数添加
			m2.score++;
			//滚球消失
			ball[i].point.x=5;
			ball[i].point.y=-1;
		}
		//同上
		else if(yy[ball[i].point.x][ball[i].point.y]==3)
		{	
			m1.score++;
			ball[i].point.x=10;
			ball[i].point.y=-1;
		}
}

void CGame::GetHeart()
{
	//是哪个老鼠是得到了哪个红心
    //第一只老鼠
	if((m1.point.x==5)&&(m1.point.y==0))
		//第一只红心
		if(heart1)
		{
			m1.lifes++;
			heart1=false;
		}
	if((m2.point.x==5)&&(m2.point.y==0))
		if(heart1)
		{
			m2.lifes++;
			heart1=false;
		}
	if((m1.point.x==10)&&(m1.point.y==0))
		if(heart2)
		{
			m1.lifes++;
			heart2=false;
		}
	if((m2.point.x==10)&&(m2.point.y==0))
		if(heart2)
		{
			m2.lifes++;
			heart2=false;
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -