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语言,编写过程显得生疏,但编写完游戏后让我有种成就感与快乐,一种游戏从我和队友的手中完成。

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

  1. python的pygame游戏开始结束信息_从0开始学python第14.8节-pygame射击游戏(一)

    我们在pycharm里新建一个工程,起名字为star-wars.工程创建好后,我们新建一个src文件夹用来存放代码.接下来在src下创建Main.py,代码如下:import pygame from ...

  2. 【C++FunCode】基于Funcode使用C++语言编写小游戏(小鲨鱼历险记)

    一.前言 大一暑假参加了山东省软件设计大赛,基于FunCode平台使用C++语言编写了大鱼吃小鱼游戏,其美名曰小鲨鱼历险记,哈哈.比赛成绩惨烈,只拿了一个省三,赛后也进行了分析总结,主要还是太不重视比 ...

  3. 怎样学习计算机动漫与游戏设计6,计算机动漫与游戏制作专业系列教材·动画设计软件应用:Flash CS6(第3版)...

    <计算机动漫与游戏制作专业系列教材·动画设计软件应用:FlashCS6(第3版)>是计算机动漫与游戏制作专业系列教材,根据<中等职业学校计算机动漫与游戏制作专业教学标准>编写. ...

  4. STM32 基础系列教程 0 - CubeMX 下载与安装

    前言 学习STM32CUBEMX工具的下载与安装,学会从st官网(www.st.com)查找与下载资料. 示例详解 STM32CUBEMX 下载 进入st官网(www.st.com),在官网的网页搜索 ...

  5. java 多线程 最优_Java多线程与并发系列从0到1全部合集,强烈建议收藏!

    在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...

  6. Java自动化测试系列[v1.0.0][TestNG测试开发环境配置]

    基于之前写的一篇文章Java自动化测试系列[v1.0.0][Maven开发环境]的基础上,阐述如何配置单元测试框架TestNG的测试开发环境 创建Maven项目 启动IDEA,点击Create New ...

  7. Salesforce系列(0):Salesforce注册开发者账号!

    Salesforce系列(0):Salesforce进行注册开发者账号! 前言 今天博主将为大家分享:Salesforce系列(0):Salesforce进行注册开发者账号!不喜勿喷,如有异议欢迎讨论 ...

  8. Salesforce系列(0):利用salesforce(sfdc)自带的IDE来编写并调试Apex类(入门级-调试篇)

    Salesforce系列(0):利用salesforce(sfdc)自带的IDE来编写并调试Apex类(入门级-调试篇) 前言 今天博主将为大家分享:Salesforce系列(0):利用salesfo ...

  9. 【凯立德】2012最新凯立德春季版导航C-Car系列 V3.0 地图编号2821J0A

    凯立德公司于2012年4月1日发布春季版C-Car系列 V3.0(地图编号2821J0A),该版本是基于C-Car版本研发而来的新一代车载专用导航系统.该产品配备了全新的3D城市功能,通过全景3D建筑 ...

  10. 蓝桥杯算法竞赛系列第0章——蓝桥必考点及标准模板库STL(上)(万字博文,建议抱走)

    欢迎来到:遇见蓝桥遇见你,不负代码不负卿! 目录 ​ 一.蓝桥必考点剖析 二.什么是STL 三.vector的常见用法详解 1.vector的定义 2.vector容器内元素的访问 (1).通过下标访 ...

最新文章

  1. 获取当前元素在兄弟元素节点中的索引
  2. v-for中为什么要有key属性
  3. ubuntu16.04安装UR3/UR5/UR10机械臂的ROS驱动并实现gazebo下Moveit运动规划仿真以及真实UR3机械臂的运动控制(2)
  4. vue的数组如何存储数据
  5. leetcode 368. Largest Divisible Subset | 368. 最大整除子集(动态规划详解)
  6. 去掉WinLicense文件效验的方法
  7. python2中的unicode_在python 3和2中工作的Unicode文字
  8. 快速入门系列之 Rust 语言 GitChat连接
  9. arm-2009q1-203-arm-none-linux-gnueabi.bin执行错误解决
  10. 科普:Flutter应用打包、修改图标、修改启动页和app名字、加固后重新V1V2签名
  11. 判断char*是否为utf8编码
  12. 产品设计需求分析研究
  13. 共识算法 —— PoA
  14. 【密码资料】纳瓦霍密码
  15. 阿里云发布首台云电脑“无影”,传统 PC 已“末路”?
  16. textarea 只显示内容,禁止输入或编辑
  17. 图片 EXIF 问题
  18. oracle 批量列转行,oracle 批量列转行 逗号分隔
  19. VB数据库经典实例总结(一)
  20. go libp2p kad dht

热门文章

  1. 2022电工杯AB题思路分析
  2. 网络蜘蛛C#开源示例
  3. Java:接口文档示例
  4. 记事本编写java_编写运行最简单的java程序——使用记事本编写java程序
  5. 4G无线预付费电表系统设计及其应用
  6. 长距离大口径输水PCCP管道泄漏监测系统解决方案
  7. Android登录界面设计
  8. 《Qt基础教程之Qt学习之路》
  9. 2020离散数学系列
  10. java操作SFTP工具类