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

📄 killframe.cpp

📁 Windows CE 下Kill 游戏的源代码。
💻 CPP
字号:
// KillFrame.cpp : implementation file
//

#include "stdafx.h"
#include "resource.h"
#include "KillFrame.h"

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

struct mon          //怪物
{
	int x;          //贴图的 X 坐标
	int post;          //方向
	int state;      //贴图位置
};
struct pig          //飞猪
{
	int x;          //X坐标
	int y;          //Y坐标
	int post;       //方向
	int state;      //贴图位置
	CRect r;        //碰撞点
};
struct blood        //血
{
	int helth;      //血的数量
	int y;          //骷髅位置
	int state;      //贴图位置
};
struct foods          //食物
{
	POINT p[4];     //碰撞点
	int x;          //X坐标
	int y;          //Y坐标
	int type;       //食物种类
	int speed;      //下落速度
	BOOL exist;     //是否显示
	int state;      //贴图位置
};
/////////////////////////////////////////////////////////////////////////////
// CKillFrame

IMPLEMENT_DYNCREATE(CKillFrame, CFrameWnd)
int i,j;
mon mon;//怪物
pig pig;//飞猪
foods food[20];//食物
int fcount;//食物计数
blood blood;//血
int source;

CKillFrame::CKillFrame()
{
	//创建新窗体
	Create(NULL,"抢食专家",WS_POPUP);
	MoveWindow(0,0,640,480);
	CClientDC dc(this);
    //创建DC
	mdc = new CDC;
	mdc1 = new CDC;
	mdc->CreateCompatibleDC(&dc);
	mdc1->CreateCompatibleDC(&dc);
    //加载背景图片
	m_back = new CBitmap;
	m_back->LoadBitmap(IDB_BACK);
	//加载怪物图片
	m_mon = new CBitmap;
	m_monmask = new CBitmap;
	m_mon->LoadBitmap(IDB_MON);
	m_monmask->LoadBitmap(IDB_MONM);
	//加载飞猪图片
	m_pig = new CBitmap;
	m_pigmask = new CBitmap;
	m_pig->LoadBitmap(IDB_PIG);
	m_pigmask->LoadBitmap(IDB_PIGM);
	m_pigr = new CBitmap;
	m_pigrmask = new CBitmap;
	m_pigr->LoadBitmap(IDB_PIGR);
	m_pigrmask->LoadBitmap(IDB_PIGRM);
	//加载食物1图片
	m_food1 = new CBitmap;
	m_food1mask = new CBitmap;
	m_food1->LoadBitmap(IDB_FOOD1);
	m_food1mask->LoadBitmap(IDB_FOOD1M);
	//加载食物2图片
	m_food2 = new CBitmap;
	m_food2mask = new CBitmap;
	m_food2->LoadBitmap(IDB_FOOD2);
	m_food2mask->LoadBitmap(IDB_FOOD2M);
	//加载食物3图片
	m_food3 = new CBitmap;
	m_food3mask = new CBitmap;
	m_food3->LoadBitmap(IDB_FOOD3);
	m_food3mask->LoadBitmap(IDB_FOOD3M);
	//加载食物4图片
	m_food4 = new CBitmap;
	m_food4mask = new CBitmap;
    m_food4->LoadBitmap(IDB_FOOD4);
	m_food4mask->LoadBitmap(IDB_FOOD4M);
	//加载食物5图片
	m_food5 = new CBitmap;
	m_food5mask = new CBitmap;
	m_food5->LoadBitmap(IDB_FOOD5);
	m_food5mask->LoadBitmap(IDB_FOOD5M);
	//加载血图片
	m_blood = new CBitmap;
	m_blood->LoadBitmap(IDB_BLOOD);
	//加载结束图片
	m_over = new CBitmap;
	m_overmask = new CBitmap;
	m_over ->LoadBitmap(IDB_OVER);
	m_overmask ->LoadBitmap(IDB_OVERM);
	//处理内存区
	m_temp = new CBitmap;
	m_temp->CreateCompatibleBitmap(&dc,640,480);
	//怪物位置
	mon.state=0;
	mon.x=10;
	mon.post=0;
	mdc->SelectObject(m_temp);

	//血的大小
	blood.helth =350;
	blood.state = 0;
	blood.y = 30;
	//纪录
	source = 0;
}
//清空内存
CKillFrame::~CKillFrame()
{
	delete mdc;
	delete mdc1;
	delete m_back;
	delete m_temp;
	delete m_mon;
	delete m_monmask;
	delete m_pig;
	delete m_pigmask;
	delete m_pigr;
	delete m_pigrmask;
	delete m_food1;
	delete m_food1mask;
	delete m_food2;
	delete m_food2mask;
	delete m_food3;
	delete m_food3mask;
	delete m_food4;
	delete m_food4mask;
	delete m_food5;
	delete m_food5mask;
	delete m_blood;
	delete m_over;
	delete m_overmask;
}


