/////////////////////////////////////////////////////////////////////////////////
//
//
//
//
/////////////////////////////////////////////////////////////////////////////////
#include <Stdio.h>
#include "CommonClass.h"
#include "LessonX.h"
////////////////////////////////////////////////////////////////////////////////
//
//
CGameMain g_GameMain;
float CGameMain::m_fBaseTime[3]={1.7f, 3.5f, 5.2f};
float CGameMain::m_fCurrentTime[3]={1.7f, 3.5f, 5.2f};
int CGameMain::m_iScore[3]={1, 2, 5};
float CGameMain::m_fSpeed[3]={10, 15, 25};
int CGameMain::m_iHighScore[5]= {0, 0, 0, 0, 0};
//==============================================================================
//
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//==============================================================================
//
// 构造函数
CGameMain::CGameMain()
{
m_iGameState =1;
m_iGameScore =0;
m_pDapao =new CSprite("dapao");
m_pTime =new CTextSprite("TimeText");
m_pKaishi =new CSprite("kaishi");
m_pZhunxing =new CSprite("zhunxing");
m_pScore =new CTextSprite("CurScoreText");
m_fPaodanLeftTime =0.f;
m_fScreenLeft =0.f;
m_fScreenRight =0.f;
m_fScreenTop =0.f;
m_fScreenBottom =0.f;
// m_fBaseTime =0.7f;
m_iCount =0;
m_pHead =NULL;
m_iShootScore =0;
for(int i=0;i<5;i++)
{
m_vScoreText[i]=new CTextSprite(CSystem::MakeSpriteName("ScoreText",i));
}
m_pGunFire = new CEffect("GunFire","",2.f);
m_pExplode = new CEffect("BumbExplode","",2.f);
m_pKaipao = new CSound("game/data/audio/kaipao.ogg",false,1);
m_pBaozha = new CSound("game/data/audio/baozha.ogg",false,1);
}
//==============================================================================
//
// 析构函数
CGameMain::~CGameMain()
{
}
//==============================================================================
//
// 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次
// 用以处理游戏的开始、进行中、结束等各种状态.
// 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒
void CGameMain::GameMainLoop( float fDeltaTime )
{
switch( GetGameState() )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
SetGameState(2); // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
// TODO 修改此处游戏循环条件,完成正确游戏逻辑
if( true )
{
GameRun( fDeltaTime );
}
else // 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态
{
SetGameState(0);
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
}
//=============================================================================
//响应键盘
void CGameMain::OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )
{
// 游戏还未开始,按下空格键,游戏开始。
if( KEY_SPACE == iKey && 0 == m_iGameState )
{
m_iGameState = 1; // 游戏开始
m_iGameScore = 0;
m_fGameTime = 30.f;//游戏剩余时间
// 每局游戏开始,初始得分为0
m_pScore->SetTextValue( m_iGameScore );
// 每局游戏开始,初始时间为30
m_pTime->SetTextValue((int)m_fGameTime);
// 隐藏 "空格开始" 提示图片
m_pKaishi->SetSpriteVisible( false );
// 隐藏鼠标
CSystem::ShowCursor( false );
}
}
// 每局开始前进行初始化,清空上一局相关数据
void CGameMain::GameInit()
{
m_fDapaoRotation=m_pDapao->GetSpriteRotation();
// 获取屏幕4个边界值
m_fScreenLeft = CSystem::GetScreenLeft();
m_fScreenRight = CSystem::GetScreenRight();
m_fScreenTop = CSystem::GetScreenTop();
m_fScreenBottom = CSystem::GetScreenBottom();
}
//=============================================================================
//使准心随鼠标移动,则需要获取到鼠标的坐标,同时赋给准心精灵
void CGameMain::OnMouseMove( const float fMouseX, const float fMouseY )
{
if( m_iGameState==1||m_iGameState==2 ) // 游戏开始
{
// 设置准星的位置,随鼠标移动
m_pZhunxing->SetSpritePosition(fMouseX, fMouseY);
float fX = m_pDapao->GetSpritePositionX();
float fY = m_pDapao->GetSpritePositionY();
float fRotation ;
float ftan = atan2((fMouseY-fY),(fMouseX-fX));
// 转换为角度值
fRotation=180*ftan/PI;
// 转换到0-360度
if(fRotation<0)
fRotation+=360;
m_pDapao->SetSpriteRotation(fRotation );
// 将炮筒的旋转方向控制在[280,350]之间
if(fRotation > 350 || fRotation < 135 )
fRotation = 350;
else if(fRotation < 280 && fRotation >=135)
fRotation = 280;
}
}
// 每局游戏进行中
void CGameMain::GameRun( float fDeltaTime )
{
m_fGameTime -= fDeltaTime;
if(m_fGameTime > 0)
{
m_pTime->SetTextValue((int)m_fGameTime); //显示剩余时间
m_fPaodanLeftTime -= fDeltaTime;
}
else
{
m_iGameState = 0;
CSystem::ShowCursor(true);
m_pKaishi->SetSpriteVisible(true);
m_pDapao->SetSpriteRotation(m_fDapaoRotation); //大炮炮口置回初始位置
UFO* pNode = NULL;
while(m_pHead != NULL)
{
pNode = m_pHead;
m_pHead = m_pHead->pNext;
CSprite* tmpSprite=FindUfoSpriteByName(pNode->szName);
tmpSprite->DeleteSprite();
free(pNode);
}
if(m_iGameScore > m_iHighScore[4])
{
m_iHighScore[4] = m_iGameScore;
for(int i=4; i>0; i--)
{
int temp=0;
if(m_iHighScore[i] > m_iHighScore[i-1])
{
temp = m_iHighScore[i-1];
m_iHighScore[i-1] = m_iHighScore[i];
m_iHighScore[i] = temp;
}
}
for(i=0; i<5; i++)
{
m_vScoreText[i]->SetTextValue(m_iHighScore[i]);
}
}
}
// 多架飞碟出现
float fPosX, fPosY;
/*char szName[128];
fPosY = m_fScreenTop - 5.f;
m_fBaseTime -= fDeltaTime;
if(m_fBaseTime <= 0)
{
m_fBaseTime = 0.7f;
fPosX = (float)CSystem::RandomRange(5, (int)m_fScreenRight - 5);
}
sprintf(szName, "ufo_%d", m_iCount++);
CSprite* tmpSprite=new CSprite(szName);
tmpSprite->CloneSprite("ufo_muban0");
tmpSprite->SetSpriteWorldLimit(WORLD_LIMIT_NULL, m_fScreenLeft-10.f, m_fScreenTop-10.f, m_fScreenRight+10.f, m_fScreenBottom+10.f);
tmpSprite->SetSpritePosition(fPosX, fPosY);
tmpSprite->SetSpriteLinearVelocityY(10);
m_vUfo.push_back(tmpSprite);*/
char szName[128], szName0[128];
fPosY = m_fScreenTop - 5.f; //飞碟出现的x坐标位置
for(int i=0; i<3; i++)
{
m_fCurrentTime[i] -= fDeltaTime;
if(m_fCurrentTime[i] <= 0)
{
m_fCurrentTime[i] = m_fBaseTime[i];
fPosX = (float)CSystem::RandomRange(5, (int)m_fScreenRight - 5);
sprintf(szName, "ufo_%d", m_iCount++);
// 不同飞碟复制不同的模板
sprintf(szName0, "ufo_muban%d", i);
CSprite* tmpSprite=new CSprite(szName);
tmpSprite->CloneSprite(szName0);
tmpSprite->SetSpritePosition(fPosX, fPosY);
tmpSprite->SetSpriteLinearVelocityY(m_fSpeed[i]);
tmpSprite->SetSpriteWorldLimit(WORLD_LIMIT_NULL, m_fScreenLeft-10.f, m_fScreenTop-10.f, m_fScreenRight+10.f, m_fScreenBottom+10.f);
tmpSprite->SetSpriteCollisionReceive(true);
// 将新的节点放入链表尾部
AddToList(szName, m_iScore[i]);
m_vUfo.push_back(tmpSprite);
}
}
}
//=============================================================================
//实现发射炮弹
void CGameMain::OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )
{
static int iNum = 0;
char szName[128];
if(m_iGameState && iMouseType==0 && m_fPaodanLeftTime<=0)
{
m_fPaodanLeftTime = 0.5f;
float fPosX, fPosY;
fPosX = m_pDapao->GetSpriteLinkPointPosX(1);
fPosY = m_pDapao->GetSpriteLinkPointPosY(1);
sprintf(szName, "paodan_%d", iNum++);
CSprite* tmpSprite =new CSprite(szName);
tmpSprite->CloneSprite("paodan_muban");
tmpSprite->SetSpriteWorldLimit(WORLD_LIMIT_NULL,m_fScreenLeft-10.f,m_fScreenTop-10.f,m_fScreenRight+10.f,m_fScreenBottom+10.f);
tmpSprite->SetSpritePosition(fPosX, fPosY);
tmpSprite->SpriteMoveTo(fMouseX, fMouseY, 100, false);
tmpSprite->SetSpriteCollisionSend(true);
m_vPaodan.push_b
没有合适的资源?快使用搜索试试~ 我知道了~
利用Funcode平台使用C++语言:打飞碟
共180个文件
dso:46个
cs:39个
png:26个
需积分: 5 9 下载量 155 浏览量
2022-04-10
10:52:37
上传
评论 4
收藏 2.23MB ZIP 举报
温馨提示
Funcode平台,C++语言
资源详情
资源评论
资源推荐
收起资源包目录
利用Funcode平台使用C++语言:打飞碟 (180个子文件)
CommonClass.a 78KB
VCTemplate.aps 63KB
level.t2d.bak 12KB
UFO.cbp 2KB
LessonX.cpp 11KB
Main.cpp 3KB
levelManagement.cs 14KB
options.cs 11KB
profiles.cs 10KB
keybindings.cs 10KB
align.cs 9KB
datablocks.cs 9KB
xml.cs 8KB
messageBox.cs 6KB
common.cs 5KB
chatClient.cs 5KB
projectManagement.cs 4KB
main.cs 4KB
serverConnection.cs 4KB
message.cs 4KB
clientConnection.cs 4KB
projectResources.cs 4KB
chatServer.cs 4KB
defaultPrefs.cs 4KB
screenshot.cs 3KB
metrics.cs 3KB
properties.cs 3KB
cursor.cs 3KB
audio.cs 2KB
server.cs 2KB
main.cs 2KB
help.cs 2KB
client.cs 2KB
message.cs 2KB
canvas.cs 2KB
main.cs 2KB
guiProfiles.cs 1KB
game.cs 1KB
kickban.cs 839B
scriptDoc.cs 640B
cursors.cs 598B
datablocks.cs 365B
brushes.cs 122B
persistent.cs 38B
banlist.cs 0B
UFOBackGround.dds 256KB
miniufoalt.dds 128KB
GunBody2.dds 32KB
GunRoot2.dds 32KB
GunBody.dds 8KB
GunRoot.dds 8KB
Begin.dds 8KB
Gold3.dds 1KB
Bomb.dds 1KB
Gold2.dds 1KB
Gold1.dds 1KB
crossHair.dds 1KB
joinServer.gui.dso 11KB
level.t2d.dso 9KB
profiles.cs.dso 9KB
levelManagement.cs.dso 9KB
options.gui.dso 9KB
align.cs.dso 9KB
xml.cs.dso 8KB
options.cs.dso 7KB
datablocks.cs.dso 6KB
console.gui.dso 6KB
keybindings.cs.dso 6KB
messageBox.cs.dso 5KB
chatGui.gui.dso 5KB
startServer.gui.dso 4KB
defaultPrefs.cs.dso 4KB
common.cs.dso 4KB
messageBoxOKCancelDetailsDlg.gui.dso 3KB
projectManagement.cs.dso 3KB
metrics.cs.dso 3KB
main.cs.dso 3KB
properties.cs.dso 3KB
messageBoxYesNoCancel.gui.dso 3KB
helpDlg.gui.dso 2KB
help.cs.dso 2KB
NetworkMenu.gui.dso 2KB
projectResources.cs.dso 2KB
messageBoxOKCancel.gui.dso 2KB
messageBoxYesNo.gui.dso 2KB
screenshot.cs.dso 2KB
messageBoxOk.gui.dso 2KB
audio.cs.dso 2KB
guiProfiles.cs.dso 1KB
cursor.cs.dso 1KB
messagePopup.gui.dso 1KB
waitingForServer.gui.dso 1KB
remap.gui.dso 1KB
FrameOverlayGui.gui.dso 848B
mainScreen.gui.dso 847B
canvas.cs.dso 836B
game.cs.dso 732B
main.cs.dso 689B
scriptDoc.cs.dso 458B
cursors.cs.dso 405B
共 180 条
- 1
- 2
0°ic
- 粉丝: 24
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Windows系统下安装与配置Neo4j的步骤
- 基于matlab实现潮流计算和最优潮流计算的程序1,对毕业设计有一定用处.rar
- 基于大数据学习资源推荐系统的设计与实现(部署视频)-kaic.mp4
- 哈工大形式语言和自动机2022期末含答案
- Windows系统下安装与配置Neo4j的步骤
- 哈希算法(Hash Algorithm)是一种将任意长度的二进制数据映射为较短的、固定长度的二进制值的函数.txt
- Windows系统下安装与配置Neo4j的步骤
- 在二叉树或更复杂的树形结构中,先序输出叶结点.txt
- 列出所有祖先结点的概念通常与树形结构或图论中的节点相关.txt
- 基于matlab实现潮流计算程序,MATLAB潮流计算程序.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0