MIDlet Pascal
Поиск по сайту
Форма входа

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Яндекс.Метрика

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Воскресенье, 15.07.2018, 20.15.30
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №11 - Инвентарь

Способов создания инвентаря очень много и все они разнообразны.
Мы расмотрим самый простой из них, на мой взгляд, это всего из 2х процедур.
начнем с добовления переменных...

var //переменные
    x, y: integer;//для цыклов
    cont: integer;
    kx, ky: integer;//выбраная клетка
    
    tory: array[1..4, 1..4] of record;//предметы
    wiew: image;//вид придмета
    name: string;//название
    count: integer;//количество
    End;

Думаю все ознакомлены с Комбинированным типом (record), если нет, то можно почитать об этом здесь .
Возвращаться думаю нестоит.

первая процедура add добавление придметов


Procedure add(s1, s2:string);//добавление придметов
var cd: boolean;//для проверки
Begin
    cd:=true;//еще можно его создать
    For y:=1 To 4 Do
    For
x:=1 To 4 Do//поиск придмета
    if cd then
    Begin
        if
tory[x, y].name = s1 then//ищим неповторяется ли предмет
        Begin
            tory[x, y].count:=tory[x, y].count+1;//прибавляем количество
            cd:=false;//запрещаем дальнейшие действия
        End;else
        if (tory[x, y].name = '') and (tory[x, y].count = 0) then//если такого придмета у нас нет
        Begin
            tory[x, y].name:=s1;//наиминовываем
            tory[x, y].wiew:=LoadImage(s2);//загружаем
            tory[x, y].count:=tory[x, y].count+1;//количество
            cd:=false;//запрещаем дальнейшие действия
        End;
    End;
End;

сложного ничего нет, но не удивляйтесь если не понятно сразу! так должно быть!)

вторая процедура полегче


Procedure DrawInven;
Begin
    For
x:=1 To 4 Do
    For
y:=1 To 4 Do
    Begin
        setColor(0, 0, 200);
        DrawRect(30+x*30, 70+y*30, 27, 27);//рисуем сетку
        if tory[x, y].count > 0 then//если что то в нейлежит
        Begin
            DrawImage(tory[x, y].wiew, 30+x*30, 70+y*30);//вид придмета
            setColor(255, 255, 255);
            DrawText(''+tory[x, y].count, 30+x*30, 70+y*30);//количество
            setColor(0, 128, 255);
            if (kx = x) and (ky = y) then
            DrawText(tory[x, y].name+' '+tory[x, y].count+'шт.', 60, 80);//что это? и количество
        End;
    End;

    setColor(0, 128, 255);
    DrawRect(30+kx*30, 70+ky*30, 27, 27);//выделяем сетку
End;

и завершим главным цыклом


Begin
    //добовляем придметы в инвентарь
    add('Камень', '/kamen_1.png');
    add('Перстень', '/persten_1.png');
    add('Золото', '/zoloto_1.png');
    add('Золото', '/zoloto_1.png');
    add('Карта', '/maps_1.png');
    add('Камень зла', '/kamen_2.png');
{ добавлять можно поразному если названия придметов совпадают
они просто увеличивается в колличистве, если же имя придмета
разное или несуществующее тогда будет создан новый придмет }
    
    kx:=1; ky:=1;//начальные коры
    Repeat
    
    setColor(0, 0, 0);
    fillRect(0, 0, 240, 320);//фон
    setColor(255, 255, 255);
    DrawText('Инвентарь', 3, 3);//подпись
    
    DrawInven;
    
    Repaint;//перерисовка
    
    //вычисления
    x:=keyToAction(getKeyClicked);//кнопки
    //здесь движим выдиленую сетку
    if x = GA_UP        then ky:=ky-1;
    if x = GA_DOWN    then ky:=ky+1;
    if x = GA_LEFT    then kx:=kx-1;
    if x = GA_RIGHT    then kx:=kx+1;
    //недаем покинуть разметку
    if kx < 1 then kx:=kx+1;
    if kx > 4 then kx:=kx-1;
    if ky < 1 then ky:=ky+1;
    if ky > 4 then ky:=ky-1;
    
    Until false;//невыходим)
End.

Скачать пример здесь

Спосибо за внимание.

Автор: Андрей Ступницкий:)

Если вы нашли ошибки/очепятки в тексте то сообщите о них на форуме
А также можете заказать программу/игру на этой странице

www.parkflyer.ru - радиоуправляемые модели, радиоуправляемые модели самолетов, магазин радиоуправляемых моделей
Роспись стен, скульптуры на заказ
Wladymyr © 2012-2018
Создать бесплатный сайт с uCoz