进击系列2.0:进击的骑士-----用funcode与C语言实现射击游戏制作

article/2025/9/3 4:19:58

funcode实现射击游戏----进击的骑士

相关程序:https://download.csdn.net/download/hidden_sword/86237168

制作软件funcode

funcode为一款可以进行二维游戏制作的软件,可以兼容vc++6.0及codeblocks等C语言编译器。funcode可实现动画制作,地图模板,撞击效果等等。

游戏介绍

这次游戏名称为《进击的骑士》,为2D横版游戏,其中功能实现为W,A,S,D控制人物移动,E键为切换攻击模式,初始模式是法术光球攻击,第二模式是近战攻击模式,会出现刀,具体详情可看B站地址:【FunCode自制明日方舟小游戏-哔哩哔哩】[https://b23.tv/hZ8m5C]

游戏截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

插入图片

部分图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中代码主要来源为爱给网(游戏素材),和游戏《明日方舟》的动画截图。

主函数代码

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#include "CommonAPI.h"
#include "LessonX.h"
#include "math.h"
#include "time.h"
//头文件
#pragma comment(lib,"WinMM.lib")//音乐函数头文件
float fSpeedUp = 0,fSpeedDown = 0,fSpeedLeft = 0,fSpeedRight = 0;//速度上,下,左,右
int o=0;//子弹参数
int p=0;//子弹参数
char mybullet[3],enemy1bullet[3];//子弹名称
int timea[5]= {1500,500,1000,1000,500};//敌人CD时间
void enemyattack1( );//敌人攻击函数
void enemymove1( );//敌人移动函数
void enemyattack0( );
void enemyattack2( );
void enemymove0( );
int life;//生命值
int lifeenemy1[3],lifeenemy0[5],lifeenemy2;//敌人生命值
int ya;//敌人死亡数
int fs;//场景模式
int fs1;//场景是否切换
int k=0;//子弹参数
int t;//特效是否隐藏
int ble;//速度参数
int l=0;//子弹参数
int a;//判断场景是否要初始化
///
//
// 主函数入口
//
//
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{// 初始化游戏引擎if( !dInitGameEngine( hInstance, lpCmdLine ) )return 0;dSetWindowTitle("jin");strcpy(mybullet,"b2");//自己子弹名初始为b2strcpy(enemy1bullet,"b1");//敌人子弹名初始为b1ble=1;//速度除1t=0;dSetSpriteVisible("yan",t);	//隐藏精灵dSetSpriteVisible("lei",0);	//隐藏精灵dSetSpriteVisible("bin",0);	//隐藏精灵dSetSpriteVisible("da",0);//隐藏精灵life=999;//生命999dSetTextValue("te1",life);//设置文字精灵值dSetTextValue("te2",20);a=0;//场景需要初始化for(int j=0; j<5; j++){lifeenemy0[j]=5;}for(int w=0; w<3; w++){lifeenemy1[w]=10;}lifeenemy2=20;//初始化敌人0,1,2生命值fs=-1;//模式初始为-1fs1=-1;PlaySound("game/data/audio/bgm.wav",NULL,SND_FILENAME|SND_ASYNC);//放音乐while( dEngineMainLoop() ){static int qw=1000,mo=1000;if(dIsSpriteVisible("lei")==1)//天雷特效存在期间生命按相应CD减少{if(qw<=0){life--;qw=1000;}else if(qw>0)qw--;}if(dIsSpriteVisible("bin")==1)//冰冻特效存在时间{if(mo<=0){dSetSpriteVisible("bin",0);	//隐藏精灵mo=1000;}else if(mo>0)mo--;}ya=0;dSetTextValue("te1",life);dSetTextValue("te2",lifeenemy2);//文字精灵值随时变化float	fTimeDelta	=	dGetTimeDelta();if(fs==-1)//开始界面{dSetSpritePosition("UP",-26.5,26.5);dSetSpritePosition("bac",0,0);dSetSpritePosition("down",28.5,26.5);//设置精灵位置}else if (fs==0)//第一关{if(a==0){strcpy(mybullet,"b2");//自己子弹初始为b2dSetSpritePosition("back",0,0);for(int i=0; i<5; i++)//生成敌人类型与坐标{char *enemy0 = dMakeSpriteName("enemy0",i);dCloneSprite("ene0",enemy0);float tmpY = dRandomRange(-30,30);float tmpX = dRandomRange(-40,40);dSetSpritePosition(enemy0,tmpX,tmpY);//坐标设置dSetSpriteLinearVelocity(enemy0, 0, 0);//速度设置}a=1;//取消初始化}enemyattack0( );//攻击enemymove0();//移动for(int i=0; i<5; i++){if (lifeenemy0[i]<=0)//删除死亡敌人与计算死亡数{char *enemy0 = dMakeSpriteName("enemy0",i);dDeleteSprite(enemy0);ya++;}}if(ya==5)//敌人死亡改变模式参数{fs=1;a=0;Sleep(1000);}}else if (fs==1)//第二关{if(a==0){dSetSpritePosition("back",100,100);dSetSpritePosition("b0",100,100);//移走旧有精灵dSetSpritePosition("back1",0,0);dSetSpritePosition("rj3",-34,18);dSetSpritePosition("rj2",27,-26);dSetSpritePosition("rj1",34,23);//放置新精灵for(int j=0; j<3; j++)//生成敌人{char *enemy1 = dMakeSpriteName("enemy1",j);dCloneSprite("ene1",enemy1);float tmpY = dRandomRange(-30,30);float tmpX = dRandomRange(-40,40);dSetSpritePosition(enemy1,tmpX,tmpY);//随机坐标设置dSetSpriteLinearVelocity(enemy1, 0, 0);//速度设置}a=1;}enemyattack1( );enemymove1();for(int j=0; j<3; j++){if (lifeenemy1[j]<=0){char *enemy1 = dMakeSpriteName("enemy1",j);dDeleteSprite(enemy1);ya++;}//删除已死亡敌人if(ya==3)//敌人死亡改变模式参数{fs=2;a=0;Sleep(1000);//暂停一秒钟}}}else if (fs==2)//第三关,boss关{if(a==0){for(int j=0; j<4; j++){char *qiang = dMakeSpriteName("qiang",j);dCloneSprite("qiang",qiang);}//场景中背景地图进行更换,熔浆特效移走,设置墙的位置dSetSpritePosition("back1",100,100);dSetSpritePosition("back2",0,0);dSetSpritePosition("rj3",100,100);dSetSpritePosition("rj2",100,100);dSetSpritePosition("rj1",100,100);dSetSpritePosition("qiang0",32,-15);dSetSpritePosition("qiang2",32,27);dSetSpritePosition("qiang1",-24,23);dSetSpritePosition("qiang3",-37,-18);//场景切换dSetSpriteVisible("lei",1);//boss第一技能天雷特效显现dSetSpritePosition("enemy2",0,0);dSetSpriteLinearVelocity("enemy2", 0, 0);//boss位置,速度设置dSetSpritePosition("me",-20,0);//我的放置a=1;}enemyattack2( );if (lifeenemy2<=0){dDeleteSprite("enemy2");//boss删除fs=-2;}}else if(fs==-2)//结束界面{//将墙,自己移走,放置结束界面与结束按板dSetSpritePosition("qiang0",100,100);dSetSpritePosition("qiang2",100,100);dSetSpritePosition("qiang1",100,100);dSetSpritePosition("qiang3",100,100);//场景切换dSetSpritePosition("me",100,100);PlaySound(NULL,NULL,SND_FILENAME);//音乐播放dSetSpritePosition("gameover",0,0);dSetSpritePosition("down",0,23.5);}// 执行游戏主循环GameMainLoop( fTimeDelta, life);if(life<=0)fs=-2;//人物死亡进入结束界面}dShutdownGameEngine();return 0;
}//==========================================================================
//
// 引擎捕捉鼠标移动消息后,将调用到本函数
// 参数 fMouseX, fMouseY:为鼠标当前坐标
//
void dOnMouseMove( const float fMouseX, const float fMouseY )
{// 可以在此添加游戏需要的响应函数OnMouseMove(fMouseX, fMouseY );dSetSpritePosition("c1", fMouseX, fMouseY);	//特效跟随光标if(fs!=0){for(int j=0;j<k;j++){char *destbullet = dMakeSpriteName("enemybullet0",j);dDeleteSprite(destbullet);}//如果不是第一关删除第一关敌人技能特效}if(fs!=fs1)//判断模式是否改变{for(int j=0;j<l;j++){char *destbullet = dMakeSpriteName("mybulletdaojiw",j);dDeleteSprite(destbullet);//如果关卡改变删除自己残留技能特效}fs1=fs;}}
//==========================================================================
//
// 引擎捕捉鼠标点击消息后,将调用到本函数
// 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义
// 参数 fMouseX, fMouseY:为鼠标当前坐标
//
void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )
{// 可以在此添加游戏需要的响应函数if(dIsPointInSprite("UP",fMouseX,fMouseY))//点击开始{Sleep(1000);dSetSpritePosition("UP",100,100);dSetSpritePosition("bac",100,100);dSetSpritePosition("down",100,100);fs=0;}//开始后精灵放置else if(dIsPointInSprite("down",fMouseX,fMouseY))	//点击结束{exit(0);}PlaySound("game/data/audio/biu.wav",NULL,SND_FILENAME|SND_ASYNC);//技能音效OnMouseClick(iMouseType, fMouseX, fMouseY);float tmpX=dGetSpritePositionX("me");float tmpY=dGetSpritePositionY("me");//自己位置float speedX=(fMouseX-tmpX)/sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));float speedY=(fMouseY-tmpY)/sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));//鼠标与自己相对距离//根据自己子弹的名称来改变攻击模式,远程法术攻击按鼠标方向,近战特效if(strcmp(mybullet,"b2")==0)//生成b2子弹位置,速度{char *destmybullet = dMakeSpriteName("mybullet",o);o++;dCloneSprite(mybullet,destmybullet);dSetSpritePosition(destmybullet,tmpX,tmpY);dSetSpriteLinearVelocity(destmybullet,30*speedX,30*speedY);}else if(strcmp(mybullet,"da")==0)//生成da子弹位置,方向{if(speedX>=0){char *destmybullet = dMakeSpriteName("mybulletdaojiw",l);l++;dCloneSprite("mybulletdaoji2",destmybullet);dSetSpritePosition(destmybullet,tmpX+12,tmpY);}else{char *destmybullet = dMakeSpriteName("mybulletdaojiw",l);l++;dCloneSprite("mybulletdaoji1",destmybullet);dSetSpritePosition(destmybullet,tmpX-12,tmpY);}}
}
//==========================================================================
//
// 引擎捕捉鼠标弹起消息后,将调用到本函数
// 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义
// 参数 fMouseX, fMouseY:为鼠标当前坐标
//
void dOnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY )
{// 可以在此添加游戏需要的响应函数OnMouseUp(iMouseType, fMouseX, fMouseY);}
//==========================================================================
//
// 引擎捕捉键盘按下消息后,将调用到本函数
// 参数 iKey:被按下的键,值见 enum KeyCodes 宏定义
// 参数 iAltPress, iShiftPress,iCtrlPress:键盘上的功能键Alt,Ctrl,Shift当前是否也处于按下状态(0未按下,1按下)
//
void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )
{// 可以在此添加游戏需要的响应函数OnKeyDown(iKey, iAltPress, iShiftPress, iCtrlPress);//按下按钮后,W,A,S,D控制上下左右的速度值变化//E键为切换自己武器//空格键为进入狂暴状态switch(iKey)//按键{case KEY_W:fSpeedUp = -20.f;break;case KEY_A:fSpeedLeft = -20.f;break;case KEY_S:fSpeedDown = 20.f;break;case KEY_D:fSpeedRight = 20.f;//速度值break;case KEY_E://切换攻击模式if(strcmp(mybullet,"da")==0){strcpy(mybullet,"b2");dSetSpriteVisible("da",0);}else{strcpy(mybullet,"da");dSetSpriteVisible("da",1);}break;case KEY_SPACE://切换狂暴状态t=!t;dSetSpriteVisible("yan",t);break;}dSetSpriteLinearVelocity("me", (fSpeedLeft + fSpeedRight)/ble, (fSpeedUp + fSpeedDown)/ble);//速度改变if((fSpeedLeft + fSpeedRight) > 0){dSetSpriteFlipX("me", true);}else if((fSpeedLeft + fSpeedRight) < 0){dSetSpriteFlipX("me", false);//方向改变}}
//==========================================================================
//
// 引擎捕捉键盘弹起消息后,将调用到本函数
// 参数 iKey:弹起的键,值见 enum KeyCodes 宏定义
//
void dOnKeyUp( const int iKey )
{// 可以在此添加游戏需要的响应函数OnKeyUp(iKey);switch(iKey){case KEY_W:fSpeedUp = 0;break;case KEY_A:fSpeedLeft = 0;break;case KEY_S:fSpeedDown = 0;break;case KEY_D:fSpeedRight = 0;break;}//按键放下人物停止移动dSetSpriteLinearVelocity("me", fSpeedLeft + fSpeedRight, fSpeedUp + fSpeedDown);
}
//===========================================================================
//
// 引擎捕捉到精灵与精灵碰撞之后,调用此函数
// 精灵之间要产生碰撞,必须在编辑器或者代码里设置精灵发送及接受碰撞
// 参数 szSrcName:发起碰撞的精灵名字
// 参数 szTarName:被碰撞的精灵名字
//
void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )
{// 可以在此添加游戏需要的响应函数OnSpriteColSprite(szSrcName, szTarName);int shang=0;//伤害数值if(strstr(szTarName,"qiang")!=NULL){dDeleteSprite(szSrcName);}//触碰到墙的子弹进行删除if(strstr(szSrcName,"mybullet")!=NULL){shang=1;}if(strstr(szSrcName,"mybulletdaoji")!=NULL){shang=3;}if(dIsSpriteVisible("yan")==1){shang*=3;}//法术攻击值为1,近战为3,狂暴模式下翻3倍if(strstr(szSrcName,"enemybullet")!=NULL)//判断敌人子弹与自己相遇{if(strstr(szSrcName,"enemybullet0")!=NULL){ble=2;dSetSpriteVisible("bin",1);	}//碰到第一关的敌人的攻击触发冰冻效果if(strcmp(szTarName,"me")==0){life--;//生命减少if(strstr(szSrcName,"enemybullet0")==NULL)dDeleteSprite(szSrcName);}}else if(strstr(szSrcName,"mybullet")!=NULL)//判断自己子弹与三种敌人相遇{if(strstr(szTarName,"enemy1")!=NULL){if(strcmp(szTarName,"enemy11")==0){lifeenemy1[1]-=shang;//生命减少}else if(strcmp(szTarName,"enemy12")==0){lifeenemy1[2]-=shang;}else if(strcmp(szTarName,"enemy10")==0){lifeenemy1[0]-=shang;}}else if(strstr(szTarName,"enemy0")!=NULL){if(strcmp(szTarName,"enemy01")==0){lifeenemy0[1]-=shang;}else if(strcmp(szTarName,"enemy02")==0){lifeenemy0[2]-=shang;}else if(strcmp(szTarName,"enemy00")==0){lifeenemy0[0]-=shang;}else if(strcmp(szTarName,"enemy04")==0){lifeenemy0[4]-=shang;}else if(strcmp(szTarName,"enemy03")==0){lifeenemy0[3]-=shang;}}else if(strstr(szTarName,"enemy2")!=NULL){lifeenemy2-=shang;}if(strstr(szTarName,"enemy")!=NULL)dDeleteSprite(szSrcName);//删除自己碰到敌人的子弹}if(strstr(szSrcName,"rj")!=NULL)//场景中火焰柱攻击人物{if(strcmp(szTarName,"me")==0){life-=2;}}
}//===========================================================================
//
// 引擎捕捉到精灵与世界边界碰撞之后,调用此函数.
// 精灵之间要产生碰撞,必须在编辑器或者代码里设置精灵的世界边界限制
// 参数 szName:碰撞到边界的精灵名字
// 参数 iColSide:碰撞到的边界 0 左边,1 右边,2 上边,3 下边
//
void dOnSpriteColWorldLimit( const char *szName, const int iColSide )
{// 可以在此添加游戏需要的响应函数OnSpriteColWorldLimit(szName, iColSide);if(strstr(szName, "enemy") !=NULL)//敌人遇到世界边界反弹{if(iColSide == 0){dSetSpriteLinearVelocity(szName, 10, 0);dSetSpriteFlipX(szName,false);}else if(iColSide == 1){dSetSpriteLinearVelocity(szName, -10, 0);dSetSpriteFlipX(szName,true);}}}
void enemyattack1( )//第二关敌人攻击函数
{int timeam[3]= {1000,500,800};//技能CD默认值for(int i=0; i<3; i++){if(lifeenemy1[i]>0)//未死亡状态下{char *destbullet = dMakeSpriteName("enemybullet1",p);p++;char *enemy1 = dMakeSpriteName("enemy1",i);//子弹生成if(timea[i]<=0){float fMouseX=dGetSpritePositionX("me");float fMouseY=dGetSpritePositionY("me");float speedX;float speedY;dCloneSprite(enemy1bullet,destbullet);//复制子弹float tmpX=dGetSpritePositionX(enemy1);float tmpY=dGetSpritePositionY(enemy1);speedX=(fMouseX-tmpX)/sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));speedY=(fMouseY-tmpY)/sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));dSetSpriteRotation(destbullet,-speedX*180/3.14);dSetSpritePosition(destbullet,tmpX,tmpY);dSetSpriteLinearVelocity(destbullet,15*speedX,15*speedY);//子弹方向,位置,速度设置,使得子弹朝自己方向攻击,并且朝向始终对准自己timea[i]=timeam[i];}else if(timea[i]>0){timea[i]--;}}}
}
void enemymove1( )//第二关敌人移动函数
{for(int i=0; i<3; i++){char *enemy1 = dMakeSpriteName("enemy1",i);float fMouseX=dGetSpritePositionX("me");float fMouseY=dGetSpritePositionY("me");float tmpX=dGetSpritePositionX(enemy1);float tmpY=dGetSpritePositionY(enemy1);dSpriteMoveTo(enemy1,  fMouseX,  fMouseY,  5,  1);//敌人朝自己移动if((tmpX-fMouseX) > 0)dSetSpriteFlipX(enemy1, false);elsedSetSpriteFlipX(enemy1, true);//方向设置}
}
void enemyattack0( )//第一关敌人攻击函数
{int timeam[5]= {1000,500,800,500,1000};//技能CD默认值for(int i=0; i<5; i++){if(lifeenemy0[i]>0){char *enemy0 = dMakeSpriteName("enemy0",i);if(timea[i]<=0){float fMouseX=dGetSpritePositionX("me");float fMouseY=dGetSpritePositionY("me");float tmpX=dGetSpritePositionX(enemy0);float tmpY=dGetSpritePositionY(enemy0);float s=sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));if(s<=6){life--;char *bullet0 = dMakeSpriteName("enemybullet0",k);//子弹生成k++;dCloneSprite("enemybulletb0",bullet0);dSetSpritePosition(bullet0,fMouseX,fMouseY);//子弹方向,位置,速度设置//在距离小于等于6的情况下第一关敌人对人物触发攻击效果timea[i]=timeam[i];}}else if(timea[i]>0){timea[i]--;}}}
}
void enemymove0( )//第一关敌人移动函数
{for(int i=0; i<5; i++){char *enemy0 = dMakeSpriteName("enemy0",i);float fMouseX=dGetSpritePositionX("me");float fMouseY=dGetSpritePositionY("me");float tmpX=dGetSpritePositionX(enemy0);float tmpY=dGetSpritePositionY(enemy0);dSpriteMoveTo(enemy0,  fMouseX,  fMouseY,  5,  1);//敌人朝自己移动if((tmpX-fMouseX) > 0)dSetSpriteFlipX(enemy0, false);elsedSetSpriteFlipX(enemy0, true);//方向设置}
}
void enemyattack2( )//第三关敌人攻击函数
{int timeam[2]= {1500,500};//技能CD默认值if (timea[1]<=0){char *enemybullet2 = dMakeSpriteName("enemybullet2",p);//子弹生成p++;float fMouseX=dGetSpritePositionX("me");float fMouseY=dGetSpritePositionY("me");float speedX;float speedY;dCloneSprite("b3",enemybullet2);float tmpX=dGetSpritePositionX("enemy2");float tmpY=dGetSpritePositionY("enemy2");speedX=(fMouseX-tmpX)/sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));speedY=(fMouseY-tmpY)/sqrt((fMouseX-tmpX)*(fMouseX-tmpX)+(fMouseY-tmpY)*(fMouseY-tmpY));dSetSpritePosition(enemybullet2,tmpX,tmpY);dSetSpriteLinearVelocity(enemybullet2,15*speedX,15*speedY);//子弹方向,位置,速度设置//boss第二技能朝人物进行快速攻击timea[1]=timeam[1];}else{timea[1]--;}if(timea[0]<=0){for(int j=0; j<8; j++){char *enemybullet2 = dMakeSpriteName("enemybullet2di1",j);//子弹生成float speedX;float speedY;dCloneSprite("dici",enemybullet2);dSetSpritePosition(enemybullet2,0,0);}dSetSpriteLinearVelocity("enemybullet2di10",14,14);dSetSpriteLinearVelocity("enemybullet2di11",14,-14);dSetSpriteLinearVelocity("enemybullet2di12",-14,14);dSetSpriteLinearVelocity("enemybullet2di13",-14,-14);dSetSpriteLinearVelocity("enemybullet2di14",20,0);dSetSpriteLinearVelocity("enemybullet2di15",-20,0);dSetSpriteLinearVelocity("enemybullet2di16",0,20);dSetSpriteLinearVelocity("enemybullet2di17",0,-20);//子弹方向,位置,速度设置//boss第二技能向四周固定发射地刺timea[0]=timeam[0];}else{timea[0]--;}
}

游戏编写感想

用funcode编写游戏代码是学校的要求,而且只有三天(其实是两天),但是在此过程中,出现的bug和问题确实不是一般的多,时间上的压力也不是一般的大,但重要的是坚持,和团队合作,我很感谢我的队友的帮助与支持,这次编写游戏让我重拾相隔一个学期C语言,编写过程显得生疏,但编写完游戏后让我有种成就感与快乐,一种游戏从我和队友的手中完成。


http://chatgpt.dhexx.cn/article/2tCybBUm.shtml

相关文章

Funcode实现黄金矿工

前言&#xff1a; 一步步按照下面的步骤走&#xff0c;肯定是可以运行的。 此文优化了文档中的一些Bug 代码不是很重要&#xff0c;最重要的还是学习编程的思想。毕竟funcode并不是一个常用的软件 如果有问题&#xff0c;欢迎在下面留言&#xff0c;我会竭尽所能进行解答 一、准…

Funcode学习笔记:完成Run、Jump、Idle等动作【后续更新Roll、Attack动作的实现】【By Myself】

先来实现Run和Idle动作吧&#xff1b; 【以下是本菜在写游戏时犯下的一些错误&#xff0c;以及一些灵感&#xff0c;即如何解决逻辑错误的&#xff1b;】 首先&#xff0c;先大概说一下我们的愿景是什么&#xff0c;当我们按下A键时&#xff0c;人物向左边运动&#xff0c;且…

funcode小游戏暑假大作业,开源,新颖,游戏名:凿空,免费。

Funcode小游戏暑期大作业新颖制作 &#x1f601;里面有五个关卡&#xff0c;每个关卡玩法不同&#xff0c;虽然技术含量不高&#xff0c;但是绝对够新颖。 &#x1f602;本款游戏名叫凿空&#xff0c;小组合作制品&#xff0c;当时对代码没那么了解&#xff0c;所以写起来比较乱…

手把手教你做多重线性逐步回归

1.案例背景与分析策略 1.1 案例背景介绍 某研究收集到美国50个州关于犯罪率的一组数据&#xff0c;包括人口、面积、收入、文盲率、高中毕业率、霜冻天数、犯罪率共7个指标&#xff0c;现在我们想考察一下州犯罪率和哪些指标有关。数据上传SPSSAU后&#xff0c;在 “我的数据…

讲讲逐步回归

总第178篇/张俊红 01.前言 前面我们讲过了多元线性回归。这一篇我们来讲讲逐步回归。什么是逐步回归呢&#xff1f;就是字面意思&#xff0c;一步一步进行回归。 我们知道多元回归中的元是指自变量&#xff0c;多元就是多个自变量&#xff0c;即多个x。这多个x中有一个问题需要…

多重共线性产生原因及处理办法+R语言+糖尿病数据案例分析+逐步回归法

1、多重共线性 多重共线性一般是在&#xff08;1&#xff09;时间序列数据和&#xff08;2&#xff09;横截面数据中会发生。 产生的影响 &#xff08;1&#xff09;OLS得到的回归参数估计值很不稳定 &#xff08;2&#xff09;回归系数的方差随共线性强度增加而增长 &#…

SPSS多元线性回归及逐步回归教程

点击分析->回归->线性会出来如图 选择自变量&#xff0c;因变量。点击左侧然后点击即可选择变量并将它添加到自变量、因变量。 点击统计&#xff0c;需要额外勾选共线性诊断和然后点击继续&#xff0c;点击 设置成如图 。 解释&#xff1a;---------------------------…

Python OLS 双向逐步回归

算法基本思路&#xff1a;首先需要确定一个因变量y以此构建一元回归方程&#xff0c;再找到已通过显著性检验的一元线性回归方程中F值最大的解释变量x0&#xff0c;将其并入回归方程中&#xff0c;再分别将剩余的解释变量与解释变量x0作为OLS函数的自变量集拟合回归方程&#x…

逐步回归分析

逐步回归分析 在实际问题中,首先碰到的问题是如何确定自变量。通常是根据所研究的问题,结合经济理论,罗列出对因变量可能有影响的一些因素作为自变量。 因此,我们需要挑选出对因变量有显著影响的自变量,构造最优的回归方程。 逐步回归的基本思想是:将变量一个一个引入,…

向前逐步回归

向前逐步回归 我们在进行拟合的时候&#xff0c;没有必要将所有变量都引入到我们的函数之中&#xff0c;这种操作往往会导致过拟合&#xff0c;而过拟合带来的致命影响就是泛化能力差&#xff0c;最小二乘法估计参数的时候无法终止学习的过程。向前逐步回归的引入则可以控制学…

SPSSAU中逐步回归法——探索分析单支股票数据(实践)

数据说明&#xff1a; 还是选择万兴科技的股票数据来做回归分析&#xff0c;和《股票时序分析和时序模型&#xff08;实践&#xff09;》这篇文章使用数据一致。需要说明由于spssau免费账号最多输入50项数据&#xff0c;所以使用的都是近50期数据。 spssau上的相关分析图 pyth…

多元逐步回归算法

先谈一下个人对多元逐步回归的理解&#xff1a;多元逐步回归的最本质的核心是最小二乘原理&#xff0c;本方法中调用smf方法。# encoding: utf-8""" 功能&#xff1a;多元逐步回归 描述&#xff1a;基于python实现多元逐步回归的功能 作者&#xff1a;CHEN_C_W …

【模型开发】逐步回归

1.定义 当变量中含有对被解释变量影响不大的解释变量时&#xff0c;可能因为误差平方和的自由度减小而使方差的估计增大&#xff0c;从而影响回归预测的精度&#xff0c;适当的选择一个变量建立一个最优的回归方程十分重要。 逐步回归&#xff08;Stepwise Regression&#xff…

matlab逐步回归分析法,天大matlab大作业逐步回归分析方法.doc

天大matlab大作业逐步回归分析方法.doc 逐步回归分析方法在实际中&#xff0c;影响Y的因素很多&#xff0c;这些因素可能存在多重共线性(相关性)&#xff0c;这就对系数的估计带来不合理的解释&#xff0c;从而影响对Y的分析和预测。“最优”的回归方程就是包含所有对Y有影响的…

【R语言数据科学】(十九):变量选择(一)逐步回归法

【R语言数据科学】 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言编程基础、R语言可视化、R…

4.1程序控制流图

程序控制流图&#xff0c;简称流图&#xff0c;是对程序流程图进行简化后得到的&#xff0c;它可以更加突出的表示程序控制流的结构。 控制流图中包括两种图形符号&#xff1a; 节点控制流线 复合条件要分解为简单条件 判定节点&#xff08;谓词节点&#xff09; 由判定节点发…

流程控制(上)

大家好&#xff0c;我是Python领域的博主。 如果你是编程爱好者可以小编一起学习&#xff0c;在这里我每天都会发Python的基础知识&#xff0c;以及相关的代码。 如果文章有什么错误的地方&#xff0c;请不吝赐教。 觉得博主文章写的还错的话&#xff0c;请三连支持一下博主哦 …

使用soot和graphviz画Java的控制流图

辛苦两天了&#xff0c;啥也不说&#xff0c;先来张图&#xff1a; 看着可真漂亮&#xff0c;O(∩_∩)O哈哈~ 实验环境是Ubuntu。 1.JDK的版本必须是1.7或者以下&#xff0c;JDK1.8不行&#xff0c;总会报错&#xff0c; 2.下载sootclasses-2.5.0.jar包&#xff1a;http://d…

软件测试----------------- 控制流图 圈复杂度 独立路径 测试用例

最近在学软件测试&#xff0c;学到了画&#xff0c;控制流图 圈复杂度 独立路径 测试用例&#xff0c;这里&#xff0c;有些不理解&#xff0c;就网上查了下&#xff0c;发现好多老哥写错了&#xff0c;大佬写的甚至收费79。 我试着写写&#xff0c;如果有不足的&#xff0c;大…

LLVM CFG控制流图可视化

LLVM CFG控制流图可视化 准备 安装必要组件 sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz示例程序 /// file 1.c int x 10; int y 11; int main(){int z 12; for (int i 0;i < 10;i){z * x * y;} return 0; }生成LLVM IR 文件 clang -S -em…