Показать сообщение отдельно
Старый 09.11.2011, 18:06   #30
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Помогите исправить ошибку

Сообщение от leonid Посмотреть сообщение
(спасибо PassCall'ю за урок с его сайта).
Незачто, пользуйся на здоровье

Сообщение от leonid Посмотреть сообщение
Допустим, я не хочу рандомного создания поля, а хочу, чтобы поле создавалось с помощью текстового ресурса. Как это осуществить?
Ну само по себе надо этот ресурс создать.
Допустим, мы хотим с помощью ресурса "создать" карту размером 10х10.

Так как единица отвечает за землю, а двойка - за "песок", то и в ресурсе надо так и писать. Строка должны быть 10 символов (единиц или нулей), а самих строк тоже должно быть 10.

Вот пример
1122112211
1122112211
1122112211
1122112211
2222222222
2222222222
1122112211
1122112211
1122112211
1122112211



В конце надо поставить еще 1 строку (можно и пустую), иначе при прочтении ресурса игра зависнет.


Итак, сохраняем этот текст под именем, например, map.txt.
Загружаем его в проект (зеленый плюсик в мидлетпаскале).
ПРОЦЕСС КОДИНГА
Для начала нужно ввести переменную res (или любое другое имя), назначив её как resource. В общем выглядит это так:
res: resource; (добавлять это надо после слова var)

Теперь сам код:
res:=openresource('/map.txt');//прежде чем что-то прочитать из ресурса, его необходимо открыть
for i:=1 to 10 do//читаем строку из ресурса
begin
S:=readline (res);//берем из ресурса строку и присваиваем (запоминаем) её к S. При каждом вызове readln номер читаемой строки увеличивается на 1. То есть в первый раз будет прочитана первая строчка, потом вторая и т.д.
for j:=1 to 10 do
land_array[j,i]:=stringtointeger(GetChar(S,j-1));//итак, что мы делаем? для начала при помощи GetChar выковыриваем из длинной строки S один символ. j-1 - это номер символа из строки. Первый символ имеет номер 0 (а не 1!), поэтому отнимаем единичку. Получили символ ("1" или "2"). Но так как символ это совсем не число, необходимо "превратить" символ в число. Делается это с помощью stringtointeger
end;
closeresource (res);//
Не забудь описать текстовую переменную S (S:string;), если её нет, иначе МидлетПаскаль начнет "ругаться".

Всё. Если надо готовый пример, скажи.

P.S. Для создания всяческих карт (как в данном случае) и прочих игровых данных, не помешает подучить Delphi (тоже имеет паскалеподобный синктансис (какое заумное слово =) ). Он позволит облегчить и без того тяжелую жизнь программиста. Если интересно, могу создать и залить на свой сайт небольшую статью про него.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com

Последний раз редактировалось PassCall, 09.11.2011 в 20:31. Причина: Delphi - зло. пишу readln вместо readline =/
(Offline)
 
Ответить с цитированием