/////////////////////////////////////////////////////////////////////////////////
//
//
//
//
/////////////////////////////////////////////////////////////////////////////////
#include <Stdio.h>
#include "CommonClass.h"
#include "LessonX.h"
////////////////////////////////////////////////////////////////////////////////
//
//
CGameMain g_GameMain;
//==============================================================================
//
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//==============================================================================
//
// 构造函数
CGameMain::CGameMain()
{
m_iGameState = 0;
m_iFireState = 0;
for(int i=0;i<TARGET_COUNT;i++)
{
m_iTargetHit[i]=0;
m_pTarget[i]=new CAnimateSprite(CSystem::MakeSpriteName("DandanTarget",i));
}
m_pStoneSprite = new CSprite("DandanBlock1"); //创建石块精灵
m_pBottomWall = new CSprite("DandanPlatform"); //创建精灵下方地面精灵
m_iGameState = 1;
m_fGunRotation = 350.f;
m_fGunStrength = 0.f;
m_iCalStrength = 0;
m_fKeyUp = 0.f;
m_fKeyDown = 0.f;
m_pDandanGun = new CSprite("DandanGun");
m_pDegreeText = new CTextSprite("DegreeText");
m_pStrengthText = new CTextSprite("StrengthText");
m_pBumpTemplate = new CSprite("BumbTemplate");
//错误...
m_fRoundTime = 0.f;
for(int j=0;j<TARGET_COUNT;j++)
{
m_pBump[j]=new CAnimateSprite(CSystem::MakeSpriteName("DandanBumb",j));
}
//...
m_pBumpExplode = new CEffect("BumbExplode","BumbExplode",0.f);
//初始场景天空边界和右侧边界
m_spVerSide = new CSprite("limit1");
m_spHorSide = new CSprite("limit2");
}
//==============================================================================
//
// 析构函数
CGameMain::~CGameMain()
{
}
//==============================================================================
//
// 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次
// 用以处理游戏的开始、进行中、结束等各种状态.
// 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒
void CGameMain::GameMainLoop( float fDeltaTime )
{
switch( GetGameState() )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
SetGameState(2); // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
// TODO 修改此处游戏循环条件,完成正确游戏逻辑
if( !IsGameWin() )
{
GameRun( fDeltaTime );
}
else // 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态
{
SetGameState(0);
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
}
//=============================================================================
//
// 每局开始前进行初始化,清空上一局相关数据
void CGameMain::GameInit()
{
m_iFireState = 0; // 初始化为未开炮状态
int iLoop = 0;
float fPosX = 0, fPosY = 0;
for( iLoop = 0; iLoop < TARGET_COUNT; iLoop++ )
{
m_iTargetHit[iLoop] = 0;
// 在X方向上,目标在0-45范围内随机移动
fPosX = CSystem::RandomRange( 0, 45 );
fPosY = m_pTarget[iLoop]->GetSpritePositionY();
m_pTarget[iLoop]->SpriteMoveTo(fPosX, fPosY, 40.f, 1);
m_pTarget[iLoop]->SetSpriteVisible(1);
// 恢复初始动画/图片
m_pTarget[iLoop]->AnimateSpritePlayAnimation("DandanTargetAnimation1", 0);
}
m_fGunRotation = m_fMaxRotation; // 炮台的初始角度为最大角度
m_fGunStrength = 0.f;
for(int i=0;i<TARGET_COUNT;i++)
{
m_pTarget[i]->SetSpriteCollisionReceive(1);//设置目标精灵为接收碰撞
m_pBump[i]->SetSpriteCollisionSend(1); //设置炮弹精灵为发送碰撞
}
m_pStoneSprite->SetSpriteCollisionReceive(1); //设置石块精灵为接收碰撞
m_pBottomWall->SetSpriteCollisionReceive(1);//设置地面精灵为接收碰撞
m_spVerSide->SetSpriteCollisionReceive(1);//设置天空边界精灵为接受碰撞
m_spHorSide->SetSpriteCollisionReceive(1);//设置右侧边界精灵为接受碰撞
if( strcmp( szSrcName, m_pBump[3]->GetName() ) == 0)
{
if(strstr( szTarName, "VerSide" ) )
{
float fVelX = m_pBump[3]->GetSpriteLinearVelocityX();
m_pBump[3]->SetSpriteLinearVelocityX(fVelX * -1.f);
}
else if(strstr( szTarName, "HorSide" ) )
{
float fVelY = m_pBump[3]->GetSpriteLinearVelocityY();
m_pBump[3]->SetSpriteLinearVelocityY(fVelY * -1.f);
}
}
}
//=============================================================================
//
// 每局游戏进行中
void CGameMain::GameRun( float fDeltaTime )
{
if( 0 == m_iFireState )
{
if( m_iCalStrength )
{
m_fGunStrength += 50.f * fDeltaTime; // 50每秒
if( m_fGunStrength > 200.f ) //大炮力度的最大值
m_fGunStrength = 200.f;
}
// 15度每秒
m_fGunRotation += (m_fKeyDown - m_fKeyUp) * 15.f * fDeltaTime;
if( m_fGunRotation < 280.f ) //大炮角度的最小值
m_fGunRotation = 280.f;
else if( m_fGunRotation > m_fMaxRotation ) // 角度超过最大值
m_fGunRotation = m_fMaxRotation; // 回到初始位置
float fOldPosX = m_pDandanGun->GetSpriteLinkPointPosX(1);
float fOldPosY = m_pDandanGun->GetSpriteLinkPointPosY(1);
float fNewPosX = 0.f, fNewPosY = 0.f;
float fVelocityX=CSystem::RotationToVectorX( m_fGunRotation ) * m_fGunStrength;
float fVelocityY=CSystem::RotationToVectorY( m_fGunRotation ) * m_fGunStrength;
float fMass = m_pBumpTemplate->GetSpriteMass();
float fHalfTime = - fVelocityY / (m_fBumbForceY / fMass);
float fForceVelY = m_fBumbForceY / fMass;
float fTime = 0.f;
float fSimDelta = 0.0333f;
for( fTime = 0.f; fTime < fHalfTime; fTime += fSimDelta )
{
fNewPosX = fOldPosX + fVelocityX * fSimDelta;
fNewPosY = fOldPosY + (fVelocityY + fForceVelY * fTime) * fSimDelta;
// 画线
CSystem::DrawLine( fOldPosX, fOldPosY, fNewPosX, fNewPosY, 2.f, 0, 0, 255, 0, 255 );
fOldPosX = fNewPosX;
fOldPosY = fNewPosY;
}
}
else if( 1 == m_iFireState )
{
m_fRoundTime -= fDeltaTime;
if( m_fRoundTime <= 0.f )
{
// 重新初始化
m_iFireState = 0;
m_fGunRotation = m_fMaxRotation;
m_fGunStrength = 0.f;
// 目标每回合水平移动一次:
// 用循环遍历g_szTargetName,如果该精灵的被击中次数
// g_iTargetHit小于3才需要做
// 需要做的2件事:0-45之间随机X坐标,Y坐标不变。
// 然后使用dSpriteMoveTo移动精灵。请参考GameInit函数
int iLoop = 0;
float fPosX = 0, fPosY = 0;
for( iLoop = 0; iLoop < TARGET_COUNT; iLoop++ )
{
if( m_iTargetHit[iLoop] >= 3 )
continue;
// 每回合在X方向上,目标在0-45范围内随机移动一次
fPosX = CSystem::RandomRange( 0, 45 );
fPosY = m_pTarget[iLoop]->GetSpritePositionY();
m_pTarget[iLoop]->SpriteMoveTo(fPosX, fPosY, 40.f, 1);
}
}
}
m_pDandanGun->SetSpriteRotation(m_fGunRotation);
m_pDegreeText->SetTextValue(m_fGunRotation);
m_pStrengthText->SetTextValue(m_fGunStrength);
}
//=============================================================================
//
// 本局游戏结束
void CGameMain::GameEnd()
{
// 马上又开始游戏,所以直接设置状态
m_iGameState = 1;
}
//==========================================================================
//
// 鼠标移动
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void CGameMain::OnMouseMove( const float fMouseX, const float fMouseY )
{
}
//==========================================================================
//
// 鼠标点击
// 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void CGameMain::OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )
{
}
//==========================================================================
//
// 鼠标弹起
// 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void CGameMain::OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY )
{
}
//==========================================================================
//
// 键盘按下
//
没有合适的资源?快使用搜索试试~ 我知道了~
funcode.c++弹弹堂游戏程序及源代码
共170个文件
dso:45个
cs:39个
png:26个
4星 · 超过85%的资源 需积分: 49 40 下载量 112 浏览量
2018-07-18
15:29:25
上传
评论 18
收藏 1.74MB RAR 举报
温馨提示
funcode,c++弹弹堂,压缩包内含程序及源代码。
资源推荐
资源详情
资源评论
收起资源包目录
funcode.c++弹弹堂游戏程序及源代码 (170个子文件)
level.t2d.bak 1KB
LessonX.cpp 12KB
Main.cpp 4KB
levelManagement.cs 14KB
options.cs 11KB
profiles.cs 10KB
keybindings.cs 10KB
align.cs 9KB
xml.cs 8KB
datablocks.cs 7KB
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
DandanBack.dds 256KB
DandanTarget3.dds 128KB
DandanPlatform.dds 128KB
DandanTarget2.dds 128KB
DandanTarget1.dds 128KB
particles2.dds 64KB
particles3.dds 64KB
DandanBumb.dds 16KB
MiniGolfBlock1.dds 16KB
DandanCannon.dds 8KB
DandanBlock1.dds 8KB
joinServer.gui.dso 11KB
profiles.cs.dso 9KB
levelManagement.cs.dso 9KB
options.gui.dso 9KB
align.cs.dso 9KB
xml.cs.dso 8KB
level.t2d.dso 7KB
options.cs.dso 7KB
console.gui.dso 6KB
keybindings.cs.dso 6KB
datablocks.cs.dso 5KB
messageBox.cs.dso 5KB
chatGui.gui.dso 5KB
startServer.gui.dso 4KB
defaultPrefs.cs.dso 4KB
common.cs.dso 4KB
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
brushes.cs.dso 233B
persistent.cs.dso 129B
datablocks.cs.dso 33B
VCProjectVC6.dsp 4KB
shi717.dsw 560B
共 170 条
- 1
- 2
资源评论
- 花俊风寒2020-06-19帮朋友下载的程序
weixin_42728391
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功