/////////////////////////////////////////////////////////////////////////////////
//
//
//
//
/////////////////////////////////////////////////////////////////////////////////
#include <Stdio.h>
#include "CommonClass.h"
#include "LessonX.h"
////////////////////////////////////////////////////////////////////////////////
//
//
CGameMain g_GameMain;
//==============================================================================
//
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//==============================================================================
//
// 构造函数
CGameMain::CGameMain()
{
m_iGameState = 0;
m_pGameBegin = new CSprite("GameBegin");
m_iGetGoldState = 0;
m_fHookRotation = 0.f;
m_iHookRotToLeft = 1;
m_fHookStartPosX = 0.f;
m_fHookStartPosY = 0.f;
m_iInitedHookPos = 0;
m_pGoldenHook = new CSprite("goldHook");
m_pGoldenMan = new CAnimateSprite("goldMan");
m_iGoldCount = 0;
m_iGoldBornMinX = 0;
m_iGoldBornMaxX = 0;
m_iGoldBornMinY = 0;
m_iGoldBornMaxY = 0;
m_pGoldenTemplate = new CSprite("GoldTemplate");
m_fEmptyHookSpeed = 15.f;
m_pGoldenDog = new CSprite("goldDog");
m_fBaseTime = 0.f;
m_pscore =new CTextSprite("time");
goldmusic=new CSound("Goldmusic.wav",1,1);
getgold=new CSound("paizi.wav",0,1);
m_pgameover =new CSprite ("gameover");
m_score=new CTextSprite("score");
score=0;
m_yourtime=new CTextSprite("yourtime");
}
//==============================================================================
//
// 析构函数
CGameMain::~CGameMain()
{
}
//==============================================================================
//
// 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次
// 用以处理游戏的开始、进行中、结束等各种状态.
// 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒
void CGameMain::GameMainLoop( float fDeltaTime )
{
switch( GetGameState() )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
SetGameState(2); // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
if(m_iGoldCount > 0)
{
GameRun( fDeltaTime );
}
else // 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态
{
SetGameState(0);
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
DrawHookLine();
}
//=============================================================================
//
// 每局开始前进行初始化,清空上一局相关数据
void CGameMain::GameInit()
{
//m_yourtime->SetSpriteVisible(false);
//m_score->SetSpriteVisible(false);
//设置小狗的初始速度
m_pGoldenDog->SetSpriteLinearVelocity(-10,0);
//设置金子总数
m_iGoldCount=20;
// 重设钩子从0度、由右往左自动旋转
m_fHookRotation = 0.f;
m_iHookRotToLeft = 1;
// 初始化抓取状态
m_iGetGoldState = 0;
// 以下变量只需要初始化一次。
m_iInitedHookPos = 0;
if( 0 == m_iInitedHookPos )
{
//钩子可以发出碰撞
m_pGoldenHook->SetSpriteCollisionSend(true);
//金子可以接收碰撞
m_pGoldenTemplate->SetSpriteCollisionReceive(true);
//小狗可以接收碰撞
m_pGoldenDog->SetSpriteCollisionReceive(true);
m_iGoldBornMinX = CSystem::GetScreenLeft() + 5;
m_iGoldBornMaxX = CSystem::GetScreenRight() - 5;
m_iGoldBornMinY = CSystem::GetScreenTop() + 20;
m_iGoldBornMaxY = CSystem::GetScreenBottom() - 5;
m_iInitedHookPos = 1;
// 钩子初始位置值初始化
m_fHookStartPosX = m_pGoldenHook->GetSpritePositionX();
m_fHookStartPosY = m_pGoldenHook->GetSpritePositionY();
//钩子的世界边界初始化
m_pGoldenHook->SetSpriteWorldLimit(WORLD_LIMIT_NULL,CSystem::GetScreenLeft(),CSystem::GetScreenTop(),CSystem::GetScreenRight(),CSystem::GetScreenBottom());
}
int iLoop = 0;
//const char *szName = new char[15];
int iSize = 4, iPosX = 0, iPosY = 0;
for( iLoop = 0; iLoop < m_iGoldCount; iLoop++ )
{
if( iLoop < 10 )
{
iSize = 4;
}
else if( iLoop >= 10 && iLoop < 16 )
{
iSize = 6;
}
else
{
iSize = 8;
}
// 初始化金子精灵实例
char* tmpBlock;
tmpBlock=CSystem::MakeSpriteName("GoldBlock",iLoop);
CSprite *tmpGlodenBlock=new CSprite(tmpBlock);
tmpGlodenBlock->CloneSprite("GoldTemplate");
tmpGlodenBlock->SetSpriteWidth((float)iSize );
tmpGlodenBlock->SetSpriteHeight((float)iSize);
// 随机一个位置
iPosX = CSystem::RandomRange(m_iGoldBornMinX, m_iGoldBornMaxX);
iPosY = CSystem::RandomRange(m_iGoldBornMinY, m_iGoldBornMaxY);
tmpGlodenBlock->SetSpritePosition((float)iPosX, (float)iPosY);
m_vGoldenBlock.push_back(*tmpGlodenBlock);
}
// 播放挖金者的动作(恢复初始守候动作)
m_pGoldenMan->AnimateSpritePlayAnimation("GolderManAnimation2", 0);
// 隐藏游戏开始的提示
m_pGameBegin->SetSpriteVisible(0);
}
// 每局游戏进行中
void CGameMain::GameRun( float fDeltaTime )
{
m_fBaseTime+=fDeltaTime;
m_pscore->SetTextValueFloat(m_fBaseTime);
//用时间控制游戏开始结束
/*if(m_fBaseTime>=60)
{
//m_iGameState=0;
//GetCurGoldenSprite( m_szCurGetGold ).SpriteDismount();
//GetCurGoldenSprite( m_szCurGetGold ).DeleteSprite();
//m_pGoldenMan->AnimateSpritePlayAnimation("GolderManAnimation2", 0);
SetGameState(0);
GameEnd();
}*/
// 如果当前为等待抓取状态,那么,左右摇摆钩子
if( 0 == m_iGetGoldState )
{
const float fRotateSpeed = 45.f; // 摇摆速度,单位度/秒
float fThisRotate = fRotateSpeed * fDeltaTime; // 本次旋转的度数
if( m_iHookRotToLeft )
{
m_fHookRotation += fThisRotate;
if( m_fHookRotation >= 180.f )
{
m_fHookRotation = 180.f;
m_iHookRotToLeft = 0;
}
}
else
{
m_fHookRotation -= fThisRotate;
if( m_fHookRotation <= 0.f )
{
m_fHookRotation = 0.f;
m_iHookRotToLeft = 1;
}
}
m_pGoldenHook->SetSpriteRotation(m_fHookRotation);
}
//伸出钩子状态
else if(1==m_iGetGoldState)
{
// 以当前朝向给钩子一个向前的速度
m_pGoldenHook->SetSpriteLinearVelocityPolar(m_fEmptyHookSpeed, m_fHookRotation);
// 播放挖金者的动作(一个胳膊往下压的动作)
m_pGoldenMan->AnimateSpritePlayAnimation("GolderManAnimation1", 0);
}
//钩子往回伸状态
else if( 2 == m_iGetGoldState || 3 == m_iGetGoldState )
{
// 判断是否移动到终点(判断的依据是XY方向的移动速度为0,即金子是否已经停止移动)
float fSpeedX = m_pGoldenHook->GetSpriteLinearVelocityX();
float fSpeedY = m_pGoldenHook->GetSpriteLinearVelocityY();
// 当前速度不为0,还在运动中
// 浮点数是否为0,不能直接判断 == != 0
if( fSpeedX > 0.00001f || fSpeedX < -0.00001f || fSpeedY > 0.00001f || fSpeedY < -0.00001f )
return;
// 速度为0,钩子回到初始点,开始下一轮的抓取
// 当前抓取到金子,将抓取到的金子释放并删除之。然后将金子数量减一
if( 3 == m_iGetGoldState&&stricmp(m_szCurGetGold,"GoldBlock")==1 )
{
getgold->PlaySound();
m_iGoldCount--;
GetCurGoldenSprite( m_szCurGetGold ).SpriteDismount();
GetCurGoldenSprite( m_szCurGetGold ).DeleteSprite();
}
//恢复等待状态与播放等待动作
m_iGetGoldState = 0;
m_pGoldenMan->AnimateSpritePlayAnimation("GolderManAnimation2", 0);
}
}
// 本局游戏结束
void CGameMain::GameEnd()
{
m_pGoldenDog->SetSpriteLinearVelocity(0,0);
goldmusic->StopSound();
m_pgameover->SetSpritePosition(0,0);
m_pgameover->SetSpriteVisible(1);
m_yourtime->SetSpritePosition(-14,15);
m_yourtime->SetSpriteVisible(1);
score=1000-m_fBaseTime;
m_score->SetSpritePosition(18,15);
m_score->SetTextValueFloat(score);
m_score->SetSpriteVisible(1);
}
// 鼠标移动
// 参数 fMouseX, fMouseY:为鼠标当前坐标
void CGameMain::OnMouseMove( const fl
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Funcode实现黄金矿工小游戏 (167个子文件)
CommonClass.a 79KB
level.t2d.bak 1KB
Gold.cbp 2KB
LESSONX.CPP 14KB
Main.cpp 4KB
levelManagement.cs 14KB
options.cs 11KB
profiles.cs 10KB
keybindings.cs 10KB
align.cs 9KB
xml.cs 8KB
messageBox.cs 6KB
common.cs 5KB
datablocks.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
Thumbs.db 3KB
GolderBack.dds 256KB
RunningDog.dds 43KB
GolderMan.dds 32KB
GolderBlock.dds 16KB
Begin.dds 8KB
GolderTool.dds 4KB
Gold.depend 1019B
EngineDllC.dll 3.25MB
EngineDllCpp.dll 3.25MB
黄金矿工报告.docx 2.46MB
joinServer.gui.dso 11KB
profiles.cs.dso 9KB
levelManagement.cs.dso 9KB
options.gui.dso 9KB
align.cs.dso 9KB
xml.cs.dso 8KB
options.cs.dso 7KB
level.t2d.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
datablocks.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
brushes.cs.dso 233B
persistent.cs.dso 129B
共 167 条
- 1
- 2
资源评论
- 南骚北浪!2019-05-21特别特别的好
君兮月影
- 粉丝: 132
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功