用easyx图形库做一个简单的c++小游戏---障碍跑酷(还有难度等级)

news/2024/10/30 23:21:14/

用easyx图形库做一个简单的c++小游戏—障碍跑酷

开发环境:visual c++6.0
库:easyx图形库 下载地址>>> (https://easyx.cn/downloads/)

当时我原本是想模仿做一个Flappy Bird的小游戏,在想如何写的时候突然有了新的想法,就有了这个障碍跑酷的小游戏。(这是我之前写的代码,没有很注重规范,看上去有点乱,但我很尽力的都标上了注释。)

游戏介绍:
1.操控小球,小球一开始只具有左a,右d与跳跃w的功能
2.可根据按1,2,3,4调节小球的跳跃高度
3.在一定时间段内会持续出现障碍,障碍高度不一,需要调节跳跃高度来跳跃通过
4.在1000,2500,4000分数位加大难度(实际就是缩短障碍间的距离),并获取技能点数,可用于增加小球能力
5.触发商店,消耗节能点数可增加血量,减少半径,加快速度,开启下降s功能(四选一)
6.每次死亡后比较现在分数与最高分数,高则替换

游戏界面:
第一难度:分数小于1000
在这里插入图片描述
第二难度:分数1300-2500
在这里插入图片描述
第三难度:分数2800-4000
在这里插入图片描述
第四难度:分数大于4300(有点考验手速)
在这里插入图片描述
商店触发界面:(图片是我从百度随便下载的,也不知道出自哪里的)
在这里插入图片描述
附上代码:(设置的变量有点多,当时也没规范命名,但我逐个标上了注释)
图片随便用4个就行,记得要修改图片地址

//操作介绍:a左,d右,w上。1,2,3,4调节跳跃高度
#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <fstream>
using namespace std;
int nowscore(0),highscore(0),hp(3),radius(10),speed(3),skill(0);
bool under=false;
/*
nowscore代表现在分数
highscore代表最高分数
hp=代表玩家的血量
speed=玩家的速度
skill代表玩家的技能点数
under为玩家是否拥有的下落能力
*/
IMAGE img1,img2,img3,img4;void death(){//死亡记录分数if(nowscore>highscore){//如果现在分数高于最高分数则替换文件中的分数记录ofstream out;out.open(".\\最高得分.txt");//打开文件out<<nowscore;out.close();}//if
}
void shopshop(){//商店界面while(1){settextcolor(DARKGRAY);settextstyle(15,0,"宋体");setfillcolor(BLACK);//图片加载(图片地址写上自己的图片地址)loadimage(&img1,".\\血量增加.jpg",30,30);loadimage(&img2,".\\半径变小.jpg",30,30);loadimage(&img3,".\\速度加快.jpg",30,30);loadimage(&img4,".\\下降技能.jpg",30,30);putimage(50,50,&img1);putimage(50,100,&img2);putimage(50,150,&img3);putimage(50,200,&img4);outtextxy(90,55,"血量加一(1)");outtextxy(90,105,"半径变小(2)");outtextxy(90,155,"速度加快(3)");outtextxy(90,205,"获得下降(按s)加快能力(4)");FlushBatchDraw();if(GetKeyState(49)<0&&skill>0){hp++;//血量加一skill--;//技能点数减一break;}if(GetKeyState(50)<0&&skill>0){radius-=2;//半径减二skill--;//技能点数减一break;}if(GetKeyState(51)<0&&skill>0){speed++;//速度加二skill--;//技能点数减一break;}if(GetKeyState(52)<0&&skill>0){under=true;//开启下降能力skill--;//技能点数减一break;}}
}int main(){//主函数int x=250,y=400,jumpspeed=0,id(0),tim(0),way(0),v=10,hphs(-1),shhs(-1),space(0),shopx(510),shopy(390);/*x,y为小球初始坐标jumpspeed为加速度id为障碍的记号tim控制障碍出现间隔时间way为障碍出现的种类v为小球初始设置弹跳力高度hphs为控制小球扣血的间隔时间(刷新间隔快,避免持续扣血)shhs为控制小球触碰商店的间隔时间(刷新间隔快,避免持续触发商店)space为障碍与障碍的间隔距离shopx,shopy为商店的初始坐标*/int obstacle[50],obstaclex[50]={-999},obstacley[50]={-999};//设置障碍的变量数组bool jump=true,hph=true,ob=true,shh=true;/*jump判断小球是否可以跳跃hph判断小球是否可以扣血,与hphs联系ob判断是否出现障碍shh判断商店是否可以触发*/char c[10];ifstream in;//读取历史最高分数in.open(".\\最高得分.txt");in>>highscore;in.close;initgraph(500,500);//作图BeginBatchDraw();//开始绘图while(1){Sleep(50);//每次刷新时间间隔if(ob==true)tim++;nowscore++;setfillcolor(WHITE);solidrectangle(0,0,500,500);setbkmode(TRANSPARENT);if(hphs==nowscore)hph=true;//间隔时间达到,则开始可触发扣血if(shhs==nowscore)shh=true;//间隔时间达到,则开始可触发商店if(nowscore<1000)space=60;if(nowscore==1000){//若分数大于1000,则停止障碍出现,开始出现商店并调整难度,技能点数加一ob=false;skill+=1;}if(nowscore==1300)ob=true;//难度增加if(nowscore>=1000&&nowscore<2500){space=50;if(nowscore<=1050){settextcolor(RED);settextstyle(50,0,"宋体");outtextxy(150,175,"加大难度"); }//ifif(nowscore>=1150){//第一次商店出现setfillcolor(CYAN);settextcolor(BLUE);settextstyle(20,0,"宋体");outtextxy(shopx-10,shopy-20,"商店");solidrectangle(shopx,shopy,shopx+20,shopy+20);shopx-=2;//商店移动}}//ifif(nowscore==2500){//若分数大于2500,则停止障碍出现,开始出现商店并调整难度,技能点数加一ob=false;skill+=1;}if(nowscore==2650){//重新设置商店坐标shopx=490;shopy=390;}if(nowscore==2800)ob=true;//难度增加if(nowscore>=2500&&nowscore<4000){//难度增加space=42;if(nowscore<=2550){settextcolor(RED);settextstyle(50,0,"宋体");outtextxy(150,175,"加大难度"); }//ifif(nowscore>=2650){//第二次商店出现setfillcolor(CYAN);settextcolor(BLUE);settextstyle(20,0,"宋体");outtextxy(shopx-10,shopy-20,"商店");solidrectangle(shopx,shopy,shopx+20,shopy+20);shopx-=2;//商店移动}//if}if(nowscore==4000){//若分数大于4000,则停止障碍出现,开始出现商店并调整难度,技能点数加一ob=false;skill+=1;}if(nowscore==4150){//重新设置商店坐标shopx=490;shopy=390;}if(nowscore==4300)ob=true;if(nowscore>=4000){space=35;if(nowscore<=4050){settextcolor(RED);settextstyle(50,0,"宋体");outtextxy(150,175,"加大难度"); }//ifif(nowscore>=4150&&nowscore<=4400){//第三次商店出现setfillcolor(CYAN);settextcolor(BLUE);settextstyle(20,0,"宋体");outtextxy(shopx-10,shopy-20,"商店");solidrectangle(shopx,shopy,shopx+20,shopy+20);shopx-=2;//商店移动}//if}settextcolor(BLUE);settextstyle(15,0,"宋体");outtextxy(10,10,"当前分数:"); //分数显示itoa(nowscore,c,10);outtextxy(80,10,c);outtextxy(10,30,"最高分数:"); itoa(highscore,c,10);outtextxy(80,30,c);if(GetKeyState(49)<0)v=10;//一档弹跳力高度if(GetKeyState(50)<0)v=15;//二挡弹跳力高度if(GetKeyState(51)<0)v=20;//三挡弹跳力高度if(GetKeyState(52)<0)v=25;//四档弹跳力高度if(y>=410-radius){//跳jump=true;jumpspeed=0;}if(y<410-radius){jump=false;jumpspeed+=1;}if(GetKeyState(87)<0&&jump==true){jump=false;jumpspeed=-v;}if(GetKeyState(65)<0&&x>0/*&&left==true*/)x-=speed;//左if(GetKeyState(68)<0&&x<500)x+=speed;//右if(GetKeyState(83)<0&&under==true&&y<=360)y+=4;if(y>410-radius)y=410-radius;//位置归位y+=jumpspeed;setfillcolor(CYAN);//小球描绘solidcircle(x,y+10-radius,radius);setfillcolor(RED);//血量描绘solidrectangle(x-7,y-10-radius,(x-7)+(hp*5),y-5-radius);setfillcolor(BLACK);//地面描绘solidrectangle(0,410,500,420);if(tim>space){//出现障碍(我根据id是奇数的障碍为上面的障碍,id是偶数的为下面的障碍)if(id>=49)id=0;//障碍记号循环srand((int)time(0));way=rand()%4;tim=0;//重置if(way==0){obstaclex[id]=490;//偶obstacley[id]=380;id++;obstaclex[id]=490;//奇obstacley[id]=320;id++;}//ifif(way==1){obstaclex[id]=490;//偶obstacley[id]=315;id++;obstaclex[id]=490;//奇obstacley[id]=255;id++;}//ifif(way==2){obstaclex[id]=490;//偶obstacley[id]=220;id++;obstaclex[id]=490;//奇obstacley[id]=160;id++;}//ifif(way==3){obstaclex[id]=490;//偶obstacley[id]=110;id++;obstaclex[id]=490;//奇obstacley[id]=50;id++;}//if}//iffor(int i(0);i<50;i++){obstaclex[i]-=2;//障碍移动if(i%2==0){//偶下solidrectangle(obstaclex[i],obstacley[i],obstaclex[i]+10,410);//障碍描绘if((x+radius)>obstaclex[i]&&(x-radius)<obstaclex[i]+10&&(y+radius)>obstacley[i]&&hph==true){//扣血机制hp--;hph=false;hphs=nowscore+20;}//if}//ifif(i%2==1){//奇上solidrectangle(obstaclex[i],0,obstaclex[i]+10,obstacley[i]);//障碍描绘if((x+radius)>obstaclex[i]&&(x-radius)<obstaclex[i]+10&&(y-radius)<obstacley[i]&&hph==true){//扣血机制hp--;hph=false;hphs=nowscore+20;}//if}//if}//forif(hp<=0){//死亡判定death();return 0;}//ifif((x+radius)>shopx&&(x-radius)<shopx+20&&(y+radius)>shopy&&shh==true&&skill>0){//商店触发机制shh=false;shhs=nowscore+20;shopshop();}FlushBatchDraw();//结束绘图}//while
}

感谢你的观看!!!


http://www.ppmy.cn/news/325594.html

相关文章

python设计拼图游戏tkinter_tkinter做一个拼图游戏

今天我们利用canvas绘制、删除图片的的函数&#xff0c;以及鼠标事件的绑定来制作一个简单的九宫格拼图游戏。 首先从网上下九张图&#xff0c;它们是把一张图分割成了九宫图&#xff0c;打乱后显示在canvas画布上。 接下来我们只要实现图片的选中与拖动即可&#xff0c;用到了…

c语言跑酷游戏,C++用easyx图形库实现障碍跑酷小游戏

用easyx图形库做一个简单的c++小游戏—障碍跑酷 开发环境:visual c++6.0 库:easyx图形库 下载地址 当时我原本是想模仿做一个Flappy Bird的小游戏,在想如何写的时候突然有了新的想法,就有了这个障碍跑酷的小游戏。(这是我之前写的代码,没有很注重规范,看上去有点乱,但我…

C++基础学习(1)

C基础学习 一、C的引用知识点1.1 c中的引用1.2 引用做函数参数1.3 引用做函数的返回值1.4 引用的本质1.5 常量引用 二、函数进阶2.1 函数的默认参数2.2 函数占位参数2.3 函数重载 三、面向对象3.1 封装3.1.1 封装的意义 3.2 封装的访问权限3.3 struct和class区别3.4 构造函数与…

【大学计算机技术】第一章 测试15

文章目录 选择题 选择题 计算机操作系统是( )。 A. 一种使计算机便于操作的硬件设备 B. 计算机的操作规范 C. 计算机系统中必不可少的系统软件 D. 对源程序进行编辑和编译的软件 正确答案&#xff1a; C 计算机操作系统的主要功能是( )。 A. 对源程序进行翻译 B. 对计算机的所…

C226 进入定影单元 提示更新

由于定影单元提示要更新&#xff0c;但是打印出来的影像正常所以需要设置一下 1、进入维修模式 菜单-计数器显示小键盘-停止-0-0-停止-0-1 维修模式密码&#xff1a;输入四组9272 2、计数器 ->寿命 -> 新品发布 然后选中感光鼓&#xff0c;接下来是最为重要的一…

Win10 安装美能达打印机驱动程序失败, 怎么也安装不了

环境&#xff1a; Win10 专业版 柯尼卡美能达-bizhub287 问题描述&#xff1a; 安装打印程序失败&#xff0c;重启计算机和在安全模式下测试都不能安装 解决方案&#xff1a; 1.正常进入系统 2.按住“shift”键不放&#xff0c;点开始菜单选择“重启” 3.选“疑难解答”…

主流服务器 选择,主流服务器选择 永擎C226WS_服务器主板_显卡技术应用-中关村在线...

相比英特尔商用级别、消费级别的主板芯片组&#xff0c;服务器级别的主板芯片组在网络和存储方面有着更加好的优化&#xff0c;更加适合服务器、工作站等产品。永擎 C226 WS是一款服务器主板&#xff0c;通常用于绘图工作站、网页服务器、网页寄存服务器、入门型NVR等产品当中。…

c226打印机驱动安装_打印机驱动怎么装?网络打印机驱动的安装方法

网络打印机怎么安装驱动&#xff1f;Win7系统电脑如何给网络打印机安装驱动&#xff1f;下面给大家介绍具体操作步骤。 操作步骤&#xff1a; 1、首先点击左下角的开始菜单&#xff0c;弹出了一列菜单项&#xff1b; 2、在弹出的菜单项里&#xff0c;两列中的第二列里有“设备和…