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.1 剧情介绍 建元二年(前139年),张骞率领100多名随行人员,从长安出发前往西域。在西行进入河西走廊期间,不幸碰上匈奴的骑兵,张骞一行被扣留和软禁起来,前前后后长达十年之久,在元光六年(前129年),匈奴监视渐有松弛,张骞趁匈奴人不备带领其随从,逃出了匈奴人的控制区,本游戏从这里开始:第一章越狱。随后张骞开始了新的征程了解到留居匈奴期间,西域的形势已发生了变化。于是张骞到大宛后,借助大宛国王的帮助。张骞等人到了康居,康居王又遣人将他们送至大月氏。不料,这时大月氏人,改变了态度,谈判失败。这便是第二章:征程。元朔元年(前128年),张骞动身返国。归途中,张骞为避开匈奴势力,改变了行军路线。计划走塔里木盆地南部,昆仑山北麓的“南道”,从莎车,经于阗、鄯善,通过青海羌人地区后归汉,于是第三章归程之路开启。回国后,整顿行装,张骞又参与匈奴在河西走廊的决战。至此第四章:决战,拉开序幕。
    1.2 关卡描述

    1. 第一章 越狱 人物空格开始,借助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函数随机刷怪、随机刷怪的类型。分时间,分速度。
    在这里插入图片描述

如果对你有帮助,别忘了帮博主点点举报😎

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