scratch转c++
  • 板块学术版
  • 楼主_QrSn_
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/2/11 21:15
  • 上次更新2023/10/24 01:04:19
查看原帖
scratch转c++
511253
_QrSn_楼主2023/2/11 21:15

我写了个跑酷代码(用到图形库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里不同代码块可以一起运行,类似多线程

目前已知开多线程来执行跳跃函数可以解决,但是我对线程不熟悉,这是不好的,有没有什么不开线程可以解决的思路?

2023/2/11 21:15
加载中...