我写了个跑酷代码(用到图形库EGE)
#include<graphics.h> //包含EGE的头文件
#include<bits/stdc++.h>
using namespace std;
int x=0,y=0,jump=0;//x坐标,y坐标,跳跃状态避免一直跳跃
void drawing()//绘画屏幕
{
setfillcolor(EGEARGB(0xFF,0x00,0x80,0xFF));//填充色蓝
ege_fillrect(x,y,50,50);//绘制左上角x,y,50*50的正方形
setcolor(EGEACOLOR(0xFF,BLACK));//边框颜色黑
ege_rectangle(x,y,50,50);//绘画黑色边框
delay_ms(0);//调用延迟类函数触发更新屏幕
}
void jumpp()//执行跳跃动作的函数
{
int ant=y;//记录坐标
while(y!=ant-40)//跳跃的最高度
{
y-=10;
cleardevice();
drawing();
delay_ms(100);
}
while(y!=ant)//跳跃下落
{
y+=10;
cleardevice();
drawing();
delay_ms(100);
}
jump=0;//将跳跃状态设置为false
}
int main()
{
setcaption("game");//设置窗口标题
initgraph(-1,-1,INIT_WITHLOGO|INIT_RENDERMANUAL);//初始化图形界面,开场动画开,手动刷新
ege_enable_aa(true);//抗锯齿开启
setbkcolor(WHITE);//背景色白
while(1)
{
Sleep(50);//等待100毫秒,减少耗用
//下面分别判断按键修改坐标并清屏
if(keystate(0x57)&&y!=0){jump=1;jumpp();}//wy-=5;cleardevice();
else if(keystate(0x41)&&x!=0){x-=5;cleardevice();}//a
else if(keystate(0x53)&&y!=700){y+=5;cleardevice();}//s
else if(keystate(0x44)&&x!=1315){x+=5;cleardevice();}//d
else continue;
drawing();
cout<<x<<" "<<y<<endl;
}
getch();//等待输入
closegraph();//关闭窗口
return 0;
}
但是有个问题,就是跳跃途中不能左右移动,要等下落完毕跳跃函数执行完毕才行,但是按照这个思路到scratch里做又可以,大概是因为scratch里不同代码块可以一起运行,类似多线程
目前已知开多线程来执行跳跃函数可以解决,但是我对线程不熟悉,这是不好的,有没有什么不开线程可以解决的思路?