/////////////////////////////////////////////////////////////////////////////////
//
//
//
//
/////////////////////////////////////////////////////////////////////////////////
#include <Stdio.h>
#include "CommonClass.h"
#include "LessonX.h"
#include "Bullet.h"
////////////////////////////////////////////////////////////////////////////////
//
//
CGameMain g_GameMain;
//地图
int g_iMap[11][13]=
{ {0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,1,0,1,0,1,0,1,0,1,0},
{0,1,0,1,0,1,1,1,0,1,0,1,0},
{0,1,0,1,0,1,0,1,0,1,0,1,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0,1,0,1,0},
{0,1,0,1,0,0,0,0,0,1,0,1,0},
{0,1,0,1,0,1,1,1,0,1,0,1,0},
{0,0,0,0,0,1,0,1,0,0,0,0,0}
};
//==============================================================================
//
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//==============================================================================
//
// 构造函数
CGameMain::CGameMain()
{
//设置游戏状态
m_iGameState = 0;
//实例化精灵
m_pSplash = new CSprite("splash");
m_pStart = new CSprite("start");
m_iBulletNum=0;//子弹数量
m_fTankEnemyTime=0;//仅为了初始化
m_iTankEnemyNumber=3;//设置最大坦克数量
//游戏信息初始化
m_pScore = new CTextSprite("score");
m_pHight = new CTextSprite("hight");
m_pEnemy = new CTextSprite("enemyNum");
m_iScore=0;//分数
m_iEnemy=0;//敌人数量
m_iHight = 0;
m_fDeltaTime = 0.f;
}
//==============================================================================
//
// 析构函数
CGameMain::~CGameMain()
{
delete m_pSplash;
delete m_pStart;
}
//==============================================================================
//
// 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次
// 用以处理游戏的开始、进行中、结束等各种状态.
// 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒
void CGameMain::GameMainLoop( float fDeltaTime )
{
switch( GetGameState() )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
SetGameState(2); // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
//设置在我方坦克死亡,我方军营死亡,或者游戏时间>30秒的条件下,游戏结束。
if(!m_pTankPlayer->IsDead() && !m_pAim_nor->IsDead() && m_fDeltaTime<90)
{
GameRun( fDeltaTime );
}
else // 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态
{
SetGameState(0);
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
}
//=============================================================================
//
// 每局开始前进行初始化,清空上一局相关数据
void CGameMain::GameInit()
{
//设置开始图片不可见
m_pSplash->SetSpriteVisible(false);
m_pStart->SetSpriteVisible(false);
//新建一个名字是myPlayer的我方坦克对象
m_pTankPlayer=new CTankPlayer("myplayer");
//我方坦克克隆在funcode模板中存在的名字为player的坦克,表示新建的坦克对象有现在精灵的所有属性
m_pTankPlayer->CloneSprite("player");
m_pTankPlayer->Init();
m_vWeapon.push_back(m_pTankPlayer);//保存到容器
//敌方坦克初始化
//m_pTankEnemy = new CTankEnemy("enemy");
//m_pTankEnemy->Init();
//我方军营初始化
m_pAim_nor = new CWeapon("myaim_nor");
m_pAim_nor->CloneSprite("aim_nor");
m_vWeapon.push_back(m_pAim_nor);//精灵装入容器
m_pAim_nor->SetSpriteCollisionReceive(true);
m_pAim_nor->SetSpritePosition(0.f,20.f);
//地图初始化
LoadMap();
//其他数据初始化
m_iBulletNum = 0;
m_iTankEnemyNumber = 0;
m_fTankEnemyTime = 4.f;
m_iScore = 0;
m_iHight = 0;
m_iEnemy = 0;
m_fDeltaTime = 0.f;
//读取或生成保存数据文件
FILE * fp =fopen("save.dat","r+");
if(fp)
{
fread(&m_iHight,sizeof(int),1,fp);
fclose(fp);
}
m_pHight = new CTextSprite("hight");
m_pHight->SetTextValue(m_iHight);
}
//=============================================================================
//
// 每局游戏进行中
void CGameMain::GameRun( float fDeltaTime )
{
AddTankEnemy(fDeltaTime);
/*
if(m_pTankEnemy)
{
m_pTankEnemy->OnMove(fDeltaTime);
m_pTankEnemy->OnFire(fDeltaTime);
}*/
for(int i=0;i<m_vWeapon.size();i++)
{
if(!m_vWeapon[i]->IsDead())
{
m_vWeapon[i]->OnMove(fDeltaTime);
m_vWeapon[i]->OnFire(fDeltaTime);
}
else
{
DeleteWeaponByName(m_vWeapon[i]->GetName());
}
}
m_fDeltaTime += fDeltaTime;//游戏时间成员累加时间
//实时显示游戏数据
m_pScore->SetTextValue(m_iScore);
m_pHight->SetTextValue(m_iHight);
m_pEnemy->SetTextValue(m_iEnemy);
}
//=============================================================================
//
// 本局游戏结束
void CGameMain::GameEnd()
{
//当游戏的得分大于最高分时,将游戏的得分写入文件中
FILE * fp =fopen("save.dat","w+");
if(m_iScore>m_iHight)
fwrite(&m_iScore,sizeof(int),1,fp);
fclose(fp);
//删除精灵
DeleteAllSprite();
//最后游戏结束后,设置游戏开始界面可见并游戏状态为0。
m_pSplash->SetSpriteVisible(true);
m_pStart->SetSpriteVisible(true);
SetGameState(0);
}
//键盘按下
void CGameMain::OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress )
{
if( m_iGameState==0 )
{
//当按下空格设置游戏状态为1
if(iKey == KEY_SPACE)
{
m_iGameState = 1;
}
}
//游戏进行时按键盘
if(m_iGameState == 2)
{
if(iKey == KEY_J)//判断按下键是够为J键
{
m_pTankPlayer->OnFire();
}
m_pTankPlayer->OnMove(iKey, true);
}
}
//按键松开
void CGameMain::OnKeyUp( const int iKey )
{
if(m_iGameState == 2)
{
m_pTankPlayer->OnMove(iKey, false);
}
}
//坦克碰到边界方法
void CGameMain::OnSpriteColWorldLimit( const char *szName, const int iColSide )
{
if(strstr(szName,"player") != NULL) //判断碰到世界边界的坦克为我方坦克时
{
m_pTankPlayer->SetSpriteLinearVelocity(0,0);
}else if(strstr(szName,"enemy") != NULL)//判断碰到世界边界的坦克为敌方坦克时
{
CWeapon* pEnemy = FindWeaponByName(szName);
pEnemy->SetSpriteLinearVelocity(0.f,0.f);
pEnemy->OnMove();
}
else if(strstr(szName,"bullet") != NULL)//判断碰到世界边界的坦克为子弹时
{
CWeapon* pBullet = FindWeaponByName(szName);
pBullet->SetHp(0);
}
}
//子弹生成
void CGameMain::AddBullet( int iDir,float fPosX,float fPosY ,int iOwner)
{
char* szName = CSystem::MakeSpriteName("bullet",m_iBulletNum);//创建坦克名字
CBullet* pBullet = new CBullet(szName);
pBullet->CloneSprite("bullet");
pBullet->SetSpriteWorldLimit(WORLD_LIMIT_NULL,-26, -22, 26, 22); //设置世界边界
pBullet->SetSpritePosition(fPosX,fPosY);
pBullet->SetSpriteCollisionSend(true); //设置接收碰撞
pBullet->OnMove(iDir);
m_iBulletNum++; //子弹个数加1
if(iOwner == 1)
{
pBullet->SetOwner(1);//1表示我方坦克发射的子弹
}
else
{
pBullet->SetOwner(0); //0表示地方坦克发射的子弹
}
m_vWeapon.push_back(pBullet);//保存到容器
}
//地图载入
void CGameMain::LoadMap()
{
char* szName;
int i,j;
float x,y;
for(i=0;i<11;i++)
{
for(j=0;j<13;j++)
{
if(g_iMap[i][j]==1)
{
szName = CSystem::MakeSpriteName("wall",j+i*13+i);//重新起名
CWeapon* pWall = new CWeapon(szName); //新建对象
pWall->CloneSprite("wall"); //克隆墙块
pWall->SetSpriteCollisionActive(0,1); //设置为接受碰撞
pWall->SetSpriteCollisionResponse(COL_RESPONSE_CUSTOM);
x =float(-24+4*j);
y =float(-20+4*i);
pWall->SetSpritePosition(x,y);
m_vWeapon.push_back(pWall);//保存到容器
}
}
}
}
//查找精灵
CWeapon* CGameMain::FindWeaponByName(const char* szName)//根据名字查找到对象
{
for(int i=0; i<m_vWeapon.size(); i++)
{
if(strcmp(szName,m_vWeapon[i]->GetName()) == 0)
{
return m_vWeapon[i];
}
}
}
//删除精灵
void CGameMain::DeleteWeaponByName(const char* szNa
没有合适的资源?快使用搜索试试~ 我知道了~
Funcode—坦克大战
共221个文件
dso:46个
cs:39个
png:36个
5星 · 超过95%的资源 需积分: 13 42 下载量 170 浏览量
2018-01-16
21:37:39
上传
评论 2
收藏 14.45MB ZIP 举报
温馨提示
Funcode坦克大战源码,FunCode旨在点燃学生学习激情,激发学生 创新灵感,培养学生综合编程能力,引导学生主动学习,最大程度减轻教师的工作负担。
资源推荐
资源详情
资源评论
收起资源包目录
Funcode—坦克大战 (221个子文件)
level.t2d.bak 1KB
VCProjectVC6.bsc 3.33MB
LessonX.cpp 10KB
Main.cpp 3KB
TankEnemy.cpp 3KB
TankPlayer.cpp 2KB
Bullet.cpp 1KB
Weapon.cpp 630B
levelManagement.cs 14KB
options.cs 11KB
profiles.cs 10KB
keybindings.cs 10KB
align.cs 9KB
xml.cs 8KB
messageBox.cs 6KB
datablocks.cs 5KB
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
save.dat 4B
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
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
datablocks.cs.dso 33B
VCProjectVC6.dsp 5KB
TankWar.dsw 560B
VCProjectVC6.dsw 532B
Game.exe 192KB
VCProject2010.vcxproj.filters 1KB
project.funProj 408B
共 221 条
- 1
- 2
- 3
资源评论
- jjlyq_2018-07-11有用,感谢分享
Tab_Echo
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功