BEGIN_MESSAGE_MAP(CKillFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CKillFrame)
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKillFrame message handlers

int CKillFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	//开启时间计数棋
	SetTimer(1,100,NULL);
	return 0;
}
//时间回调函数
void CKillFrame::OnTimer(UINT nIDEvent) 
{
	CClientDC dc(this);

	//画背景
	mdc1->SelectObject(m_back);
	mdc->BitBlt(0,0,640,480,mdc1,0,0,SRCCOPY);
    //怪物移动
    MonMove();
	//怪物仍东西
    CreateFood();
	//画食物
    FoodMove();
	//画猪
    PigMove();
	//飞猪吃食物
    EatFood();
    //显示血
    Blood();
	//写纪录
    CString str;
	str.Format("分数:%d",source);
	mdc->TextOut(0,0,str);
    //输出到屏幕
	dc.BitBlt(0,0,640,480,mdc,0,0,SRCCOPY);
	CFrameWnd::OnTimer(nIDEvent);
}
//怪物移动
void CKillFrame::MonMove()
{
	
	if(mon.state >= 8)
	{
		mon.state = 0;
	}
	//判断方向
	if(mon.x>=442)
	{
		mon.post = 1;
	}
	if(mon.x<=10)
	{
		mon.post = 0;
	}
	if(mon.post == 0)
	{
		mon.x+=10;
	}
	if(mon.post == 1)
	{
		mon.x-=10;
	}
    //画怪物到内存
	mdc1->SelectObject(m_monmask);
	mdc->BitBlt(mon.x,0,98,120,mdc1,mon.state*98,0,SRCAND);
	mdc1->SelectObject(m_mon);
	mdc->BitBlt(mon.x,0,98,120,mdc1,mon.state*98,0,SRCPAINT);
	mon.state++;
}
//画猪
void CKillFrame::PigMove()
{
	if(pig.state >= 8)
	{
		pig.state = 0;
	}

	//画猪到内存
	if(pig.post == 1)
	{
	    mdc1->SelectObject(m_pigmask);
	    mdc->BitBlt(pig.x,360,120,120,mdc1,pig.state*120,0,SRCAND);
	    mdc1->SelectObject(m_pig);
	    mdc->BitBlt(pig.x,360,120,120,mdc1,pig.state*120,0,SRCPAINT);
	}
	else
	{
	    mdc1->SelectObject(m_pigrmask);
	    mdc->BitBlt(pig.x,360,120,120,mdc1,pig.state*120,0,SRCAND);
	    mdc1->SelectObject(m_pigr);
	    mdc->BitBlt(pig.x,360,120,120,mdc1,pig.state*120,0,SRCPAINT);
	}
	    pig.state++;
}
//飞猪移动
void CKillFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if(nChar == VK_LEFT)
	{
		if(pig.x <= 0)
		{
			pig.x = 0;
		}
		else
		{
		    pig.x-= 20;
		}
		//设置碰撞点
		pig.r.left = pig.x+38;
		pig.r.right = pig.x+94;
		pig.r.top = 417;
		pig.r.bottom = 450;

		pig.post = 0;
	}
	if(nChar == VK_RIGHT)
	{
		if(pig.x>=420)
		{
			pig.x = 420;
		}
		else
		{
		    pig.x+=20;
		}
	    //设置碰撞点
		pig.r.left = pig.x+38;
		pig.r.right = pig.x+94;
		pig.r.top = 417;
		pig.r.bottom = 450;

		pig.post = 1;
	}
	//退出游戏
	if(nChar == VK_SPACE)
	{
		PostMessage(WM_CLOSE);
	}
	CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
