Консольные игры!

Всем доброго времени суток!
Кто-нибудь может посоветовать книгу или сайт, где написано очень подробно как писать консольные игры(типо змейка и т.д.). Я много просмотрел сайтов, где есть исходники игр, но не могу понять почему написаны именно эти цифры. Вот пример:

void change_direction()
// функция, считывающая нажатую клавишу
{
     symbol = getch();
     // считываем нажатую клавишу с помощью функции getch()
     switch (symbol)
     {
         case 'w': if(change_x != 1 || change_y != 0) {change_x = -1; change_y = 0; }
 break;
         case 'a': if(change_x != 0 || change_y != 1) { change_x = 0; change_y = -1; }
 break;
         case 's': if(change_x != -1 || change_y != 0) { change_x = 1; change_y = 0; } 
break;
         case 'd': if(change_x != 0 || change_y != -1) { change_x = 0; change_y = 1; } 
break;
         // управление  змейкой  у нас через wasd 
         default : break; 
     }
}

И таких моментов, к сожалению, при достаточно.
Заранее спасибо за полезную информацию.

Это ты отсюда исходник брал?

Говнокод :(

По ходу там система координат: начало координат левый верхний угол, X идет вертикально вниз, Y — горизонтально вправо.

change_x и change_y — приращения координат головы змейки на каждом цикле движения.

Строчка

case 'w': 
    if(change_x != 1 || change_y != 0) 
    {
        change_x = -1; change_y = 0; 
    }
    break;

расшифровывается примерно так:

  • Получен символ w — команда движения вверх (по экрану).
  • Если змейка двигалась не вниз (change_x != 1), но в любую из сторон (change_y != 0),
  • то теперь змейка будет двигаться вверх (change_x = -1), и не в одну из сторон (change_y = 0).

Макар, нет. Хотел кинуть сайт откуда скачал, но не смог найти потому что уже не помню. Слишком много пересмотрел их. Если нужно могу весь код кинуть? Спасибо за расшифровку данного кусочка кода.
Можешь объяснить почему используются именно эти цифры: 1, 0, -1 ?
Ты написал вот, что:

По ходу там система координат: начало координат левый верхний угол, X идет вертикально вниз, Y — горизонтально вправо.

По идее Y должен идти вниз, а X вправо. Следуя логике, то должно быть так:
Если змейка двигалась не вниз (change_y != -1), но в любую из сторон (change_x != 0), то теперь змейка будет двигаться вверх (change_y = 1), и не в одну из сторон (change_x = 0).
систему координат ведь так выглядит(?):
0 1 2 3 4 5.... X
-1
-2
-3
.
.
Y
Почему-то мне кажется, что верхние строчки — это детский лепет, поэтому хотелось бы узреть и понять истину!!!
Сейчас попробовал применить свою теорию на практике. Она полностью провалилась из-за того, что при нажатии 'w' змейка изменяла направление не вверх, а вправо.
p.s. Если знаешь, то мог бы кинуть сайт, где нормальный исходник змейки?

Интересный ты человек! Напиши змейку сам, тогда координатную систему можешь располагать так, как посчитаешь нужным ты. Какими соображениями руководствовался автор этого варианта я без понятия. И честно говоря разбираться в этом говнокоде особого желания нет.

Числа -1, 0, 1 — это приращения координат. В программе есть основной игровой цикл в котором происходит опрос клавиатуры и перерисовка игрового поля. С каждым проходом цикла координаты головы змейки изменяются на текущие приращения, которые хранятся в change_x и change_y. 0 — координата не изменяется. -1 — координата изменяется на единицу в одну сторону, 1 — координата изменяется на единицу в другую сторону.

Нормальным исходником змейки не интересовался. Просто погуглил на тему «управление змейкой у нас через wasd», что бы нарыть полный текст программы максимально похожей на ту что у тебя.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.