//Game.cpp
#include "Game.h"
CGame::CGame(CDirectWnd *win)
{
m_win = win;
m_about = new CAbout(win);
m_bkground = new CBkGround(win);
m_menu = new CMenu(win);
m_objlist = NULL;
gamestate = game_menu;
}
CGame::~CGame()
{
ReleaseAll();
}
void CGame::ReleaseAll()
{
SAFE_DELETE(m_about);
SAFE_DELETE(m_bkground);
SAFE_DELETE(m_menu);
SAFE_DELETE(m_objlist);
}
void CGame::Run()
{
switch(gamestate)
{
case game_menu:
ShowMenu();
break;
case game_main:
GameLoop();
break;
case game_about:
ShowAbout();
break;
case game_quit:
PostMessage(m_win->GethWnd(), WM_QUIT, 0, 0);
break;
case game_over:
ShowGameOver();
break;
}
if(DDERR_SURFACELOST == m_win->FlipScreen())
m_win->LoadBitmapResource();
}
void CGame::ShowMenu()
{
int chooseitem = m_menu->Run();
if(KEYDOWN(VK_RETURN))
{
switch(chooseitem)
{
case 1:
m_win->m_music->Stop();
m_win->m_music->Play(1);
InitGame();
gamestate = game_main;
break;
case 2:
gamestate = game_about;
break;
case 3:
gamestate = game_quit;
break;
}
}
}
void CGame::ShowAbout()
{
m_about->Run();
if(KEYDOWN(VK_ESCAPE))
gamestate = game_menu;
}
void CGame::ShowGameOver()
{
RECT rtSrc, rtDest;
m_win->GetRect(&rtSrc, 0, 0, 640, 480/* / m_win->ScreenHeight * gameover*/);
m_win->GetRect(&rtDest, 0, m_win->ScreenHeight - gameover, m_win->ScreenWidth, gameover);
m_win->BltBitmap(m_win->lpBKGObject[10], &rtSrc, &rtDest);
if(gameover < 900)
gameover += 10;
if(KEYDOWN(VK_ESCAPE))
gamestate = game_menu;
}
void CGame::GameLoop()
{
if(KEYDOWN(VK_ESCAPE))
{
m_win->m_music->Stop();
m_win->m_music->Play(0);
SAFE_DELETE(m_objlist);
gamestate = game_menu;
return;
}
m_bkground->Run();
//显示关数
m_win->ShowText(m_win->ScreenWidth / 2 - 50, 20, "第");
m_win->ShowText(m_win->ScreenWidth / 2 - 30, 20, missionNum);
m_win->ShowText(m_win->ScreenWidth / 2 - 20, 20, "关");
//显示分数
m_win->ShowText(m_win->ScreenWidth / 2 + 70, 20, "分数");
m_win->ShowText(m_win->ScreenWidth / 2 + 110, 20, score);
if(missionFinish)
{
int w = m_win->ScreenWidth;
int h = m_win->ScreenHeight;
if(missionNum < 5)
{
m_win->ShowText(w / 2 - 100, h / 2 - 20, "第");
m_win->ShowText(w / 2 - 80, h / 2 - 20, missionNum);
m_win->ShowText(w / 2 - 70, h / 2 - 20, "关结束,请按CTRL键继续!");
if(KEYDOWN(VK_CONTROL))
{
missionNum++;
missionFinish = FALSE;
enemyNum = 0;
}
}
else if(5 == missionNum)
{
m_win->ShowText(w / 2 - 100, h / 2 - 20, "恭喜你,你已经通关了,请按ECS键退出!");
}
return;
}
if(!missionFinish)
{
CreateEnemy();
}
CPlayerPlane *pPlane;
CEnemyPlane *ePlane;
CBomb *bomb;
for(CObjNode *objnode = m_objlist->Head->next; objnode != m_objlist->Tail; objnode = objnode->next)
{
CObjNode *objnode1 = objnode->next;
while(objnode1 != m_objlist->Tail)
{
if(NULL != objnode1->obj)
{
CheckHit(objnode, objnode1);
objnode1 = objnode1->next;
}
}
if(NULL != objnode->obj)
{
objnode->obj->Run();
switch(objnode->obj->GetId())
{
case 0: //我机
pPlane = (CPlayerPlane *)(objnode->obj);
if(score > oldscore + 5000)
{
oldscore = score;
pPlane->SetLifeNum(pPlane->GetLifeNum() + 1);
//m_win->m_sound->Play(7, 0);
}
if(pPlane->GetLifeNum() == 0 && !pPlane->IsExist())
{
pPlane = NULL;
SAFE_DELETE(m_objlist);
gamestate = game_over;
return;
}
break;
case 2: //敌机
ePlane = (CEnemyPlane *)(objnode->obj);
if(ePlane->IsDead())
{
if(3 == ePlane->GetEnemyType())
{
missionFinish = true;
}
ePlane->SetExist(0);
score += ePlane->GetScore();
}
ePlane = NULL;
break;
case 5:
bomb = (CBomb *)(objnode->obj);
if(!bomb->IsExist())
{
KillAllEnemy();
}
bomb = NULL;
�
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
C++射击游戏之雷霆战机 (137个子文件)
雷霆战机.aps 33KB
loading.bMP 900KB
loading.bMP 900KB
EXPLODE.BMP 389KB
EXPLODE.BMP 389KB
GAMEOVER.BMP 300KB
GAMEOVER.BMP 300KB
ENEMY.BMP 88KB
ENEMY.BMP 88KB
BKGND.BMP 85KB
BKGND1.BMP 85KB
BKGND.BMP 40KB
BKGND1.BMP 40KB
BONUS.BMP 28KB
BONUS.BMP 28KB
BULLET.BMP 5KB
BULLET.BMP 5KB
BOMB.BMP 4KB
BOMB.BMP 4KB
LEFT.BMP 4KB
RIGHT.BMP 4KB
CENTER.BMP 4KB
LEFT.BMP 4KB
RIGHT.BMP 4KB
CENTER.BMP 4KB
ENEMY1.BMP 2KB
ENEMY1.BMP 2KB
Game.cpp 21KB
Sound.cpp 8KB
DirectWnd.cpp 7KB
PlayerPlane.cpp 5KB
EnemyPlane.cpp 4KB
Midi.cpp 2KB
Menu.cpp 2KB
Window.cpp 2KB
Explode.cpp 1KB
BkGround.cpp 1KB
About.cpp 1KB
Bomb.cpp 1KB
PlayerBullet.cpp 1KB
main.cpp 1KB
Bonus.cpp 1KB
EnemyBullet.cpp 1013B
ObjList.cpp 879B
BaseObj.cpp 357B
ObjNode.cpp 277B
Plane.cpp 150B
Bullet.cpp 143B
Thumbs.db 34KB
Thumbs.db 6KB
mt.dep 67B
雷霆战机.exe 88KB
DirectWnd.h 2KB
Game.h 1KB
BaseObj.h 1KB
PlayerPlane.h 1016B
EnemyPlane.h 740B
Midi.h 616B
Menu.h 593B
Bullet.h 551B
resource.h 496B
Window.h 494B
Sound.h 479B
BkGround.h 438B
Explode.h 436B
ObjList.h 419B
Bonus.h 415B
maroc.h 387B
About.h 376B
Plane.h 350B
PlayerBullet.h 328B
EnemyBullet.h 308B
ObjNode.h 285B
Bomb.h 280B
BuildLog.htm 9KB
FLY.ICO 766B
vc80.idb 643KB
雷霆战机.ilk 583KB
雷霆战机.exe.embed.manifest 403B
雷霆战机.exe.intermediate.manifest 385B
GAME.MID 100KB
GAME.MID 100KB
MENU.MID 6KB
MENU.MID 6KB
雷霆战机.ncb 9.39MB
Game.obj 73KB
DirectWnd.obj 53KB
EnemyPlane.obj 49KB
PlayerPlane.obj 48KB
Menu.obj 37KB
Bomb.obj 36KB
ObjList.obj 34KB
Midi.obj 34KB
PlayerBullet.obj 33KB
EnemyBullet.obj 33KB
Sound.obj 33KB
Explode.obj 33KB
About.obj 33KB
Bonus.obj 32KB
main.obj 32KB
共 137 条
- 1
- 2
木子技术组
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4