Как научиться писать игры на С++, часть 3

Третья программа позволит управлять точкой при помощи клавиатуры. Предыдущие две: раз и два. Для того, чтобы управлять точкой, нужно координаты x и y сохранить в памяти копьютера, для этого нужно дать ячейкам памяти имена. Чтобы ячейке, которая может хранить целое число, дать имя "a" и сразу занести туда число 50 достаточно написать

int a = 50;

Именованная таким образом ячейка памяти называется переменной. Имена переменных можно указывать вместо чисел, например при указании координат точки при вызове Plot.

int a = 50; int b = 50; Plot(a, b);

Число, которое лежит в этой именованной ячейке памяти, называется значением переменной. Значение переменной можно менять, например можно записать в переменную b значение 10 вот так:

b = 10;

А можно записать в переменную b значение, вычисленное перед этим как старое значение переменной b плюс 1:

b = b + 1;

Чтобы значение переменной изменялось при нажатии кнопки со стрелкой направо клавиатуры, нам понадоятся условный оператор if и функция проверки состояния кнопок. Работает это так: если нажата кнопка со стрелкой направо, код которой передан в функцию проверки состояния кнопок, то выполнится код, написанный в фигурных скобках после условного оператора if и произойдет увеличение значения переменной a на 1:

if (IsKeyDown(5)) { a = a + 1; }

Коды кнопок со стрелками налево, направо, вверх и вниз - 4, 5, 6 и 7. У всех остальных кнопок тоже есть коды, посмотреть список кодов можно например вот тут.

До сих пор все наши программы выполнялись последовательно, в том порядке в котором написан код, при этом в конце выполнения программы изображение появлялось на экране и при нажатии на любую кнопку программа завершалась. Но мы не хотим, чтобы программа рисования завершалась при нажатии на кнопки со стрелками, программа должна показывать изображение на экране и снова проверять, нажаты ли кнопки. Для показа изображения на экране необходимо вызвать функцию ShowFrame(); А для того, чтобы программа продолжила выполняться с нужного нам места, само это место нужно пометить меткой, то есть дать название, а потом написать инструкцию перехода к метке - goto. Вся программа может выглядеть вот так:

int a = 50; int b = 50; start: if (IsKeyDown(5)) { a = a + 1; } Plot(a, b); ShowFrame(); goto start;

Теперь программа не будет сама завершаться и при нажатии кнопки со стрелкой направо будет рисоваться линия.

Чтобы можно было двигать точку не только направо, но и вниз, в программу следует добавить соответствующее условие и изменение значения переменной, хранящей координату у

int a = 50; int b = 50; start: if (IsKeyDown(5)) { a = a + 1; } if (IsKeyDown(7)) { b = b - 1; } Plot(a, b); ShowFrame(); goto start;

Таким же образом можно добавить обработку нажатий на кнопки налево и наверх.
А еще можно добавить смену цвета используемого при рисовании или проигрывание звуков.

Если написать программу, проигрывающую звуки при нажатии кнопок, то легко заметить, что пока звучит звук, выполнение Beep не заканчивается, и это мешает играть аккорды. Используйте вызов BeepAsync, его выполнение заканчивается когда звук только начинает проигрываться и дальше звук играется асинхронно, пока программа продолжает выполняться.

Для того, чтобы сделать перемещение точки без рисования, можно добавить переменную, назовем ее f. Значение 0 в переменной f будет означать, что включен режим рисования, а значение 1 - что включен режим перемещения точки. В режиме перемещения точки перед изменением координат достаточно в старое положение точки рисовать черную точку. Черный цвет имеет код 0.

Стоит ли писать продолжение?
Нет
Да, я учусь писать игры на С++ по этому гайду
Да, я учу ребенка писать игры на С++ по этому гайду
Да, я просто читаю и мне интересно
4
15 комментариев