Секреты программирования игр


«Animotion» - часть 7


// учтем, что 640*у = 512*у + 128*у = у<<9 + у<<7

double_buffer[ ((у<<9) + (у<<7)) + х] = color;

} // конец Plot_Pixel_Fast_D2 ////////////////////////////////////////////////////////////

void Draw_Terrain(void) {

// эта функция рисует ландшафт в дублирующем буфере

// размером 640х100 пикселей

int х,у=70,index;

// очистка памяти

_fmemset(double_buffer,0,(unsigned int}640*(unsigned int)100);

// рисуем звезды

for (index=0; index<200; index++)

{

Plot_Pixel_Fast_D2(rand()%640,rand()%70,15);

} // конец цикла for

//рисуем горы

for

(x=0; x<640; х++)

{

// расчет смещения

y+=-1 + rand()%3;

// проверяем, находятся ли горы в приемлемых границах

if (y>90)

у = 90;

else

if (y<40) у = 40;

// рисуем точку в дублирующем буфере

Plot_Pixel_Fast_D2 (x,y, 10);

} // конец цикла for

} // конец Draw_Terrain

// ОСНОВНАЯ ПРОГРАММА //////////////////////////////////////

void main(void)

{

int done=0,sx=0;

// установка видеорежима 320х256х256

_setvideomode(_MRES256COLOR);

_settextposition(0,0);

printf("Use < > to move. Press Q to quit.");

// рисуем небольшое окно

_setcolor(l);

_rectangle(_GBORDER, 80-1,50-1,240+1,150+1) ;

// резервируем память под дублирующий буфер

double_buffer=(char far *)_fmalloc(SCREEN_WIDTH*SCREEN_HEIGHT+1);

Draw_Terrain() ;

Show_View_Port(double_buffer,sx) ;

// главный цикл

while

(!done)

{// не Нажал ли игрок клавишу?

if (kbhit())

switch(getch())

{

case ',': // переместить окно влево, если это возможное

{

sх-=2;

if (sx<0)

sx=0;

} break;

case '.':// переместить окно вправо если это возможно

{                                                     

sx+=2;

if (sx > 640-160)

sx=640-160;

} break;

case 'q': // игроку надоело?

{

done=1; } break;

} // конец оператора switch

// копируем окно просмотра на экран

Show_View_Port(double_buffer,sx);      

_settextposition(24,0);

printf("Viewport position = %d ",sx);

} // конец оператора if

} // конец оператора while                    

// восстановление видеорежима

_setvideomode(_DEFAULTMODE);   

}// конец функции main                      

Если вы похожи на меня, то, вероятно, захотите написать игру типа Defender. Отлично! Отложите книгу - и вперед. Не беспокойтесь, я подожду. По крайней мере, попытайтесь в своей программе заставить джойстик управлять полетом корабля.                                                      

О, вы уже вернулись? Тогда поговорим о тех специальных потрясающих эффектах, без которых ни одна игра никогда не завоюет популярности.




Начало  Назад  Вперед



Книжный магазин