case ESC:
system ("cls");
return EXIT_SUCCESS;
break;
case ENTER:
return RESTART_CODE ;
break;
case LEFT:
if ( dX != 1 ) // Если не двигаемся вправо,
{
dX = -1 ; // смещение по оси Х влево.
dY = 0 ;
}
break;
case RIGHT:
if ( dX != -1 ) // Если не двигаемся влево,
{
dX = 1 ; // смещение по оси Х вправо.
dY = 0 ;
}
break;
case UP:
if ( dY != 1 ) // Если не двигаемся вниз,
{
dY = -1 ; // то двигаемся вверх.
dX = 0 ;
}
break;
case DOWN:
if ( dY != -1 ) // Если не двигаемся вверх,
{
dY = 1 ; // то двигаемся вниз.
dX = 0 ;
}
break;
}
} while ( TRUE ) ; // бесконечный цикл
return EXIT_DEBUG_EVENT;
}
int wormBuilt ( int wormArray [] [2] , int *lenght , int dX , int dY ) // изменение массива с
// координатами тела червя ...
{ // ... и проверки на столкновения
int tmpX , tmpY ;
tmpX = wormArray [ 0 ] [ 0 ] + dX ; // сохраняем координаты головы червя
tmpY = wormArray [ 0 ] [ 1 ] + dY ; // и прибавляем смещение
int i ;
// проверка на столкновение головы с другими элементами
// его тела, —1 чтобы не сталкиваться с невидимой частью хвоста
for ( i = 4 ; i < *lenght - 1 ; i++ )
{
if (tmpX == wormArray[i][0]) // если координата Х совпала –
{ // проверяем
if (tmpY == wormArray[i][1]) // координату У, если она
{ // тоже совпала, то ...
worm ( wormArray , lenght , LightRed + 8 ) ;
worm ( wormArray , lenght , White + 8 ) ;// затираем червяка белым цветом
*lenght -= 3; // уменьшаем длину тела и ...
worm ( wormArray , lenght , LightRed + 8 ) ; return CONTINUE_CODE; // ... играем дальше
}
}
}
if ( tmpX < 1 || tmpX > 78 || tmpY < 1 || tmpY > 23 ) // проверка на выход за границы поля
{
--*lenght ; // уменьшаем длину тела червяка
worm ( wormArray , lenght , LightRed + 8 ) ;
if ( *lenght < 3 ) // если длина стала минимальной ...
{
if ( _getch ( ) == ESC ) return EXIT_SUCCESS;
return RESTART_CODE; // играем заново,
} // а если нет...
return CONTINUE_CODE ; // ... то движемся дальше
}
if ( tmpX == prize . x ) // проверка координат головы
{ // на совпадение с координатами фруктов
if ( tmpY == prize . y )
{
++ *lenght ;
worm ( wormArray , lenght , prize . color +8) ;
Sleep ( 70 ) ;
if ( *lenght > MAX_SIZE ) // увеличиваем длину червя и проверяем
{ // её на превышение максимума.
return RESTART_CODE; // если длина максимальна, перезапускаем игру
}
newPrize ( ); // создаем новый приз
}
}
for ( i = *lenght - 1 ; i > 0 ; i-- ) // сдвигаем элементы червя на один вправо
{
wormArray [i] [0] = wormArray [i - 1] [0] ;
wormArray [i] [1] = wormArray [i - 1] [1] ;
}
wormArray [0] [0] = tmpX ; // восстанавливаем координаты головы
wormArray [0] [1] = tmpY ;
worm ( wormArray , lenght , prize . wormColor ) ; // вывод тела червя цветом найденного приза
return CONTINUE_CODE;
}
void worm ( int wormArray [] [2] , int *lenght , int wormColor ) // вывод червя
{
int i ;
for ( i = 0 ; i < *lenght - 1 ; i++ )
{
int x , y ;
x = wormArray [i] [0] ;
y = wormArray [i] [1] ;
gotoXY ( x , y , wormColor - 8 ) ;
printf ( "%c", 32 ) ;
}
int tailX , tailY; // хвостовой элемент, затирающий след
tailX = wormArray [i] [0] ;
tailY = wormArray [i] [1] ;
gotoXY ( tailX , tailY , White ) ;
printf ( "%c" , 32 );
return ;
}
void gotoXY ( int x , int y , int back ) // перевод курсора в положение X,Y
{
HANDLE console = GetStdHandle ( STD_OUTPUT_HANDLE ) ;
COORD coord ;
coord . X = x ;
coord . Y = y ;
SetConsoleCursorPosition ( console , coord ) ; // позиция курсора
SetConsoleTextAttribute ( console , (WORD) ( back << 4 ) ) ; // цвет фона | цвет символов
return;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.