Funcode游戏制作
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、基于Funcode的小飞虫
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.游戏效果图
2.游戏代码
#include <Stdio.h>
#include "CommonAPI.h"
#include "LessonX.h"
//
//
int g_iGameState = 0; // 游戏状态,0 -- 游戏结束等待开始状态;1 -- 按下空格键开始,初始化游戏;2 -- 游戏进行中
//
void GameInit();
void GameRun( float fDeltaTime );
void GameEnd();
float g_gameTime=10.f;
float g_gameScore=0.f;
float f_PaiziPosX=0.f;
float f_PaiziPosY=0.f;
//拍子的初始角度 通过拍子的初始角度来进行拍的动作
float fOldPaiziRotation=0.f;
//定义最高分数
int g_HightScore[5];
//拍子的重置时间
float fResetPaiziRotation=0.f;
//定义变量 初始化虫子的初始位置 初始速度 最终位置
float fPosx=0.f,fPosy=0.f,fPosxToWhere=0.f,fPosyToWhere=0.f,fSpeed=0.f;
//定义变量 初始化屏幕的上下左右坐标
float fScreenLeft=0.f,fScreenRight=0.f,fScreenTop=0.f,fScreenBottom=0.f;
//定义结构体 表达多个虫子
struct FlyBug
{
char szName[128];
int iScore;
}FlyBugs[15];
//定义飞虫的数量
int g_iCount=0;
//==============================================================================
//
// 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。
//==============================================================================
//
// 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次
// 用以处理游戏的开始、进行中、结束等各种状态.
// 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒
void GameMainLoop( float fDeltaTime )
{
switch( g_iGameState )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
g_iGameState = 2; // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
// TODO 修改此处游戏循环条件,完成正确游戏逻辑
g_gameTime-=fDeltaTime; //实现倒计时的效果 一次减 一秒
if( g_gameTime>0 )
{
GameRun( fDeltaTime );
}
else
{
// 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态
g_iGameState = 0;
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
}
//==============================================================================
//
// 每局开始前进行初始化,清空上一局相关数据
void GameInit()
{
g_gameTime=10.f; //设置时间为10秒
f_PaiziPosX=dGetSpritePositionX("paizi");
f_PaiziPosY=dGetSpritePositionY("paizi"); //获取排子的位置
fOldPaiziRotation=dGetSpriteRotation("paizi");//获取拍子角度的
fScreenBottom=dGetScreenBottom(); //返回值下边坐标值
fScreenLeft=dGetScreenLeft(); //返回值左边坐标值
fScreenRight=dGetScreenRight(); //右边坐标值
fScreenTop=dGetScreenTop(); //返回值上边坐标值
dSetSpriteVisible("kaishi",0); //将开始文字隐藏起来
dSetTextValue("Time",g_gameTime); //文字精灵显示某个数字
dSetTextValue("Score",g_gameScore);
dShowCursor(0); //将鼠标隐藏
AddFlyBugs();//建立五个大虫 七个小虫
for (int i=0;i<g_iCount;i++)
{
if (FlyBugs[i].iScore==1)
{
dCloneSprite("feichong_muban1",FlyBugs[i].szName);
}else if (FlyBugs[i].iScore==2)
{
dCloneSprite("feichong_muban2",FlyBugs[i].szName);
}
dSetSpriteWorldLimit(FlyBugs[i].szName,WORLD_LIMIT_NULL,fScreenLeft-10,fScreenTop-10,fScreenRight+10,fScreenBottom+10);
Flying(FlyBugs[i].szName);
}
/*
这是一开始只有一只虫子的时候 上面for循环是多个虫子的定义与克隆
dCloneSprite("feichong_muban1","feichong_0");
dSetSpriteWorldLimit("feichong_0",WORLD_LIMIT_NULL,fScreenLeft-10,fScreenTop-10,fScreenRight+10,fScreenBottom+10);
Flying(); //注意 一定要把Flying放在世界边界之后,否则精灵飞出去找不到了
*/
}
//==============================================================================
//
// 每局游戏进行中
void GameRun( float fDeltaTime )
{
//实现拍子的动作
if(fResetPaiziRotation>0)
{
fResetPaiziRotation-=fDeltaTime; //获取程序运行的时间
if(fResetPaiziRotation<0)
{
dSetSpriteRotation("paizi",fOldPaiziRotation);
}
}
dSetTextValue("Time",g_gameTime); //获取g_gameTime实时显示文字倒计时信息
dSetTextValue("Score",g_gameScore);//设置分数
}
总结
该游戏主要通过结构体数组来控制生成的飞虫的属性,
缺点是飞虫的数量是确定的。
且学习到了用 sprintf 函数 拼接字符
sprintf(FlyBugs[g_iCount].szName,"feichong_%d",g_iCount);