Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Листинг 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 пикселей

// учтем, что 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. Отлично! Отложите книгу — и вперед. Не беспокойтесь, я подожду. По крайней мере, попытайтесь в своей программе заставить джойстик управлять полетом корабля.

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

Специальные эффекты

Под специальными эффектами обычно понимают такие зрительные эффекты, которые, выходят за рамки обычного и хорошо запоминаются. Современные компьютерные игры все больше и больше походят на настоящее кино и имеют весьма впечатляющую графику. Однако всегда можно найти что-то еще, что заставит игрока удивится. Поэтому попытаемся добиться от него возгласа:

"Ого!!!"

Специальные эффекты могут быть какими угодно, начиная от ярких взрывов и кончая сверхъестественными явлениями, психоделической графикой и всем-чем-хотите. Например, сейчас я работаю над компьютерной моделью системы частиц для того, чтобы монстр разлетался на биллионы маленьких атомов, несущихся каждый по своей орбите. Это должно выглядеть отлично! Я не уверен, что я сделаю это, но если мне это удастся, то это будет сводить с ума!

Специальные эффекты — это та область, в которой вы должны полностью Проявить себя, потому что это самая творческая часть любой компьютерной игры. Запомните одну вещь: в любой игре должен быть по-крайней мере один потрясающий воображение эффект, такой эффект, который игрок не скоро забудет! Итак, к делу, тем более что в этом разделе мы поговорим и о других важных вещах.

Фоновая мультипликация

Мы просто не можем пройти мимо фоновой мультипликации. Компьютерные Игры в плане эффектов обошли своих предшественников — игры с фишками. Добавление небольших мультиков и эффектов, которые впрямую не связаны с Действиями в игре делает компьютерные игры забавнее и оригинальнее.

Хороший пример этому — оформление в игре Karate. Летающие птички, время от времени садящиеся на вершину действующего вулкана, — это как раз то, что надо. Для игры, созданием которой мы займемся в конце этой книги, я Придумал светлячков, которые просто мигают то тут, то там. Они не служат для Какой-то определенной цели, а просто делают мир игры немного более реалистичным и полным.

Эти небольшие, длящиеся не более минуты эпизоды вы должны добавить Уже после того, как игра сделана. Всегда пытайтесь добавить в оформление игры Немного небольших мультфильмов и зрительных эффектов — это придаст вашей игре своеобразие.


Экранные эффекты

Компьютерные игры становятся все больше и больше похожими на кинофильмы. В титрах количество программистов и инженеров совсем невелико. Их заменили режиссеры и продюсеры. И вообще все выглядит так, как будто это не дисплей компьютера, а кино- или телеэкран. В кино и по телевизору мы видим изображения смикшированные и растушеванные, кроме того, там применяются и другие эффекты (например, изменяется план или фокус съемки). В компьютерных играх также используют разнообразные экранные эффекты. Например, прохождение вами очередного уровня игры может отмечаться такими эффектами, как гаснущий или тающий экран (или еще что-нибудь эдакое)!

Смена экранов влияет на впечатление от игры. Экран, на котором просто меняется фон эпизодов, быстро надоедает. Я бы предпочел, например, чтобы новая картинка появлялась из-под разлетающихся осколков старого изображения или что-нибудь еще более замысловатое.

Программировать эффектные способы смены экрана на самом деле достаточно просто. Большинство из алгоритмов требует всего нескольких строк кода, а самые сложные из них не более дюжины строк. Это еще одна область, в которой вы должны будете проявить все свои таланты, чтобы добиться действительно стоящих результатов. Для примера я объединил три различных варианта исчезновения содержимого экрана в программу SCREENFX.C. Текст этой программы приведен в Листинге 7.9. Она использует функции работы с изображениями в формате PCX (созданные в пятой главе, «Секреты VGA-карт») и некоторые функции из библиотеки GRAPH0.C.

Программа SCREENFX.C демонстрирует три эффекта:

§ Гаснущее изображение;

§ Исчезновение изображения по точкам;

§ Оплывание изображения.

Попытаемся кратко разобраться в механизмах каждого из них, чтобы понять основные идеи экранных эффектов вообще.

Date: 2015-09-18; view: 404; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию