1

我正在尝试学习如何使用 graphics.h 和 conio.h 库。我正在开发一个图形程序,我需要在键盘输入后移动一个矩形。例如:如果玩家按下右,矩形应该向右移动。问题是我不知道如何获取用户输入。我需要在循环中连续获取用户输入。这是我的代码。感谢任何帮助(关键字、函数名等)

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>

void drawrect(int left,int top,int right,int bot);

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\\TC\\BGI");
    drawrect(5,400,40,450); // default start position
    firsttime=1;//counter for if its first time in for loop
    int currentl=5;
    int currentt=400;
    int currentr=40;
    int currentb=450;
        if(firsttime==1)
        {
              //get user input and drawrectangle with new inputs
              //if player press right add 5 to currentl and current r and
              //redraw the rectangle
        }


    getch();
    closegraph();
}

void drawrect(int left,int top,int right,int bot)
{
 rectangle(left,top,right,bot);
}
4

2 回答 2

0

您可以使用getch()_getch()读取密钥代码并对其做出反应。但有些事情你应该考虑一下。

1)需要循环才能在程序中执行连续动作。

2) 诸如“向左箭头”、“向上箭头”等键由getch()两个代码给出 - 第一个 -32 和第二个取决于键。

使用以下程序查看循环示例并查找键代码:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>

int main(void)
{
    char ch;
    printf("Press 'q' to exit prom program\n");
    do{
        ch = _getch();
        printf("%c (%d)\n", ch, ch);
    } while( ch != 'q');
}
于 2015-02-05T20:46:55.400 回答
0

它解决了这个代码的工作谢谢你的帮助

#包括 #包括

void drawrect(int left,int top,int right,int bot);

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\\TC\\BGI");

    int firsttime=1;//counter for if its first time in for loop
    int currentl=5;
    int currentt=400;
    int currentr=40;
    int currentb=450;

    char ch;
    settextstyle(0, HORIZ_DIR, 1);
    outtextxy(20, 20, "To start press 'S'");
    ch = getch();
    cleardevice(); 
    drawrect(5,400,40,450); // default start position

        while(ch!='q')
       { 
        ch = getch();
        switch (ch)
        {
         case KEY_RIGHT:currentr=currentr+5;
                        currentl=currentl+5;
                        break;
         case KEY_LEFT:currentr=currentr-5;
                       currentl=currentl-5;
                       break;
        }
        cleardevice();
        drawrect(currentl,currentt,currentr,currentb);
       }




    getch();
    closegraph();
}

void drawrect(int left,int top,int right,int bot)
{
 rectangle(left,top,right,bot);
}
于 2015-02-05T23:01:39.467 回答