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

Вот, все исправил...

Начнём по порядку.

Почему висло?
1. for i:=1 to 30 do
for j:=1 to 30 do
begin
land_array [i,j]:=1;
res:=openresource('/map.txt');
end;

команда res:=openresource('/map.txt'); тут совершенно не уместна. То есть Вы пытальсь загрузить этот ресурс... 900 раз (30*30), что естественно занимает много времени. Переместить в другое место.

2. for i:=1 to 10 do
begin
S:=readline (res);
for i:=1 to 10 do
land_array[j,i]:=stringtointeger(GetChar(S,j-1));
end;

тут 2 раза используется i. но ошибка в принципе не в этом (хотя так делать тоже нельзя) обратите внимание на land_array[j,i]. j по умолчанию равен нулю. а пределы массива 1..30. тоесть число ноль ну никак не принадлежит отрезку 1-30. поэтому игра висла.

3. я немного затупил с примером. вместо нуля (в ресурсе) должна быть единица, а вместо единицы - двойка. извините.

Так. Еще замечания
1. delay (8000);

задержка у Вас стоит 8 секунд (8000 миллисекунд). То есть 1 кадр в 8 секунд, из-за чего игра превращается в слайд-шоу. Зачем? Чем меньше задежка, тем лучше (в разумных пределах, конечно. советую ставить 40)

2. drawimage(pers,50,40);

координата керсонажа равняется 50,40. То есть Вы ввели КОНСТАНТЫ, и они совершенно не зависят от значения x и y. То есть двигаться он никак не будет. Измените на drawimage(pers,x,y);

Вроде всё
__________________
Мечта программиста: запрограммировать процесс программирования.

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

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием