.cpp.py.c 2021-07-07 23:07 采纳率: 88.9%
浏览 42
已采纳

为啥不能用WASD键实现上下左右移动?

#include
#include<opencv2/opencv.hpp>
#include
using namespace cv;
using namespace std;
enum Dir{
UP,DOWN,LEFT,RIGHT
};

char input,key;

int key_demo(){
while(1){
cin>>input;
key=input;
}
}

#define N 1000
struct Coordinate{
public:
int x;
int y;
};

class Snake{
public:
int num;
//void key_demo(Mat& src);
int dir=key;
int size;
int speed=10;
struct Coordinate szb[N];
}snake;

//class Snake snake;
void game_init(){
snake.size=3;
snake.speed=10;
snake.dir= RIGHT;
for(int i=0;i<snake.size;i++) {
snake.szb[i].x = 40-10*i;
snake.szb[i].y = 10;
cout<<"x= "<<snake.szb[i].x<<"y= "<<snake.szb[i].y<<endl;
}
}

void move(){
for(int i=snake.size-1;i>0;i--){
snake.szb[i].x=snake.szb[i-1].x;
snake.szb[i].y=snake.szb[i-1].y;
}
switch (snake.dir) {
case 72:case 'w':case'W':case UP:{snake.szb[0].y-=10;break;}
case 80:case's':case'S':case DOWN:{snake.szb[0].y+=10;break;}
case 75:case'a':case'A':case LEFT:{snake.szb[0].x-=10;break;}
case 77:case'd':case'D':case RIGHT:{snake.szb[0].x+=10;break;}

}

}
Mat src;
void game_draw() {
//Mat src;
src = Mat();
src.create(600, 1200, CV_8UC3);//A function to resize a window
Mat out(src.size(), src.type(), Scalar(255, 0, 0));//全白图
Rect rect(0, 0, 1200, 600);//左上坐标(x,y)和矩形的长(x)宽(y)
cv::rectangle(src, rect, Scalar(255, 255, 255), -1, LINE_8, 0);
//circle(src, Point(src.cols/ 2, src.rows / 2), 30, Scalar(0, 0, 255));// draw a circle
imshow("src",src);
waitKey(0);
}

void snake_draw(){
for(int i=0;i<snake.size;i++) {
circle(src, Point(snake.szb[i].x, snake.szb[0].y), 5, Scalar(0, 0, 255), -1);// draw a circle
imshow("src", src);
waitKey(100);

}
//imshow("src", src);
//waitKey(100);

}
int main(){
//snake.szb[];
game_init();
game_draw();
while(1) {
game_draw();
snake_draw();
move();
}
}

  • 写回答

2条回答 默认 最新

  • include_iostream_ 2021-07-08 14:07
    关注

    cin是行缓冲的,但要响应按键就需要无缓冲输入。不同平台执行无缓冲操作的代码区别非常大,不知道你的平台的话也没法给出具体建议。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月17日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。