|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.08.2008, 23:50 | #121 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Killbrum, я в свое время пораскинул мозгами и придумал такую запись:
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
23.08.2008, 00:05 | #122 |
Пользователь
Регистрация: 14.07.2007
Сообщений: 40
|
Вопрос к Kostе. В посте номер 12, вы говорили про синусоиду обвивающую окружность. Стало интересно. Не могли бы вы описать решение этой задачи.
Котэ покарает тебя, %username%!
|
23.08.2008, 08:25 | #123 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Продолжим рассмотрение принципов построения Игры.
Следующий этап - сохранение и загрузка сохраненной игры. Перед тем , как рассмотрим блок-схему загрузки программы (которую предварительно сохранили), рассмотрим процедуры сохранения Игры и загрузки. Что нам нужно сохранить в памяти, чтобы потом вывести Игру в полном формате? Во – первых, конечно уровень , а точнее индексы блоков, составляющих запоминаемый уровень. Далее – № склада, положение Грузчика (координаты), кол-во шагов, кол-во ключей, “уровень жизни”, еще понадобится флаг (признак) наличия ключей и еще индексы сегментов карт. Хранить будем в текстовых файлах - mem_index.txt – индексы и mem_data.txt - остальные данные. После запуска Игры с любого места при нажатии кнопки меню “Сохранить” вызывается процедура LoadGame и далее WriteIndex и WriteData. Обе эти процедуры не очень сложные, используют стандартные операторы Pascal. Первая записивает индексы всех уровней в массивы. Вторая - данные текущего уровня и массив индексов сегментов карт. Теперь процедуры чтения : ReadIndex и ReadData. Если мы запустим режим “Загрузить” из меню, но при этом Игра не была сохранена, т.е. файлы памяти mem_index и mem_data отсутствуют, то OS Windows будет ‘ругаться’, Игра прервется. Поэтому используем директиву отключения автоматической проверки ошибок - {$I-} и переведем эту проверку на Delphi. Перед попыткой открытия файла памяти - {$I-} Reset(file) и возврат к автоматической проверке системой Windows – {$I+}. После проверки Delphi возвращает значение переменной IOResult . Если файл существует, IOResult = 0, в противном случае код ошибки, отличный от нуля. И если IOResult = 0 , то происходит считывание данных из файла, в противном случае выводится сообщение о том, что Игра не сохранена и следует начать Игру сначала. Используем здесь флаг чтения – flag_read, как признак успешного открытия файла памяти ( =0 - все ОК) Смотрим блок-схему 3 режима загрузки файла (это касается как кнопки загрузить из Form 1 (модально через Form 5), так и аналогичной кнопки меню Form 4 : После команды «Загрузить» мы переходим в блок-схему 2 : если Игра еще не была сохранена (файлы Index или Data отсутствуют) - переход к NewGame с исходными параметрами переменных или же при сохраненной Игре переход к GameSklad c сохраненными параметрами переменных. И опять после прохождения программы по блок-схеме 2 программа оказывается в procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
24.08.2008, 12:30 | #124 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Код:
|
24.08.2008, 19:12 | #125 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
2Longedok
Код:
|
24.08.2008, 20:30 | #126 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Внешние скобки открывают первое измерение массива, затем в скобках через запятую перечислены вложенные одномерные массивы - второе измерение. Я тоже думаю, что это уровень, цифрами закодированы клетки уровня, например 1 - пусто, 2 - стена, ну и дальше в таком роде, что именно значат цифры автор кажется уже писал.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 24.08.2008 в 20:37. |
|
24.08.2008, 22:04 | #127 |
Форумчанин
Регистрация: 08.07.2007
Сообщений: 154
|
аа опоздал . Мой вариант с синусом.
|
25.08.2008, 08:49 | #128 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Для Дениса :
В разделе type объявлен новый тип данных : TIndex = array [0..14,0..14] of integer; - это двухмерный массив. Далее const - all_mas : array [0..5] of TIndex = ... Объявлена константа - одномерный массив двухмерных массивов и сразу же всем элементам присвоены значения. S1 .. S6 - это элементы массива all_mas. Cодержат информацию об уровнях в виде двухмерной матрици ( то же что и массив) индексов каждого сегмента уровня ( 15 х 15). Индекс - это и есть тип блока склада( или уровня). 1 - это стена (Kirp) 2 - пустое место (Pust) 3 - сундук (Sund) и т.д. Т.о. S1 - это данные для построения 1-го склада, S2 - для 2-го и т.д.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
25.08.2008, 08:56 | #129 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Eще нюанс. Значения массивов укладываются в тип byte, однако присвоен тип integer. Дело в том, что в дальнейшем мы вычисляем значения элементов массивов по координатам X и Y , имеющим тип
integer. Поэтому типы данных координат и элементов массивов должны совпадать.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
25.08.2008, 09:27 | #130 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Хочу оставить пару комментариев.
Тип integer для данных массивов это перерасход памяти в 4 раза. Не вижу ни одного значения элемента больше 7. Для таких небольших массивов это не критично, но для более объемных это будет очень даже заметный перерасход памяти. const - all_mas : array [0..5] of TIndex - это уже трехмерный получается (одномерный массив двумерных). Четырехмерный = одномерный массив трехмерных и т.д. Не обратил внимания, в том куске к-рый Денис вырезал, матрица заканчивается запятой, точно трехмерный. Также можно было его так объявить all_mas : array [0..5] of array[0..14] of array[0..14] of <тип данных> Еще насчет памяти, у вас получается, что все уровни сразу грузятся в память, опять же делая скидку на то что они небольшие, это допустимо, но такой подход неправильный в принципе. Большие уровни лучше грузить по одному из файлов, и при переходе на другой выгружать и загружать следующий, а очень большие даже по частям - замечали, во многих 3D играх уровень поделен как-бы на секторы и при переходе границы идет подгрузка следующей части? Но чаще такую подгрузку делают плавной и игрок ее не замечает. P.S. Цитата:
Кстати если интегер умещается в предел байт, можно смело присваивать, если не умещается тоже теоретически можно, но будет переполнение, т.е. на практике ерунда получится (если конечно так не было задумано).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 25.08.2008 в 09:33. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
"Калькулятор в Delphi" в теоретические аспекты??? | jenja | Общие вопросы Delphi | 1 | 25.05.2008 23:23 |
основные цели и задачи студенческого форума? | ALEXBAZ | Свободное общение | 1 | 14.05.2008 22:24 |
комп. для программирования | фамил | Компьютерное железо | 4 | 09.05.2008 12:11 |
Неделя программирования | Stiker | Свободное общение | 2 | 10.02.2008 21:15 |