Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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 демонстрирует три эффекта: § Гаснущее изображение; § Исчезновение изображения по точкам; § Оплывание изображения. Попытаемся кратко разобраться в механизмах каждого из них, чтобы понять основные идеи экранных эффектов вообще.
|