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

为啥不能用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日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站