Функция kbhit для перемещения объекта в C - PullRequest
0 голосов
/ 12 января 2019

Эта программа обнаруживает правые клавиши на клавиатуре, но когда я пытаюсь переместить объект нажатием стрелки на клавиатуре, но когда я делаю это, он перемещается в одну и ту же строку, независимо от того, какую стрелку нажимаю. Прошу помощи в перемещении этого объекта в разных вариантах.

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
COORD coord={0, 0};

struct Ship{
    int x,y;
}Ship;
struct Ship S;
void gotoxy (int x, int y){
    coord.X = x; coord.Y = y; // X and Y coordinates
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void print()
{
    system("CLS");
    coord.X = 0;
    coord.Y = 0;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
        printf (">");
} 

int main(){
    time_t last_change = clock();
    int game=1;
    int speed=300;
    print();
    int x=0, y=0;

    while (game==1){
            if (kbhit()){
                int c = getch();
                //printf("%d",c);
                if (c==224){
                    c = getch();
                    //printf("%d",c);
                    switch (c){
                        case 72: {y--;printf(">");}
                        break;
                        case 80: {y++;printf(">");}
                        break;
                        case 77: {x++;printf(">");}
                        break;
                        case 75: {x--;printf(">");}
                        break;
                    }
                }
            };
        last_change= clock();
        }
}

1 Ответ

0 голосов
/ 12 января 2019

Вы не вызываете функцию gotoxy, все, что вы делаете, это printf(">");

Итак, добавьте, что в каждом из case блоков, как этот

case 72: y--;
         gotoxy(x, y);
         printf(">");
         break;

Теперь вы можете управлять символом > по экрану, оставляя его след.

Обратите внимание, что вы должны проверить, что x и y остаются в допустимых пределах.

case 72: if (y > 0) {
             y--;
             gotoxy(x, y);
             printf(">");
         }
         break;
...