Показать сообщение отдельно
Старый 11.11.2011, 16:38   #57
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

И если нужно сделать поле не 10х10, а 8х9? Пробовал менять значения i и j на 8 и 9, затем сделал в тхт-карте поле 8х9. Виснет.

program lol;

const
STP = 30; // величина шага в пикселах для перемещения курсора

var
i, j, x, y, key,scrW,scrH: integer;
S: string;
res: resource;
land_image: array [1..2] of image;
land_array: array [1..30, 1..30] of integer;
cursor: image;

begin
land_image[1] := loadimage('/land1.png');
land_image[2] := loadimage('/land2.png');
// заполнение массива тайлов
// 1 - первая картинка - земля
for i := 1 to 30 do
for j := 1 to 30 do
begin
land_array [i, j] := 1;
end;
// загрузка карты
res := openresource('/map.txt');
// преобразование символов карты в целочисленный массив
for i := 1 to 8 do
begin
S := readline(res);
for j := 1 to 9 do
land_array[j, i] := stringtointeger(GetChar(S, j - 1));
end;
closeresource(res);
// загрузка спрайта курсора
// (больше не надо ставить такое в циклы
//(спасибо, постараюсь
cursor := loadImage('/cursor.png');
// основной цикл
repeat
// очистка экрана
setcolor(255, 255, 255);
fillrect(0, 0, 240, 320);
// отрисовка тайлов
for i := 1 to 8 do
for j := 1 to 9 do
begin
drawimage (land_image[land_array[j, i]], (j - 1) * 30, (i - 1) * 30);
end;

drawimage(cursor, x, y);//отрисовка курсора

// изменение координат курсора в зависимости от того,какая кнопка нажата

key := GetKeyClicked;

if keytoaction(key) = GA_UP then
begin
y := y - STP;
end;
if keytoaction(key) = GA_DOWN then
begin
y := y + STP;
end;
if keytoaction(key) = GA_LEFT then
begin
x := x - STP;
end;
if keytoaction(key) = GA_RIGHT then
begin
x := x + STP;
end;

//перенос курсора, если он уходит за экран

scrW:=getWidth;//получаем ширину экрана
scrH:=getHeight;//высоту

if x=scrW then //если курсор уходит вправо за экран, переносим в левый край
begin
x:=0;
end;
if x<0 then //если курсор уходит влево за экран, переносим в правый край
begin
x:=scrW-STP;
end;
if y>STP*9 then //если курсор уходит в нижнюю нецелую клетку, переносим в верхний край
begin
y:=0;
end;
if y<0 then //если курсор уходит вверх за экран, переносим его в нижнюю целую клетку
begin
y:=scrH*9;
end;

// вывод результата на экран
repaint;
// пауза в 20 мс (1 секунда = 1000 мс)
delay (20);
until (GetKeyPressed = KE_KEY0); // выход из цикла по нажатию кнопки "0"
end.
(Offline)
 
Ответить с цитированием