//食物移动
void CKillFrame::FoodMove()
{

	for(i=0;i<20;i++)
	{
		if(food[i].exist)
		{
			switch(food[i].type)
			{
			case 0:                     //食物1
				//画图
				if(food[i].state>=8)
				{
					food[i].state = 0;
				}

				food[i].y+=food[i].speed;
				
				mdc1->SelectObject(m_food1mask);
				mdc->BitBlt(food[i].x,food[i].y,40,40,mdc1,food[i].state*40,0,SRCAND);
				mdc1->SelectObject(m_food1);
				mdc->BitBlt(food[i].x,food[i].y,40,40,mdc1,food[i].state*40,0,SRCPAINT);
                food[i].state++;

				food[i].p[0].x = food[i].x+13;
				food[i].p[0].y = food[i].y+38;
				food[i].p[1].x = food[i].x+27;
				food[i].p[1].y = food[i].y+38;
				food[i].p[2].x = food[i].x+9;
				food[i].p[2].y = food[i].y+12;
				food[i].p[3].x = food[i].x+30;
				food[i].p[3].y = food[i].y+12;
				if(food[i].y>=480)
				{
					food[i].exist = FALSE;
					blood.helth-=30;
					fcount--;
				}
				break;
			case 1:                    //食物2
				//画图
				if(food[i].state>=4)
				{
					food[i].state = 0;
				}
				food[i].y+=food[i].speed;

				mdc1->SelectObject(m_food2mask);
				mdc->BitBlt(food[i].x,food[i].y,40,74,mdc1,food[i].state*40,0,SRCAND);
				mdc1->SelectObject(m_food2);
				mdc->BitBlt(food[i].x,food[i].y,40,74,mdc1,food[i].state*40,0,SRCPAINT);
				food[i].state++;

				food[i].p[0].x = food[i].x+20;
				food[i].p[0].y = food[i].y+70;
				food[i].p[1].x = food[i].x+5;
				food[i].p[1].y = food[i].y+58;
				food[i].p[2].x = food[i].x+35;
				food[i].p[2].y = food[i].y+58;
				food[i].p[3].x = food[i].x+20;
				food[i].p[3].y = food[i].y+42;
				if(food[i].y>=480)
				{
					food[i].exist = FALSE;
					blood.helth-=30;
					fcount--;
				}
				break;
			case 2:                   //食物3
				//画图
				if(food[i].state>=3)
				{
					food[i].state = 0;
				}
				food[i].y+=food[i].speed;

				mdc1->SelectObject(m_food3mask);
				mdc->BitBlt(food[i].x,food[i].y,40,52,mdc1,food[i].state*40,0,SRCAND);
				mdc1->SelectObject(m_food3);
				mdc->BitBlt(food[i].x,food[i].y,40,52,mdc1,food[i].state*40,0,SRCPAINT);
				food[i].state++;

				food[i].p[0].x = food[i].x+20;
				food[i].p[0].y = food[i].y+37;
				food[i].p[1].x = food[i].x+7;
				food[i].p[1].y = food[i].y+25;
				food[i].p[2].x = food[i].x+35;
				food[i].p[2].y = food[i].y+27;
				food[i].p[3].x = food[i].x+22;
				food[i].p[3].y = food[i].y+17;
				if(food[i].y>=480)
				{
					food[i].exist = FALSE;
					blood.helth-=30;
					fcount--;
				}
				break;
			case 3:                   //食物4
				//画图
				if(food[i].state>=7)
				{
					food[i].state = 0;
				}
				food[i].y+=food[i].speed;

				mdc1->SelectObject(m_food4mask);
				mdc->BitBlt(food[i].x,food[i].y,40,40,mdc1,food[i].state*40,0,SRCAND);
				mdc1->SelectObject(m_food4);
				mdc->BitBlt(food[i].x,food[i].y,40,40,mdc1,food[i].state*40,0,SRCPAINT);
				food[i].state++;

				food[i].p[0].x = food[i].x+7;
				food[i].p[0].y = food[i].y+32;
				food[i].p[1].x = food[i].x+30;
				food[i].p[1].y = food[i].y+32;
				food[i].p[2].x = food[i].x+30;
				food[i].p[2].y = food[i].y+8;
				food[i].p[3].x = food[i].x+7;
				food[i].p[3].y = food[i].y+9;

				if(food[i].y>=480)
				{
					food[i].exist = FALSE;
					blood.helth-=10;
					fcount--;
				}
				break;
			case 4:                   //食物5
				//画图
				if(food[i].state>=2)
				{
					food[i].state = 0;
				}
				food[i].y+=food[i].speed;

				mdc1->SelectObject(m_food5mask);
				mdc->BitBlt(food[i].x,food[i].y,40,50,mdc1,food[i].state*40,0,SRCAND);
				mdc1->SelectObject(m_food5);
				mdc->BitBlt(food[i].x,food[i].y,40,50,mdc1,food[i].state*40,0,SRCPAINT);
				food[i].state++;
				food[i].p[0].x = food[i].x+12;
				food[i].p[0].y = food[i].y+40;
				food[i].p[1].x = food[i].x+32;
				food[i].p[1].y = food[i].y+40;
				food[i].p[2].x = food[i].x+32;
				food[i].p[2].y = food[i].y+9;
				food[i].p[3].x = food[i].x+12;
				food[i].p[3].y = food[i].y+9;
				if(food[i].y>=480)
				{
					food[i].exist = FALSE;
					blood.helth-=10;
					fcount--;
				}
				break;
			}
		}
	}
}
//怪物仍东西
void CKillFrame::CreateFood()
{
	switch(rand()%((fcount+3)*10))
	{
	case 0:
		for(i=0;i<20;i++)
		{
			if(!food[i].exist)
			{
				food[i].x = mon.x;
				food[i].y = 40;
				food[i].exist = TRUE;
				food[i].type = 0;
				food[i].state = 0;
				food[i].speed = rand()%7+2;
				fcount++;
				return;
			}
		}
	case 1:
		for(i=0;i<20;i++)
		{
			if(!food[i].exist)
			{
				food[i].x = mon.x;
				food[i].y = 40;
				food[i].exist = TRUE;
				food[i].type = 1;
				food[i].state = 0;
				food[i].speed = rand()%7+2;
				fcount++;
				return;
			}
		}
	case 2:
		for(i=0;i<20;i++)
		{
			if(!food[i].exist)
			{
				food[i].x = mon.x;
				food[i].y = 40;
				food[i].exist = TRUE;
				food[i].type = 2;
				food[i].state = 0;
				food[i].speed = rand()%7+2;
				fcount++;
				return;
			}
		}
    case 3:
		for(i=0;i<20;i++)
		{
			if(!food[i].exist)
			{
				food[i].x = mon.x;
				food[i].y = 40;
				food[i].exist = TRUE;
				food[i].type = 3;
				food[i].state = 0;
				food[i].speed = rand()%7+2;
				fcount++;
				return;
			}
		}
	case 4:
		for(i=0;i<20;i++)
		{
			if(!food[i].exist)
			{
				food[i].x = mon.x;
				food[i].y = 40;
				food[i].exist = TRUE;
				food[i].type = 4;
				food[i].state = 0;
				food[i].speed = rand()%7+2;
				fcount++;
				return;
			}
		}
	}
}
//显示血
void CKillFrame::Blood()
{
	if(blood.state>=4)
	{
		blood.state = 0;
	}
	if(blood.helth>350)
	{
		blood.helth=350;
	}
	//游戏结束
	if(blood.helth<=0)
	{
		KillTimer(1);
		mdc1->SelectObject(m_overmask);
		mdc->BitBlt(0,100,640,150,mdc1,0,0,SRCAND);
		mdc1->SelectObject(m_over);
		mdc->BitBlt(0,100,640,150,mdc1,0,0,SRCPAINT);
	}
	mdc1->SelectObject(m_blood);
	mdc->BitBlt(600,blood.y,8,blood.helth,mdc1,blood.state*8,0,SRCCOPY);
	blood.state++;
}
//飞猪吃食物
void CKillFrame::EatFood()
{
	for(i=0;i<20;i++)
	{
		if(food[i].exist)
		{
			//开始监测碰撞
			for(j=0;j<4;j++)
			{
				if(pig.r.PtInRect(food[i].p[j]))
				{
					switch(food[i].type)
					{
					case 0:
						source+=1;
						blood.helth+=5;
						break;
					case 1:
						source+=2;
						blood.helth+=10;
						break;
					case 2:
						source+=5;
						blood.helth+=20;
						break;
					case 3:
						source+=10;
						blood.helth-=150;
						break;
					case 4:
						source+=5;
						blood.helth-=100;
						break;
					}
					food[i].exist = FALSE;
					fcount--;
					break;
				}
			}
		}
	}
}

⌨️ 快捷键说明

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