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


«Animotion» - часть 6


Чтобы показать вам пример скроллинга, я написал программу, которая создает игровое пространство размером 640х100 пикселей. Я двигаю окно по изображению мира игры и передаю его содержимое в середину экрана. В этой игре мир состоит из звезд и гористого горизонта. (Этот пейзаж немного напоминает игру Defender.) Перемещая с помощью клавиатуры окно просмотра вправо и влево, вы можете прокрутить весь пейзаж. Листинг 7.8 содержит текст этой программы, которая называется DEFEND.С.

Листинг 7.8. Пример прокрутки (DEFEND.C).

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ////////////////////////////////////////

#include <stdio.h>

#include <math.h>

#include <graph.h>

#inciude <malloc.h>

#include <memory.h>

#include <string.h>

// ОПРЕДЕЛЕНИЯ ///////////////////////////////////////////

#define SCREEN_WIDTH      (unsigned int)320

#define SCREEN_HEIGHT     (unsigned int)200

// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ////////////////////////////////////////

unsigned char far *video_buffer = (char far *)0xA0000000L;//указатель на видеобуфер

unsigned char far *double_buffer = NULL;

// ФУНКЦИИ /////////////////////////////////////////////////

void Show_View_Port(char far *buffer,int pos)

{     

// Копирование части дублирующего буфера на экран

unsigned int y,double_off, screen_off;

// нужно переместить 100 строк, перемещаем их построчно

for (y=0; у<100; у++)

{

// расчет начального смещения дублирующего буфера

//у * 640 +pos

double_off = ((у<<9) + (у<<7) + роs);

// расчет начального смещения в видеобуфере

// у * 320 + 80

screen_off = (((у+50)<<8) + ((у+50)<<6) + 80);

// перемещение данных

_fmemmove ((char far *)&video_buffer[screen off],

(char far *)&double_buffer[double_off],160);

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

} // конец Show View_Port

////////////////////////////////////////////////////////////////

void Plot_Pixel_Fast_D2(int x,int y,unsigned char color)

{

// прорисовка пикселей в дублирующем буфере нашего виртуального

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




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



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