Показать сообщение отдельно
Старый 11.11.2011, 19:02   #58
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: Помогите исправить ошибку

// ©leonid© 2011
// проба пера :)

program lol;

const
    
STP 4// величина шага в пикселах для перемещения героя
    
AREAW 8// ширина карты в тайлах
    
AREAH 9// высота карты в тайлах
    
sW 30// ширина спрайта в пикселах
    
sH 30// высота спрайта в пикселах
    
LandCount 2// количество тайлов

var
    
iixiyxykeyscrWscrHinteger;
    
Sstring;
    
resresource;
    
land_image: array [1..LandCountof image;
    
land_array: array [1..AREAW1..AREAHof integer;
    
persimage;

begin
    
// размеры экрана
    
scrW := GetWidth;
    
scrH := GetHeight;
    for 
:= 1 to LandCount do
        
land_image[i] := loadImage('/land' IntegerToString(i) + '.png');
    
// заполнение массива тайлов
    // 1 - первая картинка - земля
    
for iy := 1 to AREAH do
    for 
ix := 1 to AREAW do
        
land_array [ixiy] := 1;
    
// загрузка карты
    
res := OpenResource('/map.txt');
    
// преобразование символов карты в целочисленный массив
    
for iy := 1 to AREAH do
    
begin
        S 
:= ReadLine(res);
        for 
ix := 1 to AREAW do
            
land_array[ixiy] := StringToInteger(GetChar(Six 1));
    
end;
    
CloseResource(res);
    
// загрузка спрайта перса
    // (больше не надо ставить такое в циклы :)
    
pers := LoadImage('/pers.png');
    
// основной цикл
    
repeat
        
// изменение координат перса,
        // в зависимости от того, какая кнопка нажата
        
key := GetKeyPressed;
        if (
keytoaction(key) = GA_UP)or(key KE_KEY2then
            y 
:= STP;
        if (
keytoaction(key) = GA_DOWN)or(key KE_KEY8then
            y 
:= STP;
        if (
keytoaction(key) = GA_LEFT)or(key KE_KEY4then
            x 
:= STP;
        if (
keytoaction(key) = GA_RIGHT)or(key KE_KEY6then
            x 
:= STP;
        
// проверки на границы этапа
        
if (AREAW sWthen
            x 
:= STP sW;
        if (
<= -sWthen
            x 
:= AREAW sW STP;
        if (
AREAH sHthen
            y 
:= STP sH;
        if (
<= -sHthen
            y 
:= AREAH sH STP;
        
// очистка экрана
        
SetColor(255255255);
        
FillRect(00scrWscrH);
        
// отрисовка тайлов
        
for iy := 1 to AREAH do
        for 
ix := 1 to AREAW do
            if (
land_array[ixiy] > 0)and(land_array[ixiy] <= LandCountthen
                DrawImage 
(land_image[land_array[ixiy]], (ix 1) * sW, (iy 1) * sH);
        
// отрисовка перса по новым координатам
        // и только на территории этапа
        
SetClip(00AREAW sWAREAH sH);
        
DrawImage(persxy);
        
SetClip(00scrWscrH);
        
// вывод результата на экран
        
Repaint;
        
// пауза в 20 мс (1 секунда = 1000 мс)
        
Delay (20);
    
until (key KE_KEY0); // выход из цикла по нажатию кнопки "0"
end
нэ?
---
позволил себе добавить несколько констант. теперь если нужно будет заменить графику (поставить спрайты другого размера, увеличить их количество) или поменять размерность этапов, то не нужно будет переписывать весь код, а достаточно поменять значения нескольких констант. ну, это так, на будущее.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff

Последний раз редактировалось barsunduk, 11.11.2011 в 20:19.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
leonid (11.11.2011)