Что нужно знать, чтобы написать игру "Змейка" - C (СИ)
Формулировка задачи:
Подскажите пожалуйста,хочу написать игру "змейка" кое-какие наработки уже есть,но пока весьма скудные. Что-нибудь можно почитать конкретно по созданию игр на Си?
Решение задачи: «Что нужно знать, чтобы написать игру "Змейка"»
textual
Листинг программы
#include <stdlib.h> #include <windows.h> #include <stdio.h> #include <conio.h> const int KB_UP = 72; const int KB_DOWN = 80; const int KB_LEFT = 75; const int KB_RIGHT = 77; const int KB_EXIT = 27; const int KB_NO = -1; int getKey(); int getKey() { int c; if ( kbhit() ) { c = getch(); if ( c == 224 ) c = getch(); switch ( c ) { case KB_UP: case KB_DOWN: case KB_LEFT: case KB_RIGHT: case KB_EXIT: return c; default: return KB_NO; } } else { return KB_NO; } } int main() { double timer = 0; double bcnt = 0.0; double stepTime = 0.01; double speed = 1; int c; int x = 10, y =10 int xdir = 0, ydir = 0; while( 1 ) { c = getKey(); if ( c == KB_EXIT ) return 0; if ( c != KB_NO ) { if ( c == KB_UP ) { xdir = -1; ydir = 0; } else if ( c == KB_DOWN ) { xdir = 1; ydir = 0; } else if ( c == KB_LEFT ) { xdir = 0; ydir = -1; } else if ( c == KB_RIGHT ) { xdir = 0; ydir = 1; } } Sleep( ( int ) ( stepTime * 1000.0 ) ); timer += stepTime; bcnt += speed * stepTime; while ( bcnt >= 1.0 ) { x += xdir; y += ydir; system( "cls" ); bcnt -= 1.0; for ( int xi = 0; xi < 25; xi++ ) { if ( xi == x ) { for ( int yi = 0; yi < 25; yi++ ) { if ( yi == y ) { printf( "#" ); break; } else { printf( " " ); } } printf( "\n" ); } else { printf( "\n" ); } } } /* if ( timer >= 1.0 ) { timer -= 1.0; } */ } system( "pause" ); return 0; }
Объяснение кода листинга программы
- В начале кода объявлены константы для клавиш управления змейкой и ее движения.
- Далее определена функция
getKey()
, которая считывает нажатие клавиши и возвращает ее код. - В функции
main()
инициализированы переменные: двойные переменныеtimer
иbcnt
для отслеживания времени и количества съеденных блоков,stepTime
для регулирования скорости игры,speed
для управления скоростью змейки, а также переменныеx
,y
,xdir
иydir
для управления движением змейки. - В основном цикле игры в бесконечном цикле считывается нажатие клавиши. Если нажата клавиша управления змейкой, то направление движения змейки меняется.
- Каждый шаг игры (изменение положения змейки) происходит после задержки, регулируемой
stepTime
. - После каждого шага игры обновляется счетчик съеденных блоков
bcnt
и отображается текущее состояние игры (положение змейки и съеденные блоки). - Если
timer
достигает 1.0, то происходит регенерация яблока (не реализована в данном коде). - В конце игры выводится сообщение
Press any key to continue...
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д