admin管理员组

文章数量:1558098

感谢我的两位最好的队友!

我会将Funcode工程目录放在我的资源中

仅代表我们的浅见,当中或许还有不少的bug没有修复

作品简介

Q版泡泡堂是一款经典的游戏。玩家选择自己喜欢的人物,进入游戏后利用键盘来控制人物的走位并制造炸弹,来炸掉障碍物以及其他人物,在炸掉障碍物的同时会随机的掉落各种各样可以增加人物功能的道具,而游戏获胜的要求是消灭画面上的其他所有玩家或达到最高的积分。该游戏同时支持单双人游戏。

作品功能说明

①游戏开始随机产生背景画面,并且在背景中有许多的方块,在该游戏中玩家可以利用键盘上下左右来控制人物走位和键盘空格施放炸弹与道具,炸弹会在放置后3秒爆炸,可以炸掉方块为自己开辟道路。同时游戏实行积分制度,每炸掉一个方块积分加5分,吃到一个道具加100分,消灭敌人一个加1000分。

②游戏玩家控制的虚拟人物起初有一次生命值,并且每一局游戏时间限制为3分钟,在规定时间内消灭所有敌人或时间结束后积分最高可以获胜。

③在炸掉方块的同时可以随机产生一些道具,其中包括:
增加生命(可以加一次虚拟人物的生命值,可以重复拾取累加)
增加炸弹(可以增加一次性放置炸弹个数)
行动速度加快(虚拟人物移动速度加快)
增加炸弹威力(获得之后所释放炸弹的作用范围永久增加)
保护盾(可以防止一次伤害,但是身上只能拥有一个,重复拾取无法增加)
手榴弹(有两次机会,按下方向-空格该道具可以将手榴弹扔到2格外,并炸毁
面前三格,可以在墙后扔)
发射火箭(有两次机会,按下方向-空格键向一侧发射直线火箭直到碰到方块或敌人并将其炸毁)
发射火焰(有两次机会,按下方向-空格键向面前三格发射火焰,摧毁范围内的方块或敌人,遇到墙停止,火焰会持续1秒,会对自己造成伤害)
推动炸弹(按下方向键可以将一侧的炸弹往相应方向推,直到遇到方块或敌人停止并立即爆炸)
冰冻敌人(有一次机会,按下方向-空格键在面前最多三格施放冰柱,如果碰到敌人则会冻住敌人1秒,但是碰到墙作用范围会中断)
迷惑敌人(有两次机会,按下空格在空地上施放该道具,道具会隐身,如果有敌人走到则会减速敌人一段时间,可以被炸弹等炸毁)
施放地雷(有两次机会,按下空格在空地上施放该道具,道具会隐身,如果有敌人走到则会炸掉方块上的所有单位,可以被炸弹等炸毁)

C o d e : Code: Code:

#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,

本文标签: 泡泡堂Funcode