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

Статистика

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


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

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Суббота, 24.02.2018, 15.03.48
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №20 - меню для игры или приложения
Всем привет!В этом уроке я роскажу как делать менюшку для какой нибудь игры.Здесь в принципе ничего сложного нет, за исключением дизайна.

Рассмотрим первый вариант менюшки.Довольно таки простой, особых эфектов нет, но все таки посмотрим.Для начала создадим константы с пунктами данного меню, ну например так:

const pmenu1='Играть';
      pmenu2='Таблица рекордов';
      pmenu3='Настройки';
      pmenu4='Выйти';

Далее мы пожалуй создадим переменные:

var ymenu,smenu,key:integer; //переменные

Теперь рассмотрим для чего нужна каждая переменная.
ymenu - имеет значение высоты указателя.
smenu - имеет значение выбраного пункта меню.
key - как Вы уже догадались, имеет значение нажатой клавиши.
Теперь инициализируем некоторые переменные:

  ymenu:=88;
  smenu:=1;

и так теперь разбираемся почему именно такие значения.Все просто ymenu=158 потому, что я хчу все пункты разместить в центре экрана.Каждый пункт занимает 20 пикселей, и промежуток между ними 20 пикселей.Тоисть теперь пункт знимет 40 пикселей, а их 4, и на последнем промежотк ненужен, получаем простую формулу 4*40-20, тоистьполучаем 140, теперь что бы найти начало пунктов по высоте что бы разместить все по середине, получаем формулу (320-140)/2.Это получается высота верхнего края блока меню...Но получается 90, а не 88.Но мы же исползуем переменную, для опеределения высоты курсора, и не хотим что бы он был по верхний край текста, красивее когда он будет чуть шире.

теперь делаем бесконечный цикл и сам код отображения курсора и пунктов:

  

repeat
    SetColor(70,70,70); //Выбираем темно-серый цвет
    FillRect(0,0,240,320); //Закрашиваем фон
    SetColor(70,160,70); //Выбираем темно-зеленый цвет
    FillRoundRect(20,ymenu,200,24,10,10); //закашиваем внутренюю часть курсора
    SetColor(170,255,170);//Выбираем светло=-зеленый цвет
    DrawRoundRect(20,ymenu,200,24,10,10); //Рисуем окантовку курсора
    SetColor(255,255,255); //Выбираем белый цвет
    DrawText(pmenu1,(240-GetStringWidth(pmenu1))/2,90); //Рисуем названия пунктов меню
    DrawText(pmenu2,(240-GetStringWidth(pmenu2))/2,130);
    DrawText(pmenu3,(240-GetStringWidth(pmenu3))/2,170);
    DrawText(pmenu4,(240-GetStringWidth(pmenu4))/2,210);
    DrawText('Выб#',240-GetStringWidth('Выб#'), 300); //Рисуем кнопку выбора
    repaint;//Отрисовываем
  until false;

Ну вот отлично, теперь наше меню отрисовывается.Дальше делаем его что бы в меню можно было выбрать любой пункт и запустить.Добавляем после "repaint" следующий код:

    key:=GetKeyClicked; //считываем нажатую клавишу
    if key=KE_KEY2 then smenu:=smenu-1; 
    if key=KE_KEY8 then smenu:=smenu+1;
    if smenu=0 then smenu:=4; //делаем ограничение на количество пунктов меню
    if smenu=5 then smenu:=1;
    if key=KE_POUND then //Если выбрали пункт какой-то
      begin
        if smenu=1 then game; //Выбрали играть, запускаем процедуру game 
        if smenu=2 then table;
        if smenu=3 then settings;
        if smenu=4 then halt; //halt - это стандартная процедура закрытия приложения
      end;
    ymenu:=50+(smenu*40);// росчитываем высоту курсора

Ну вот Вы научились делать простое меню.
Теперь создадим анимационное меню, более красивое.И так константы оставим на месте.Вот затронем переменные.Переменные в данном случае будут выглядеть так:

var smenu,key,i:integer;
    xmenu:array[1..4] of integer;

Тоисть поскольку пункт будет выдвигатся в бок то уже не ymenu, а xmenu, и поскольку каждый должен работать не зависимо друг от друга делаем масив на 4 переменных(у пункта меню)
Ну и как же проигнорировать переменную i, она у нас будет в роли счетчика для циклов for .. to .. do.Тепрь днаем инициализацию переменных: 

  for i:=1 to 4 do xmenu[i]:=-30;
  smenu:=1;

все переменные xmenu приравниваем к -30, и выдвигать каждый пункт будем на 20 пикселей, тоисть максимум будет -10 пикселей.
Теперь делаем отрисовку менюшки:

  repeat
    SetColor(70,70,70); //Выбираем темносерый цвет
    FillRect(0,0,240,320); //Закрашиваем фон
    for i:=1 to 4 do //отрисовываем курсор под каждой надписью
      begin
        SetColor(70,160,70); //Выбираем темно-зеленый цвет
        FillRoundRect(xmenu[i],50+i*40,200,24,10,10); //закашиваем внутренюю часть курсора
        SetColor(170,255,170); //Выбираем светло=-зеленый цвет
        DrawRoundRect(xmenu[i],50+i*40,200,24,10,10); //Рисуем окантовку курсора
      end;
    SetColor(255,255,255); //Выбираем белый цвет
    DrawText(pmenu1,xmenu[1]+40,90);//Рисуем названия и они тоже будут выдвигаться в бок
    DrawText(pmenu2,xmenu[2]+40,130);
    DrawText(pmenu3,xmenu[3]+40,170);
    DrawText(pmenu4,xmenu[4]+40,210);
    DrawText('Выб#',240-GetStringWidth('Выб#'), 300);//рисуем надпись
    repaint; //отрисовываем
  until false;

Ну вот...Менюшка теперь отрисовывается, но не работает.Это прошлый код но немного модифицирован.Теперь добавляем в цикл, команды управления:

    if key=KE_KEY2 then smenu:=smenu-1; 
    if key=KE_KEY8 then smenu:=smenu+1;
    if smenu=0 then smenu:=4; //делаем ограничение на количество пунктов меню
    if smenu=5 then smenu:=1;
    if key=KE_POUND then //Если выбрали пункт какой-то
      begin
        if smenu=1 then game; //Выбрали играть, запускаем процедуру game 
        if smenu=2 then table;
        if smenu=3 then settings;
        if smenu=4 then halt; //halt - это стандартная процедура закрытия приложения
      end;
    for i:=1 to 4 do // проверяем все пункты меню
      begin
        if i<>smenu then if xmenu[i]>-30 then xmenu[i]:=xmenu[i]-2; // если не выбранцый пункт немного выдвинут, задвигаем назад
        if i=smenu then if xmenu[i]<-10 then xmenu[i]:=xmenu[i]+2; // если выбраный пункт не выдвинут выдвигаем его
      end;

Ну вот и все.На этом урок о меню приложения закончен, будут вопросы, задавайте на форуме или в группе вконтакте, с удовольствием Вам ответим.

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

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