Студопедия

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

Разделы сайта

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






Листинг 15.1. Секция определений WarEdit.






#define walls START 64

#define NUM_WALLS 24

#define DOORS START 128

#define NUM_DOORS 4

#define SCROLLS_START 144

#define NUM_SCROLLS 4

#define potions_START 160

#define NUM_POTIONS 4

#define foods_start 176

#define num_foods 2

#define MONSTERS_START 192

#define num_monsters 2

#define wall_STONE_1 (WALLS_START+0) // Пока только 6

#define WALL_STONE_2 (WALLS_START+1)

#define WALL_STONE_3 (WALLS_START+2)

#define WALL_STONE_4 (WALLS_START+3)

#define WALL_STONE_5 (WALLS_START+4)

#define WALL_STONE_6. (WALLS_START+5)

#define NUM_STONE_WALLS 6

#define WALL_MELT_1 (WALLS_START+6) // Пока только 6

#define WALL_MELT_2 (WALL3_START+7)

#define WALL_MELT_3 (WALLS_START+8)

#define WALL_MELT_4 (WALLS_START+9)

#define WALL_MELT__5 (WALLS_START+10)

#define WALL_MELT_6 (WALLS__START+11)

#define NUM_MELT_WALLS 6

#define WALL_OOZ_1 (WALLS_START+12) // Пока только 6

#define WALL_OOZ_2 (WALLS_START+13)

#define WALL_OOZ_3 (WALLS_START+14)

#define WALL_OOZ_4 (WALLS_START+15)

#define WALL_OOZ_5 (WALLS_START+16)

#define WALL_OOZ_6 (WALLS_START+17)

#define NUM_OOZ_WALLS 6

#define WALL_ICE_1 (WALLS_START+18) // Пока только 6

#define WALL_ICE_2 (WALLS_START+19)

#define WALL_ICE_3 (WALLS_START+20)

#define WALL_ICE_4 (WALLS_START+21)

#define WALL_ICE_5 (WALLS_START+22)

#define WALL_ICE_6 (WALLS_START+23)

#define NUM_ICE_WALLS б

#define DOORS_1 (DOORS_START+0) // Пока только 4

#define DOORS_2 (DOORS_START+1)

#define DOORS_3 (DOORS_START+2)

#define DOORS_4 (DOORS_START+3)

#define SCROLLS_1 (SCROLLS_START+0) // Пока только 4

#define SCROLLS_2 (SCROLLS_START+1)

#define SCROLLS_3 (SCROLLS_START+2)

#define SCROLLS_4 (SCROLLS_START+3)

#define РОТIONS_1 (POTIONS_START+0) // Пока только 4

#define POTIONS_2 (POTIONS_START+1)

#define POTIONS_3 (POTIONS_START+2)

#define POTIONS_4 (POTIONS_START+3)

#define FOODS_1 (FOODS_START+0) // Пока только 2

#define FOODS_2 (FOODS_START+1)

#define MONSTERS_1 (MONSTERS_START+0) // Пока только 2

#define MONSTERS_2 (MONSTERS_START+1)

#define GAME_START 255 // точка, из которой игрок
// начинает свой путь

Как можно видеть из Листинга 15.1, для каждой текстуры или объекта игрового пространства выделен некоторый диапазон значений. К примеру, все стены будут кодироваться числами от 64 до 127. В данный момент существует только 64 стены, но я оставил в программе место еще для 64 стен. Такой же подход применен и для определения всех остальных игровых объектов, так что структуру данных можно улучшить без особого труда. Когда вы рисуете карту игрового поля, то в действительности заполняете базу данных. Она представляет собой длинный массив, по способу доступа напоминающий двухмерную матрицу. Когда массив построен и уровень закончен, мы должны как-то сохранить данные. Для этого предусмотрены кнопки LOAD и SAVE. При нажатии одной из них, появляется диалоговое окно, запрашивающее подтверждение команды. Если вы выбрали YES, с помощью стандартной функции fopen() открывается файл, после чего данные сохраняются в файле или загружаются из файла. Но предварительно нужно ввести имя файла, используя строчный редактор. Этот редактор мне пришлось сделать самостоятельно. Он очень прост и понимает только алфавитно-цифровые клавиши.

Примечание

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

 

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

§ Размер каждой кнопки;

§ Количество кнопок в столбце и строке;

§ Местоположение первой кнопки;

§ Расстояние между кнопками.

Эта функция будет определять, какая из кнопок нажата. (Вспомните, не существует легкого пути для получения подобных вещей. Мы все должны сделать собственноручно. У нас нет приличного менеджера окон и механизма посылающего нам сообщения при нажатии кнопок. Хотя вы можете попробовать написать его сами, поскольку в мои планы это не входит.) В Листинге 15.2 показана функция, которая обнаруживает нажатие кнопок.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.