#include <Stdio.h>
#include "CommonAPI.h"
#include "LessonX.h"
const int N=2000;
//音乐预处理
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
//游戏状态 0:初始界面,1:选择模式界面,2:游戏说明界面,3:道具说明界面,4:单人选人界面,5:双人选人界面,6:单人游戏界面,7:双人游戏界面,8:游戏失败界面,9:单人游戏获胜界面,10:双人游戏获胜界面
int g_iGameState=0;
//声音状态 0:关闭,1:打开
int sound=1;
//play1,play2选择人物
int pick1,pick2,play1,play2,state1,state2;
//是否暂停
int Pause=0;
//"你赢了","你输了"存在3秒进入结算页面
float dtime;
//人物方向1:下,2:上,3:左,4:右
int to[5];
int guan;
//人物状态1:扔炸弹,2:扔手榴弹,3:放地雷,4:放冰柱,5:放火焰,6:放迷惑弹,7:发射火箭
int state[5];
//游戏状态0:继续,1:失败,2:成功
int flag;
int statehome;
//四个人物的分数
int s[5];
//四个人物炸弹数量
int b[5];
//四个人物生命数量
int h[5];
int kill[5],sfinal[5];
int ice[5];float icetime[5];
int slow[5];float slowtime[5];
//四个人物炸弹威力
int power[5];
int defend[5],glove[5],tools[5];
//一局游戏剩余时长
float time;
float dietime[5],speed[5];
//地图
const int lenx=15,leny=13;
const float blenx=5.4867f;
const float bleny=5.6428f;
const float startx=-30.59065f,starty=-33.6356f;
/* {{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,},
{,,,,,,,,,,,,}},*/
const int data[10][lenx][leny]={
{{1,1,5,1,3,0,3,1,2,0,2,2,2},
{2,0,1,0,1,4,0,4,5,0,5,4,2},
{5,0,4,0,5,4,0,0,5,0,4,1,0},
{2,1,0,0,0,0,0,1,0,0,0,2,3},
{4,0,5,0,4,0,5,0,4,0,4,5,0},
{3,3,4,3,2,0,4,0,0,2,0,0,2},
{0,1,2,0,4,6,6,2,5,2,4,5,3},
{0,5,4,3,2,6,6,0,0,1,5,0,2},
{1,0,5,1,4,1,4,4,5,1,0,2,0},
{0,2,1,0,2,2,4,0,2,2,5,5,0},
{0,5,4,0,5,0,3,0,5,0,4,2,3},
{0,1,0,0,0,3,4,3,0,0,0,3,3},
{1,4,4,0,4,2,0,4,5,0,5,4,3},
{1,1,2,0,2,0,4,5,2,0,0,4,3},
{2,5,1,2,5,0,3,0,1,5,1,0,0}},
{{1,0,2,0,0,2,4,2,2,1,4,3,1},
{0,0,5,0,5,2,3,0,5,0,2,1,3},
{0,4,5,0,4,1,4,4,4,0,5,5,0},
{3,2,0,0,0,2,2,3,0,0,0,3,0},
{2,0,5,0,5,2,5,3,4,0,4,4,0},
{1,5,5,0,0,0,1,0,5,1,0,3,1},
{0,0,4,4,0,6,6,3,0,0,0,5,3},
{5,0,3,0,1,6,6,2,5,4,0,5,1},
{3,0,5,3,4,5,2,1,2,1,1,0,3},
{1,5,0,0,0,0,0,0,5,0,4,2,5},
{1,4,4,0,5,5,0,4,5,0,4,1,0},
{3,1,0,0,0,1,2,2,0,0,0,0,3},
{1,5,5,0,4,0,5,0,5,0,5,5,1},
{0,4,1,1,3,0,5,0,1,0,0,1,1},
{0,0,0,1,4,0,5,2,2,4,0,5,0}},
{{0,1,1,0,3,2,3,4,0,3,2,0,3},
{1,3,4,2,2,5,1,0,0,0,5,1,5},
{2,5,4,0,4,5,0,5,5,0,5,0,0},
{0,1,0,0,0,2,0,0,0,0,0,3,0},
{0,4,4,0,5,5,2,5,4,0,4,4,1},
{2,1,0,2,3,1,3,0,2,2,1,3,0},
{0,4,2,4,3,6,6,0,5,2,4,2,1},
{3,1,2,4,4,6,6,0,4,4,4,0,4},
{0,4,0,0,2,5,2,2,4,0,2,3,2},
{0,1,4,2,0,1,3,0,0,2,4,0,1},
{4,3,5,0,5,0,4,2,4,0,4,5,2},
{3,3,0,0,0,2,0,0,0,0,0,2,2},
{5,2,4,0,4,4,0,4,4,0,4,2,4},
{2,0,5,2,4,0,0,5,2,2,2,3,0},
{3,2,0,0,0,3,2,2,1,1,2,4,0}},
{{1,2,0,0,0,0,3,1,1,0,0,2,3},
{2,3,4,0,1,4,2,4,0,0,5,1,0},
{1,5,5,0,5,5,0,5,5,0,5,3,5},
{0,0,0,0,0,3,3,1,0,0,0,2,0},
{4,3,5,0,4,2,4,5,5,0,4,4,0},
{1,1,4,0,3,1,0,1,1,0,1,5,0},
{5,1,0,3,4,6,6,5,0,5,1,5,0},
{0,2,1,5,3,6,6,2,0,3,3,0,0},
{2,4,0,2,2,1,2,2,5,1,4,2,4},
{1,5,5,1,4,0,5,1,2,0,4,1,1},
{3,0,5,0,5,0,4,0,4,0,5,3,2},
{5,0,0,0,0,0,0,0,0,0,0,0,4},
{2,0,4,0,5,4,3,5,4,0,5,1,1},
{4,0,1,0,2,0,2,3,0,2,1,2,4},
{1,0,5,0,5,0,5,0,5,3,4,0,2}},
{{0,2,1,5,0,5,1,1,1,4,0,5,1},
{1,4,0,1,0,3,4,2,1,2,0,0,1},
{3,4,4,0,4,2,3,1,5,0,5,5,1},
{3,0,0,0,0,0,5,2,0,0,0,3,0},
{1,1,5,0,4,1,4,0,5,0,4,4,2},
{5,3,3,0,3,3,1,0,2,0,2,4,2},
{0,3,2,5,0,6,6,5,3,4,0,3,1},
{1,4,0,4,0,6,6,1,0,5,2,4,0},
{3,3,2,0,1,0,3,0,0,4,4,4,1},
{3,0,4,2,4,2,2,5,3,3,0,2,2},
{0,4,4,0,4,5,0,5,5,0,4,3,5},
{0,0,0,0,0,0,0,3,0,0,0,2,0},
{0,5,4,0,5,0,4,4,4,0,5,5,2},
{3,3,2,3,2,0,0,2,4,0,1,1,3},
{1,0,5,0,1,5,3,0,2,0,5,0,3}}
};
//目前地图
int a[lenx][leny];
//道具分布
int c[lenx][leny],co[15],cf[lenx][leny];
//方块分布
int count[5],f[lenx][leny];
//人物位置 1:pink,2:yellow,3:blue,4:green
int gx[5],gy[5];
int hurt[lenx][leny],from[lenx][leny],dan[lenx][leny];
//炸弹延时爆炸
int head,tail,bombx[N],bomby[N],bombman[N],bombpower[N],bombnum[lenx][leny];
float bombtime[N];
//空白显示延迟
int whead,wtail;
float whitetime[N];
//bfs
int fhead,ftail,step[N],minstep,find,d[lenx][leny],bef[N],findx[N],findy[N];
void GameInit();
void GameRun(float fDeltaTime);
void GameEnd();
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//放置精灵
void MoveSpriteToBlock(const char *szName,const int iIndexX,const int iIndexY)
{
float fPosX=startx+iIndexX*blenx;
float fPosY=starty+iIndexY*bleny;
dSetSpritePosition(szName,fPosX,fPosY);
dSetSpriteLinearVelocity(szName,0,0);
}
//放置人物
void MoveSpriteToBlock1(const char *szName,const int iIndexX,const int iIndexY)
{
float fPosX=startx+iIndexX*blenx;
float fPosY=starty+iIndexY*bleny-2.8214f;
dSetSpritePosition(szName,fPosX,fPosY);
dSetSpriteLinearVelocity(szName,0,0);
}
//人物行动
void walk(int i,int iIndexX,int iIndexY)
{
char *szName=NULL;
if(i==1)szName="pink";else
if(i==2)szName="yellow";else
if(i==3)szName="Blue";else
if(i==4)szName="Green";
float fPosX=startx+iIndexX*blenx;
float fPosY=starty+iIndexY*bleny-2.8214f;
dSpriteMoveTo(szName,fPosX,fPosY,speed[i],1);
}
//放置空白伤害痕迹块
void whitemake(int x,int y)
{
char *szName=NULL;
wtail++;
szName=dMakeSpriteName("white",wtail);
dCloneSprite("white",szName);
whitetime[wtail]=0.5f;
MoveSpriteToBlock(szName,x,y);
}
//计算炸弹威胁范围
void makedan(int pow,int x,int y,int n)
{
int o,xx,yy;
dan[x][y]=n;
o=pow;
xx=x,yy=y;
while(xx>0&&o>0&&(a[xx-1][yy]==0||a[xx-1][yy]>10))
{
o--;xx--;
dan[xx][yy]=n;
}
o=pow;
xx=x,yy=y;
while(xx<14&&o>0&&(a[xx+1][yy]==0||a[xx+1][yy]>10))
{
o--;xx++;
dan[xx][yy]=n;
}
o=pow;
xx=x,yy=y;
while(yy>0&&o>0&&(a[xx][yy-1]==0||a[xx][yy-1]>10))
{
o--;yy--;
dan[xx][yy]=n;
}
o=pow;
xx=x,yy=y;
while(y<12&&o>0&&(a[xx][yy+1]==0||a[xx][yy+1]>10))
{
o--;yy++;
dan[xx][yy]=n;
}
}
//(x,y)点造成伤害
void produce(int play,int x,int y)
{
if(sound==1)
{
if(play==1)mciSendString("play game/data/audio/bang1.mp3",NULL,0,NULL);
if(play==2)mciSendString("play game/data/audio/bang2.mp3",NULL,0,NULL);
if(play==3)mciSendString("play game/data/audio/bang3.mp3",NULL,0,NULL);
if(play==4)mciSendString("play game/data/audio/bang4.mp3",NULL,0,NULL);
}
hurt[x][y]=0;
char *szName=NULL,*sz=NULL;
if(a[x][y]<=3&&a[x][y]>0)
{
int cnt=f[x][y];
sz=dMakeSpriteName("block",a[x][y]);
szName=dMakeSpriteName(sz,cnt);
dDeleteSprite(szName);
s[play]+=5;
whitemake(x,y);
a[x][y]=0;
int cc=c[x][y];
if(cc!=0)
{
sz=dMakeSpriteName("t",cc);
szName=dMakeSpriteName(sz,cf[x][y]+10);
dCloneSprite(sz,szName);
MoveSpriteToBlock(szName,x,y);
}
}else
if(a[x][y]==0||a[x][y]==7)whitemake(x,y);else
if(a[x][y]>10)
{
int dol=a[x][y];
if(a[x][y]<17)dol-=10;else dol-=17;
if((dol==play1||dol==play2)&&defend[dol]==1)
{
defend[dol]=0;
szName="defend";
szName=dMakeSpriteName(szName,dol);
dDeleteSprite(szName);
}else h[dol]--;
whitemake(x,y);
if(h[dol]>0)
{
if(a[x][y]>17)a[x][y]-=7;
}else
if(h[dol]==0)
{
a[x][y]=0;
s[play]+=1000;
kill[play]++;
szName=dMakeSpriteName("dark",dol);
dCloneSprite("dark",szName);
if(dol==1)dSetSpritePosition(szName,-42.f,-28.4f);else
if(dol==2)dSetSpritePosition(szName,-42.f,-16.4f);else
if(dol==3)dSetSpritePosition(szName,-42.f,-3.4f);else
if(dol==4)dSetSpritePosition(szName,-42.f,9.4f);
}
}
}
//获得道具图标文字显示
void maketool(int i,int n)
{
char *sz=NULL,*szName=NULL;
sz=dMakeSpriteName("t",n);
szName=dMakeSpriteName("tool",i);
if(tools[i]>0)dDeleteSprite(szName);
if(n==2)tools[i]=1;else tools[i]=2;
dClone
FunCode工程目录-Q版泡泡堂
5星 · 超过95%的资源 需积分: 10 161 浏览量
2022-07-19
22:06:05
上传
评论 3
收藏 9.88MB RAR 举报
Jack-Oran
- 粉丝: 50
- 资源: 6
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 文件批量改名神器10.0一款简单易用的批量文件重命名工具(已注册PRO版本).rar
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论5