Я пытаюсь научиться использовать библиотеки 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);
}
Ты можешь использовать 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');
}
Решено, этот код работает, спасибо за помощь
#включают
#включают
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);
}