Что нужно знать, чтобы написать игру "Змейка" - 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;
}

Объяснение кода листинга программы

  1. В начале кода объявлены константы для клавиш управления змейкой и ее движения.
  2. Далее определена функция getKey(), которая считывает нажатие клавиши и возвращает ее код.
  3. В функции main() инициализированы переменные: двойные переменные timer и bcnt для отслеживания времени и количества съеденных блоков, stepTime для регулирования скорости игры, speed для управления скоростью змейки, а также переменные x, y, xdir и ydir для управления движением змейки.
  4. В основном цикле игры в бесконечном цикле считывается нажатие клавиши. Если нажата клавиша управления змейкой, то направление движения змейки меняется.
  5. Каждый шаг игры (изменение положения змейки) происходит после задержки, регулируемой stepTime.
  6. После каждого шага игры обновляется счетчик съеденных блоков bcnt и отображается текущее состояние игры (положение змейки и съеденные блоки).
  7. Если timer достигает 1.0, то происходит регенерация яблока (не реализована в данном коде).
  8. В конце игры выводится сообщение Press any key to continue....

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы