– void worm() – вывод червя указанной длины и цвета.
Принцип работы:элементы тела червя выводятся по координатам, содержащимся в массиве wormArray[][] с помощью функций gotoXY() и printf(). Длина червя принимается параметром
– voidgotoXY() – перевод курсора в положение X,Yи придание цветового атрибута фону выводимых символов.
6. Вывод
В ходе выполнения контрольной работы я научился использовать двумерный массив для реализации алгоритма анимации движения на экране консоли, пользоваться функциями kbhit(), getch(), gotoXY(), Sleep().
7. Пример работы программы
8. Приложение. Текст программы
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define ESC 27
#define ENTER 13
#define LEFT 75
#define UP 72
#define RIGHT 77
#define DOWN 80
#define MAX_SIZE 45
#define RESTART_CODE -1 // код перезапуска игры
#define CONTINUE_CODE 1 // код продолжения
#define EXIT_SUCCESS 0 // код нормального выхода
#define EXIT_DEBUG_EVENT 5 // отладочный код выхода
void newGame ( ); // новая игра
void newPrize ( ); // вывод приза
int crawling ( int [] [2] , int* , int , int ); // управление процессом игры
int wormBuilt ( int [] [2] , int* , int , int );
void worm ( int [] [2] , int* , int );
void gotoXY ( int , int , int );
enum Color { // перечисление цветов вывода
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};
struct PRIZE
{
Int x;
int y;
char face;
unsigned int color;
int wormColor;
} prize;
int main ( )
{
SetCursorPos ( 600 , 0 ) ;
SetConsoleTitleA( "SNAKE the control work by vk.com/KIVINEW" ) ;
newGame ( ) ;
return 0 ;
}
void newGame ( ) // новая игра
{
gotoXY ( 0 , 0 , White ); // установим цвет фона белым
int quiteCode ; // переменная-признак
do
{
system ( "cls" ) ;
int lenght = MAX_SIZE - 41 ; // длина червя
int wormArray [ MAX_SIZE ] [ 2 ] = { 40 , 12 } ; // начальные координаты червя
prize . color = LightGreen ; // начальный цвет червя
newPrize ( ) ;
int dX, dY ;
dY = 0 ;
dX = rand ( ) % 3 - 1 ;
if ( dX == 0 ) dY = 1 ;
/* crawling() возвращает код выхода RESTART_CODE или EXIT_SUCCESS в переменную-признак. В аргументах массив с элементами тела червя, длина червя и сдвиги по осям Х и У. */
quiteCode = crawling ( wormArray , &lenght , dX , dY ) ;
if ( quiteCode == EXIT_SUCCESS ) return ; // выход из игры
} while ( quiteCode == RESTART_CODE ) ; // циклический вызов новой игры
printf ( "\n\t%d" , quiteCode ) ;
_getch ( ) ;
return ;
}
void newPrize ( ) // сгенерировать случайные координаты
{
srand ( ( unsigned int ) time ( NULL ) ) ;
rand ( ) ; // для сбивания первого неслучайного значения
int x , y , face , color ;
x = rand ( ) % 78 + 1 ;
y = rand ( ) % 23 + 1 ;
face = ' ' ; // это символ которым обозначен на поле приз
color = rand ( ) % 7 + 8 ;
prize . wormColor = prize . color;
prize . color = color ;
prize . x = x ; // присвоить свойства приза ...
prize . y = y ; // ... полям структуры prize
prize . face = face ;
gotoXY ( x , y , color ) ; // ... а тут эти свойства ...
printf ( "%c" , face ) ; // ... используются для вывода приза
return ;
}
int crawling ( int wormArray [] [2] , int *lenght , int dX , int dY ) // управление процессом игры
{
do // бесконечный цикл
{
int resultCode;
while (!_kbhit())
{
resultCode = wormBuilt ( wormArray , lenght , dX , dY ) ; // ОСНОВНОЙ
if ( resultCode == RESTART_CODE ) return RESTART_CODE; // РАБОЧИЙ
if ( resultCode == EXIT_SUCCESS ) return EXIT_SUCCESS; // ЦИКЛ
Sleep ( 70 ) ;
}
char pressedKey = _getch ( ) ;
switch ( pressedKey )
{
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.