Как сделать постоянно движение змейки?

252
02 мая 2018, 05:34

Переменные x и y изменяются только в том случае, если нажата клавиша (одно нажатие - одно изменение). Мне нужно сделать автоповторение. Как его реализовать?

    char c;
    while (gameOver == false)
    {
        c = (char)(_getch());
        if (c == 'w') {
            y--;
            dir = 1;
            break;
        }
        if (c == 's') {
            y++;
            dir = 2;
            break;
        }
        if (c == 'a') {
            x--;
            dir = 3;
            break;
        }
        if (c == 'd') {
            x++;
            dir = 4;
            break;
        }
    }

Переменная gameOver равна false.
Так тоже не работает:

char c = _getch(); // Начальный "толчок"
    while(gameOver == false){
        if (_kbhit()) c = _getch();
        switch(c)
        {
        case ('w'):
            y--;
            dir = 1;
            break;
        case ('s'):
            y++;
            dir = 2;
            break;
        case ('a'):
            x--;
            dir = 3;
            break;
        case ('d'):
            x++;
            dir = 4;
            break;
    }
    }
Answer 1
while (gameOver == false)
{
    if (cin >> c) {
       switch (c) {
       case 'w': dir = 1; break;
       case 's': dir = 2; break;
       case 'a': dir = 3; break;
       case 'd': dir = 4; break;
       }
    }
    switch (dir) {        
    case 1:  y--;  break;
    case 2:  y++;  break;
    case 3:  x--;  break;
    case 4:  x++;  break;
    default:
    // не указано как должны меняться переменные если не нажата клавиша. допустим:
    ++x;
    --y;
    break;
    }    
}  

Не знаю насколько правильно понел что вам нужно...

Answer 2

Что-то у меня ощущение, что вы не хотите держать клавишу постоянно нажатой, полагаясь на автоповторение? Если вопрос не в этом - извините, ошибся. Если в этом - то цикл я бы делал так:

char c = _getch(); // Начальный "толчок"
while(gameOver == false)
{
    if (_kbhit()) c = _getch();
    switch(c)
    {
        case ....

Тогда цикл крутится, пока не будет нажата клавиша. Нажмете - пойдет в другую сторону :)

Но почему бы вам не работать со стрелками на клавиатуре? Как-то привычнее играть ими, а не "буквенными" клавишами.

Вот вам микропрограммка:

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

int main(int argc, const char * argv[])
{
    char c = _getch(); // Начальный "толчок"
    while(c != 0x1B)
    {
        if (_kbhit()) c = _getch();
        printf("%c",c);
    }
}

Ткните в клавишу - пойдет вывод этой буквы. Ткнете в другую - пойдет другая и т.д., пока не ткнете в Esc.

READ ALSO
Pthread путает параметры в pthread_create()

Pthread путает параметры в pthread_create()

В цикле во время каждой итерации цикла создаю 2 thread-а при помощи pthread_create()Оба треда должны получать разные данные

221
Помочь разобраться с потоками ввода из файла

Помочь разобраться с потоками ввода из файла

Задача такая, считать из файла название компании, далее пробел считать это в доход компанииПосле все закидывается в вектор структур, считывать...

221
Почему изменяется переменная k с 5 на 7 при работе с указателем?

Почему изменяется переменная k с 5 на 7 при работе с указателем?

При добавлении элемента в список, изменяется переменная k, причём иногда программа отрабатывает правильно k всегда равно пятиНо по каким-то...

206
Передача значений из одной функции в другую и сравнение адресов элементов стека

Передача значений из одной функции в другую и сравнение адресов элементов стека

Нужно, чтобы вычисленные в функции Min_Max значения адресов min и max сохранялись и передавались в функцию CountА функция Count должна считать элементы...

202