Funcode小游戏暑期大作业新颖制作
😁里面有五个关卡,每个关卡玩法不同,虽然技术含量不高,但是绝对够新颖。
😂本款游戏名叫凿空,小组合作制品,当时对代码没那么了解,所以写起来比较乱,但是当做暑期大作业确实不错了,而且还能白嫖。
😴拿过省三等奖,一般质量所以没啥多安利的,下面有我的百度网盘链接可以用,可以评论区交流,这是开源的随便用。
😋凿空是游戏名称,这是位置,我在百度网盘有分享:
百度网盘链接:
链接:https://pan.baidu.com/s/12tQpFuIHiMAJxLkr_bhXYw?pwd=1111
提取码:1111
我给大家放一部分源码表示我说的是真的,完整的在我网盘取,不浪费大家的时间,顺便提高一下文章规范程度。
#include "CommonAPI.h"
#include "LessonX.h"
#include<windows.h>
#include<Mmsystem.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
int blood=1;//人物血量初始化
int boss1hp=150;//BOSS1血量
float boss22hp=200;//BOSS2血量
float boss3hp=500;//BOSS3血量
//游戏进程
int level=0;
//主角速度
float g_fSpeedLeft=0.f,g_fSpeedRight=0.f,g_fSpeedTop=0.f,g_fSpeedBottom=0.f;
//地图速度
float ditu1=0;
//定义方向
bool bFilp=false;
//各精灵位置,不做一一注释
float PositionX1=0.f,PositionY1=0.f;
float PositionX2=0.f,PositionY2=0.f;
float PositionX3=0.f,PositionY3=0.f;
float PositionX4=0.f,PositionY4=0.f;
float PositionX5=0.f,PositionY5=0.f;
float PositionX6=0.f,PositionY6=0.f;
float PositionX7=0.f,PositionY7=0.f;
float PositionX8=0.f,PositionY8=0.f;
float PositionX9=0.f,PositionY9=0.f;
float PositionX10=0.f,PositionY10=0.f;
float PositionX11=0.f,PositionY11=0.f;
float PositionX12=0.f,PositionY12=0.f;
float PositionX13=0.f,PositionY13=0.f;
float PositionX14=0.f,PositionY14=0.f;
float PositionX15=0.f,PositionY15=0.f;
float PositionX16=0.f,PositionY16=0.f;
float PositionX17=0.f,PositionY17=0.f;
float PositionX18=0.f,PositionY18=0.f;
float PositionX19=0.f,PositionY19=0.f;
float PositionX20=0.f,PositionY20=0.f;
float PositionX21=0.f,PositionY21=0.f;
float PositionX22=0.f,PositionY22=0.f;
float PositionX23=0.f,PositionY23=0.f;
float PositionX24=0.f,PositionY24=0.f;
float PositionX25=0.f,PositionY25=0.f;
float PositionX26=0.f,PositionY26=0.f;
float damenweizhiX=0;
float oldPositionY2;
//第一关弓箭
typedef struct mosquitoStruct
{
char *szName;
int speed;
struct mosquitoStruct *next;
}Mosquito;
float g_fAppearTime = 0.5f;
int g_iCount = 0; //弓箭的数量
char *g_chmosquito[1000];// 存储弓箭名字的指针数组
char *jian[1000];
char *fangjian[1000];
//第一关弓箭
typedef struct mosquitoStruc
{
char *szNam;
int spee;
struct mosquitoStruc *nex;
}Mosquit;
float g_fAppearTim = 3.f; //gongjian产生的间隔时间
int g_iCoun = 0; //gongjian的数量
float g_fEmptyHookSpeed = 15.f;//陷阱速度
//世界边界限制
float fScreenLeft ;
float fScreenRight ;
float fScreenTop ;
float fScreenBottom ;
//精灵连接点坐标
float fStartX;
float fStartY;
float fEndX;
float fEndY;
float fStartX1;
float fStartY1;
float fEndX1;
float fEndY1;
float fStartX2;
float fStartY2;
float fEndX2;
float fEndY2;
float fStartX3;
float fStartY3;
float fEndX3;
float fEndY3;
float fStartX4;
float fStartY4;
float fEndX4;
float fEndY4;
//能量初始化
float nengliang=100;
//飞镖数量初始化
int shengyu=10;
//塔防生命值
int g_chengqiang=10;
//第三关小怪数量
int g_i = 0;
//五种xiaoguai的间隔时
float g_fBaseTime[5] = {3.f, 5.5f, 4.2f,8.f,2.4f};
float g_fCurrentTime[5] = {3.f, 5.5f, 4.2f,8.f,2.4f} ;
//xiaoguai的速度
float g_fSpeed[5] = {6, 10, 15,30,5};
//三种小怪对应的名字前缀
char *g_szType[5] = {"ufo_qq_muban","ufo_ww_muban","ufo_ee_muban","ufo_rr_muban","ufo_tt_muban"};
//能量加持
int g_iScore[5] = {1,2,3,2,5};
int g_iNum = 0; //发射的冲击波数量
int g_iNu=0;//飞镖数量
int g_iN=0;//BOSS的技能数量
float g_fucktime1=3;//BOSS技能1
float g_fucktime2=6;//BOSS技能2
//BOSS技能出现位置
int qq[8]={-33.182,-22.696,-14.318,-4.317,5.682,15.682,24.317,33.182};
//bossjineng刷新时间
float botime=4;
//BOSS技能三数量
int g_x;
//关卡函数
int nandian=1;
///
//
// 主函数入口
//
//
int PASCAL WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 初始化游戏引擎
if( !dInitGameEngine( hInstance, lpCmdLine ) )
return 0;
//给予某精灵初速度
dSetSpriteLinearVelocityY("b3",15);
dSetSpriteLinearVelocity("feilun",10,0);
dSetSpriteLinearVelocityY("boss3",-15);
dSetSpriteLinearVelocityX("boss1",-7);
//鼠标隐藏
dShowCursor(false);
//背景音乐
dPlaySound("qw.ogg",1,1);
// To do : 在此使用API更改窗口标题
dSetWindowTitle("yaodaxian");
//更换初始界面
if(level==0)
{
dLoadMap("level0.t2d");
}
// 引擎主循环,处理屏幕图像刷新等工作
while( dEngineMainLoop() )
{
// 获取两次调用之间的时间差,传递给游戏逻辑处理
float fTimeDelta = dGetTimeDelta();
// 执行游戏主循环
GameMainLoop( fTimeDelta );
//获取世界边界
fScreenLeft = dGetScreenLeft();
fScreenRight = dGetScreenRight();
fScreenTop = dGetScreenTop();
fScreenBottom = dGetScreenBottom();
//获取精灵位置(不做具体描述)
PositionX2=dGetSpritePositionX( "zuoguai" );
PositionY2=dGetSpritePositionY( "zuoguai" );
PositionX3=dGetSpritePositionX( "jianshou1" );
PositionY3=dGetSpritePositionY( "jianshou1" );
damenweizhiX=dGetSpritePositionX( "damen" );
PositionX1=dGetSpritePositionX( "baoxiang" );
PositionY1=dGetSpritePositionY( "baoxiang" );
PositionX4=dGetSpritePositionX( "next" );
PositionY4=dGetSpritePositionY( "next" );
PositionX5=dGetSpritePositionX( "shubiao" );
PositionY5=dGetSpritePositionY( "shubiao" );
PositionX6=dGetSpritePositionX( "jianshou2" );
PositionY6=dGetSpritePositionY( "jianshou2" );
PositionX7=dGetSpritePositionX( "jianshou3" );
PositionY7=dGetSpritePositionY( "jianshou3" );
PositionX8=dGetSpritePositionX( "dadao" );
PositionY8=dGetSpritePositionY( "dadao" );
PositionX9=dGetSpritePositionX( "review" );
PositionY9=dGetSpritePositionY( "review" );
PositionX10=dGetSpritePositionX( "review2" );
PositionY10=dGetSpritePositionY( "review2" );
PositionX11=dGetSpritePositionX( "next3" );
PositionY11=dGetSpritePositionY( "next3" );
PositionX12=dGetSpritePositionX( "zuiqiang" );
PositionY12=dGetSpritePositionY( "zuiqiang" );
PositionX13=dGetSpritePositionX( "fanhui6" );
PositionY13=dGetSpritePositionY( "fanhui6" );
PositionX14=dGetSpritePositionX( "review3" );
PositionY14=dGetSpritePositionY( "review3" );
PositionX15=dGetSpritePositionX( "next5" );
PositionY15=dGetSpritePositionY( "next5" );
PositionX16=dGetSpritePositionX( "fanhui10" );
PositionY16=dGetSpritePositionY( "fanhui10" );
PositionX17=dGetSpritePositionX( "wotui" );
PositionY17=dGetSpritePositionY( "wotui" );
PositionX18=dGetSpritePositionX( "review10" );
PositionY18=dGetSpritePositionY( "review10" );
PositionX19=dGetSpritePositionX( "boss3" );
PositionY19=dGetSpritePositionY( "boss3" );
PositionX20=dGetSpritePositionX( "jianjie" );
PositionY20=dGetSpritePositionY( "jianjie" );
PositionX21=dGetSpritePositionX( "exit" );
PositionY21=dGetSpritePositionY( "exit" );
PositionX22=dGetSpritePositionX( "nextpage6" );
PositionY22=dGetSpritePositionY( "nextpage6" );
PositionX23=dGetSpritePositionX( "nextpage1" );
PositionY23=dGetSpritePositionY( "nextpage1" );
//精灵位置触发关卡机制
if(PositionY8<-2.f)
{
dSpriteMoveTo("guai1",PositionX8, PositionY8,9,1);
dSpriteMoveTo("guai2",PositionX8, PositionY8,9,1);
dSpriteMoveTo("guai3",PositionX8, PositionY8,9,1);
}
if(PositionY12<-2.f)
{
dSpriteMoveTo("kkk1",PositionX12, PositionY12,9,1);
dSpriteMoveTo("kkk2",PositionX12, PositionY12,15,1);
}
if(PositionX12>8.f)
{
dSpriteMoveTo("kkk3",PositionX12, PositionY12,10,1);
dSpriteMoveTo("kkk4",PositionX12, PositionY12,9,1);
}
if(PositionX12>8.f&&PositionY12<-2.f)
{
dSpriteMoveTo("kkk5",PositionX12, PositionY12,13,1);
dSpriteMoveTo("kkk6",PositionX12, PositionY12,9,1);
}
if(PositionX12>8.f&&PositionY12<26.f)
{
dSpriteMoveTo("kkk10",PositionX12, PositionY12,18,1);
}
//链接精灵的处理与实现
fStartX = dGetSpriteLinkPointPosX("c5",1);
fStartY = dGetSpriteLinkPointPosY("c5",1);
fEndX = dGetSpriteLinkPointPosX("b3",1);
fEndY = dGetSpriteLinkPointPosY("b3",1);
dDrawLine(fStartX, fStartY, fEndX, fEndY, 2.f, 8, 50, 50, 50, 255 );
fStartX1 = dGetSpriteLinkPointPosX("c5",2);
fStartY1 = dGetSpriteLinkPointPosY("c5",2);
fEndX1 = dGetSpriteLinkPointPosX("b4",1);
fEndY1 = dGetSpriteLinkPointPosY("b4",1);
dDrawLine(fStartX1, fStartY1, fEndX1, fEndY1, 2.f, 8, 50, 50, 50, 255 );
fStartX2 = dGetSpriteLinkPointPosX("c5",3);
fStartY2 = dGetSpriteLinkPointPosY("c5",3);
fEndX2 = dGetSpriteLinkPointPosX("b5",1);
fEndY2 = dGetSpriteLinkPointPosY("b5",1);
dDrawLine(fStartX2, fStartY2, fEndX2, fEndY2, 2.f, 8, 50, 50, 50, 255 );
fStartX3 = dGetSpriteLinkPointPosX("c5",4);
fStartY3= dGetSpriteLinkPointPosY("c5",4);
fEndX3 = dGetSpriteLinkPointPosX("b6",1);
fEndY3 = dGetSpriteLinkPointPosY("b6",1);
dDrawLine(fStartX3, fStartY3, fEndX3, fEndY3, 2.f, 8, 50, 50, 50, 255 );
fStartX4 = dGetSpriteLinkPointPosX("c5",5);
fStartY4 = dGetSpriteLinkPointPosY("c5",5);
fEndX4 = dGetSpriteLinkPointPosX("b7",1);
fEndY4 = dGetSpriteLinkPointPosY("b7",1);
dDrawLine(fStartX4, fStartY4, fEndX4, fEndY4, 2.f, 8, 50, 50, 50, 255 );
//飞行物名字存储
for(int q=1;q<1000;q++)
{
jian[q]= dMakeSpriteName("jianyu",q++);
}
for(int b=0;b<1000;b++)
{
fangjian[b]= dMakeSpriteName("fangjian",b++);
}
g_fAppearTime -= fTimeDelta; //计算弓箭的剩余产生时间
if(g_fAppearTime<0)
{
int a;
g_fAppearTime = 0.5f;
float fposX,fposY;
a=dRandomRange(0, 2);
if(a==1)
{
fposX = PositionX3;
fposY = PositionY3;
}
else if(a==0)
{
fposX = PositionX6;
fposY = PositionY6;
}
else if(a==2)
{
fposX = PositionX7;
fposY = PositionY7;
}
Mosquito *m = (Mosquito*)malloc(sizeof(Mosquito)); //动态分配空间
if(a==1||a==0)
{
m->speed = dRandomRange(30, 40); //速度
}
else if(a==2)
{
m->speed = 30 ; //速度
}
m->szName = dMakeSpriteName("wenzi",g_iCount++); //命名
m->next = NULL;
if(a==1||a==0)
{
dCloneSprite("wenziTemplate",m->szName);
}
else if(a==2)
{
dCloneSprite("gongjian2",m->szName);
}
dSetSpritePosition(m->szName,fposX, fposY);
float fDesX ;
float fDesY ;
if(a==1)
{
fDesX = -100;
fDesY = -7.819;
}
if(a==0)
{
fDesX = -100;
fDesY = 1;
}
if(a==2)
{
fDesX = 100;
fDesY = 29;
}
dSpriteMoveTo(m->szName,fDesX, fDesY, m->speed, false);
int iLoop; //循环控制变量
for( iLoop = 0; iLoop < g_iCount; iLoop++ )
{
g_chmosquito[iLoop]=m->szName;
dSetSpriteCollisionReceive(m->szName , 1 );
}
}
g_fAppearTim -= fTimeDelta; //计算gongjian的剩余产生时间
if(g_fAppearTim<0)
{
g_fAppearTim = 3.f;
int iDi = dRandomRange(0,2); //随机一个方向
float fpoX,fpoY;
switch(iDi){
case 0: //top
fpoX = dRandomRange(fScreenLeft-1.f, fScreenRight+1.f);
fpoY = dRandomRange(fScreenTop-1.f, fScreenTop);
break;
case 1: //left
fpoX = dRandomRange(fScreenLeft-1.f, fScreenLeft);
fpoY = dRandomRange(fScreenTop-1.f, fScreenBottom+1.f);
break;
case 2: //right
fpoX = dRandomRange(fScreenRight, fScreenRight+1.f);
fpoY = dRandomRange(fScreenTop-1.f, fScreenBottom+1.f);
break;
}
Mosquit *m = (Mosquit*)malloc(sizeof(Mosquit)); //动态分配空间
m->spee = dRandomRange(20, 35); //随机速度
m->szNam = dMakeSpriteName("fangjian",g_iCoun++); //命名
m->nex = NULL;
dCloneSprite("fangjian",m->szNam);
for( int iLoop = 0; iLoop < g_iCoun; iLoop++ )
{
dSetSpriteCollisionReceive(m->szNam , 1 );
}
dSetSpritePosition(m->szNam,fpoX, fpoY);
dSpriteMoveTo(m->szNam,PositionX8, PositionY8, m->spee, false);
//控制方向
float cc=dGetSpriteLinearVelocityX(m->szNam);
if(cc<0)
{
dSetSpriteFlipX(m->szNam,1);
}
else
{
dSetSpriteFlipX(m->szNam,0);
}
}
//刷怪函数
float fPX,fPY;
char *sz;
//怪物出现的Y坐标固定在距窗口顶部5处
fPY = fScreenTop - 5.f;
for(int i=0; i<5; i++)
{
g_fCurrentTime[i] -= fTimeDelta;
if(g_fCurrentTime[i] <= 0){
g_fCurrentTime[i] = g_fBaseTime[i];
//重新设置下次guaiwu产生的时间
fPY = dRandomRange(fScreenTop+3 , fScreenBottom - 3);
fPX=fScreenRight+3;
//随机生成guaiwu的横坐标
if(i == 0)
{
sz =dMakeSpriteName("ufo_qq",g_i++);
}
else if(i == 1)
{
sz =dMakeSpriteName("ufo_ww",g_i++);
}
else if(i == 2)
{
sz =dMakeSpriteName("ufo_ee",g_i++);
}
else if(i == 3)
{
sz =dMakeSpriteName("ufo_rr",g_i++);
}
else if(i == 4)
{
sz =dMakeSpriteName("ufo_tt",g_i++);
}
dCloneSprite(g_szType[i],sz); //复制对应的模板
dSetSpritePosition(sz,fPX, fPY);
dSetSpriteLinearVelocityX(sz,-g_fSpeed[i]);
dSetSpriteCollisionReceive(sz , 1 );
}
}
float fWX,fWY;
char *tt;
for(int i=0; i<8; i++)
{
g_fucktime1-=fTimeDelta;
if(g_fucktime1<= 0){
g_fucktime1= 7;
//重新设置下次guaiwu产生的时间
fWX = fScreenRight+1;
fWY=qq[i];
tt =dMakeSpriteName("ppp",g_iN++);
dCloneSprite("niubi",tt); //复制对应的模板
dSetSpritePosition(tt,fWX, fWY);
dSetSpriteLinearVelocityX(tt,-20);
}
}
g_fucktime2-=fTimeDelta;
if(g_fucktime2<= 0){
g_fucktime2= 5;
//重新设置下次guaiwu产生的时间
tt =dMakeSpriteName("ppp",g_iN++);
dCloneSprite("niubi",tt); //复制对应的模板
dSetSpritePosition(tt,PositionX19, PositionX19);
dSpriteMoveTo(tt,PositionX12,PositionX12,10,false);
}
//boss技能
char *rr;
botime-=fTimeDelta;
if(botime<= 0){
botime= 4;
//重新设置下次guaiwu产生的时间
rr =dMakeSpriteName("guangbo",g_x++);
dCloneSprite("guangbo",rr); //复制对应的模板
dSetSpritePosition(rr,PositionX19, PositionY19);
dSetSpriteLinearVelocityX(rr,-20);
}
//关卡结束函数
if(blood<=0&&level==2)
{
dSetSpritePosition("siwang1",PositionX8,PositionY8);
dDeleteSprite("dadao");
dSetSpritePosition("shibai1",0,0);
dSetSpritePosition("review2",2,15);
}
if(blood<=0&&level==1)
{
dSetSpritePosition("siwang",PositionX2,PositionY2);
dDeleteSprite("zuoguai");
dSetSpritePosition("shibai",0,0);
dSetSpritePosition("review",2,15);
}
if(blood<=0&&level==3)
{
dSetSpritePosition("siwang2",PositionX12,PositionY12);
dDeleteSprite("zuiqiang");
dDeleteSprite("chengqiang1");
dSetSpritePosition("shibai2",0,0);
dSetSpritePosition("review3",2,15);
}
if(g_chengqiang<=0&&level==3)
{
dSetSpritePosition("siwang2",PositionX12,PositionY12);
dDeleteSprite("zuiqiang");
dSetSpritePosition("shibai2",0,0);
dSetSpritePosition("review3",2,15);
dDeleteSprite("chengqiang1");
}
if(boss22hp<=0&&level==3)
{
dDeleteSprite("boss2");
dDeleteSprite("zuiqiang");
dSetSpritePosition("texiao2",0,-0.357);
dSetSpritePosition("shengli2",0,0.968);
dSetSpritePosition("next5",10.055,8.297);
dSetSpritePosition("moxing3",-6.000,6);
dDeleteSprite("chengqiang1");
}
if(boss3hp<=0&&level==4)
{
dDeleteSprite("boss3");
dDeleteSprite("zuiqiang");
dSetSpritePosition("texiao3",0,0);
dSetSpritePosition("shengli3",0,0);
dSetSpritePosition("wotui",0,15);
dSetSpritePosition("shengli4",0,0);
blood=1000;
}
if(blood<=0&&level==4)
{
dDeleteSprite("zuiqiang");
dSetSpritePosition("shibai7",0,0);
dSetSpritePosition("review10",2,15);
}
if(boss1hp<=0&&level==2)
{
dDeleteSprite("boss1");
dDeleteSprite("dadao");
dSetSpritePosition("texiao1",0,-0.554);
dSetSpritePosition("shengli1",-1.170,-2.500);
dSetSpritePosition("next3",3.682,2.525);
dSetSpritePosition("moxing1",-9.567,2.123);
dSetSpritePosition("levelup1",-33.257,-1.385);
}
//关卡进程函数
if(nandian==2)
dSetSpritePosition("dierzhang",-0.375,-5.813);
if (nandian==3)
{
dSetSpritePosition("disanzhang",-0.375,4.188);
dSetSpritePosition("dierzhang",-0.375,-5.813);
}
if (nandian==4)
{
dSetSpritePosition("disizhang",-0.375,14.187);
dSetSpritePosition("disanzhang",-0.375,4.188);
dSetSpritePosition("dierzhang",-0.375,-5.813);
}
};
// 关闭游戏引擎
dShutdownGameEngine();
return 0;
}
//==========================================================================
//
// 引擎捕捉鼠标移动消息后,将调用到本函数
// 参数 fMouseX, fMouseY:为鼠标当前坐标
//
void dOnMouseMove( const float fMouseX, const float fMouseY )
{
dSetSpritePosition("shubiao", fMouseX, fMouseY);
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
a=dIsPointInSprite("nextpage6",fMouseX,fMouseY);
if(a==1)
{
dSetSpritePosition( "nextpage3", PositionX22,PositionY22);
}
else
dSetSpritePosition( "nextpage3", -285.709,6.776);
b=dIsPointInSprite("nextpage1",fMouseX,fMouseY);
if(b==1)
dSetSpritePosition( "nextpage2", PositionX23, PositionY23);
else
dSetSpritePosition( "nextpage2", -285.709,6.776);
c=dIsPointInSprite("exit",fMouseX,fMouseY);
if(c==1)
dSetSpritePosition( "exit1",PositionX21, PositionY21);
else
dSetSpritePosition( "exit1", -285.709,6.776);
d=dIsPointInSprite("kaishi",fMouseX,fMouseY);
if(d==1)
dSetSpritePosition( "kaishi1", 30.375, -5.813);
else
dSetSpritePosition( "kaishi1", -285.709,6.776);
e=dIsPointInSprite("bangzhu",fMouseX,fMouseY);
if(e==1)
dSetSpritePosition( "bangzhu1", 30.375, 24.188);
else
dSetSpritePosition( "bangzhu1", -285.709,6.776);
f=dIsPointInSprite("women",fMouseX,fMouseY);
if(f==1)
dSetSpritePosition( "women1", 30.375, 14.188);
else
dSetSpritePosition( "women1", -285.709,6.776);
g=dIsPointInSprite("jianjie",fMouseX,fMouseY);
if(g==1)
dSetSpritePosition( "jianjie1",PositionX20, PositionY20);
else
dSetSpritePosition( "jianjie1", -285.709,6.776);
h=dIsPointInSprite("exit2",fMouseX,fMouseY);
if(h==1)
dSetSpritePosition( "exit3",-26.967, 21.645);
else
dSetSpritePosition( "exit3", -285.709,6.776);
i=dIsPointInSprite("nextpage4",fMouseX,fMouseY);
if(i==1)
> 操作说明
1.1 鼠标控制 鼠标点击控制界面的跳转。 鼠标抬起控制关卡的选择。
1.2 键盘控制 上下左右控制主角的移动(其中第一章只能用AD键和K键控制人物),后来学习新技能,J普攻,I能量波,O回血,L大招。
1.3 小怪机制 会有蓝量加成,不过碰到就会扣血。
2. 关卡说明以及通过条件说明
2.1第一章 躲过陷阱,去宝箱那里取回属于自己的装备。
2.2第二章 躲避陷阱,打败BOSS。
2.3 第三章 利用远程技能打败BOSS,并且守住城池,击杀小怪有蓝量加成。
2.4第四章 利用技能和普攻打败BOSS,这次你有五点血量,移动会触发关卡机制,通过杀灭小怪得到蓝量通关。
游戏名称:凿空
1.游戏简介
1.1 剧情介绍 建元二年(前139年),张骞率领100多名随行人员,从长安出发前往西域。在西行进入河西走廊期间,不幸碰上匈奴的骑兵,张骞一行被扣留和软禁起来,前前后后长达十年之久,在元光六年(前129年),匈奴监视渐有松弛,张骞趁匈奴人不备带领其随从,逃出了匈奴人的控制区,本游戏从这里开始:第一章越狱。随后张骞开始了新的征程了解到留居匈奴期间,西域的形势已发生了变化。于是张骞到大宛后,借助大宛国王的帮助。张骞等人到了康居,康居王又遣人将他们送至大月氏。不料,这时大月氏人,改变了态度,谈判失败。这便是第二章:征程。元朔元年(前128年),张骞动身返国。归途中,张骞为避开匈奴势力,改变了行军路线。计划走塔里木盆地南部,昆仑山北麓的“南道”,从莎车,经于阗、鄯善,通过青海羌人地区后归汉,于是第三章归程之路开启。回国后,整顿行装,张骞又参与匈奴在河西走廊的决战。至此第四章:决战,拉开序幕。
1.2 关卡描述
- 第一章 越狱 人物空格开始,借助k键跳跃躲避弓箭、手地、刺屏、障飞轮等攻击,成功躲避后可以到达宝箱,w开启宝箱第一关结束
2.第二章 征程 人物进入游戏后,借助W、A、D、S键攻击躲避弓箭、飞轮的攻击,利用有限飞镖,和普通攻击击杀毒蝎并且打败BOSS取得胜利
3.第三章 归程 人物进入游戏,需要守住城池打败BOSS,城池只有10点血量,每打死一个小怪得1点能量,通过积累能量释放技能,每释放一次技能都会消耗一定能量,直到BOSS血条为0,取得胜利。
4.第四关 决战 人物进入游戏,需利用普攻与技能的结合控制蓝量击杀BOSS,即可通关,人物血量为5,人物移动可以触发关卡机制获得蓝量1.3 角色描述
1.张骞:张骞,字子文,中国汉代杰出的外交家、旅行家、探险家,丝绸之路的开拓者。司马迁称赞张骞出使西域为“凿空”,意思是“开通大道”。张骞先后两次出使西域,打开了中国与中亚、西亚、南亚以至通往欧洲的陆路交通张骞被誉为“丝绸之路的开拓者”、“第一个睁开眼睛看世界的中国人”。
2.匈奴:匈奴最初是在约公元前3世纪时兴起的一个游牧部族。在伊稚斜单于时期,国力被汉军打击由盛转衰。在游戏中以弓箭手,骑马小兵等的样式出现。
3.BOSS:西域途中所遇见的各种情况,有凶猛的匈奴,神秘的沙漠忍者等5.设计思路
6.游戏创意
2.1 方便性按键设置 游戏进行中设置了重新开始,返回,上一页,下一页,声音等按键,方便游戏的操作。
2.2 技能限制 人物进入闯关模式之后具有的技能是有数量、蓝量限制才可以使用的。
2.3减血量显示 当BOSS或城墙被攻击导致减血时,会显示减血量。
7.关键技术
3.1 陷阱机制方面使用了结构体、动态分配内存。
3.2 if、else函数随机刷怪、随机刷怪的类型。分时间,分速度。
如果对你有帮助,别忘了帮博主点点举报😎