Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Четверг, 16.05.2024, 03:25
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Игровые алгоритмы

Создаем игровое меню.

Создаем игровое меню.

 

Данная тема будет интересна и нужна практически всем разработчикам игр на делфи. Без игрового меню могут обойтись лишь небольшие и недорогие игры типа «Крестики нолики», «Сапер», «Косынка» и подобные им игры. А вот игры слегка сложнее типа «Марио», «Танчики» и подобные без меню представить невозможно.

 

Вообще для чего нужно игровое меню и в чем его предназначение? Во-первых меню служит виртуальной обверткой нашей игры. Ведь первое что видит пользователь, запустивший наше приложение – это меню игры. Именно поэтому разработчики стараются сделать меню очень красочным: ставят красивые фоновые рисунки, сопровождающая музыка и звуки тоже очень важны, рисуются спец-эффекты при нажатии или активировании кнопочек.

 

Но самое главное предназначение меню – выбор игровых режимов. К режимам можно отнести игру по локальной сети и через интернет, одиночную игру, игровые настройки, просмотр всевозможных рейтингов и многое другое. Конечно можно это реализовать в виде выпадающих списков вверху на панели, как это сделано в той же «Косынке» или «Сапере», но это не всегда удобно и не так красочно. Поэтому нужно Вам игровое меню решайте сами.

 

А теперь приступим непосредственно к созданию игрового меню в среде программирования Делфи. Перед тем, как мы начнем нужно нарисовать все кнопочки, которые мы будем использовать в меню. Причем нужно каждую кнопочку рисовать 2 раза. Первый вариант – это как будет выглядеть не активированная кнопка (на нее не наведена мышка, она не выбрана стрелочками клавиатуры и на нее никто не нажал), а второй вариант – это активированная модель нашей кнопки.

 

Кнопки игрового меню


После того, как кнопки созданы, приступаем к программированию. Как обычно создаем проект (точнее он сам создается при запуске Delphi). Сохраняем его в любую удобную для нас папку.

 

Далее объявляем переменные и процедуры, которые нам понадобятся:

 

var

Buf:TBitmap;

Path:String;

Button:Array[1..14] of TBitmap;

procedure DownGraf;

procedure DrawMenu;

Game:TGame;

 

И создаем запись с именем «игра» чисто для удобства обращения к переменным:

 

type

TGame=record

Rezhim:String;

ActivBut:integer;

end;

 

Теперь в событии при создании формы пишем:

 

procedure TForm1.FormCreate(Sender: TObject);

begin

Game.Rezhim:='Menu';

Game.ActivBut:=1;

DownGraf;

end;

 

Тоесть при запуске игры мы сразу задаем режим игрового меню (именно оно должно рисоваться первым). Активной делаем первую кнопку по умолчанию. А далее запускаем процедуру загрузки графики (картинок). И сразу же предлагаю ее и написать:

 

procedure DownGraf;

  var i:integer;

  begin

  Buf:=TBitmap.Create;

  Buf.Height:=1000;

  Buf.Width:=1000;

 

  Path:=ExtractFileDir(Application.ExeName);

 

    for i:=1 to 7 do

    begin

    Button[i]:=TBitmap.Create;

    Button[i].Transparent:=true;

    Button[i].LoadFromFile(path+'\img\button\'+inttostr(i)+'.bmp');

    end;

 

    for i:=8 to 14 do

    begin

    Button[i]:=TBitmap.Create;

    Button[i].Transparent:=true;

    Button[i].LoadFromFile(path+'\img\button\'+inttostr(i-7)+'1.bmp');

    end;

 

  end;

 

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

 

Затем в переменную  Path мы записываем путь к папке в которую мы сохранили наш проект. Нужна эта переменная также чисто для удобства написания пути при загрузке картинок.

 

Теперь опишем процедуру прорисовки нашего меню:

 

procedure DrawMenu;

  var i:integer;

  begin

  Buf.Canvas.Brush.Color:=clBlack;

  Buf.Canvas.Rectangle(0,0,800,800);

    for i:=1 to 7 do

    begin

    if i=Game.ActivBut then Buf.Canvas.Draw(170,50+i*70,Button[i+7])

    else Buf.Canvas.Draw(170,50+i*70,Button[i]);

    end;

  Form1.Canvas.Draw(0,0,Buf);

  end;

 

В єтой процедуре мы устанавливаем заливку фона черным цветом (в виде огромного черного квадрата), а затем поверх фона рисуем наши 7 кнопочек.

 

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

 

if Game.Rezhim='RandomOne' then DrawMap;

if Game.Rezhim='Menu' then DrawMenu;

 

При режиме RandomOne (можно придумать любой другой) будем выполняться какая-то процедура. Эту строку можно закоментировать или убрать потому, что делать ту процедуру мы не будем. Вторая строка отвечает за выполнение процедуры прорисовки игрового меню при режиме  Menu.

 

Можно запустить программу и вы уже увидите готовое меню. Но он опока только рисуется. Предлагаю тепер сделать управление кнопочками в меню игры. Сделаем это в событии формы OnKeyUp (при отпускании кнопки). Тоесть когда кнопка была нажата, а затем отпущена:

 

if (Game.Rezhim='Menu') and (Key=40) then

  begin

  Game.ActivBut:=Game.ActivBut+1;

  If Game.ActivBut>7 then Game.ActivBut:=1;

  end;

 

  if (Game.Rezhim='Menu') and (Key=38) then

  begin

  Game.ActivBut:=Game.ActivBut-1;

  If Game.ActivBut<1 then Game.ActivBut:=7;

  end;

 

  if (Game.Rezhim='Menu') and (Key=13) then

  begin

    case Game.ActivBut of

    1:begin

      Game.Rezhim:='RandomOne';

      end;

    7:begin

      Form1.Close;

      end;

    end;

  end;

 

В этой процедуре мы проверяем клавиши 38 (стрелка вверх) и 40 (стрелка вниз). При нажатии вверх мы делаем активной кнопочку, которая выше, а при нажатии вниз наоборот – кнопку с большим номером.

 

Затем идет проверка нажатия клавиши 13 (Enter). При нажатии Enter на 7 кнопке программа будет закрыта.  При нажатии на первую будет установлен какой-то режим (придуманный нами). Таким же образом можно придумать и режимы для других кнопок.

 

Но поскольку не всегда управление клавишами является очень удобным – нужно запрограммировать и управление с помощью мыши. Сначала будем отслеживать координаты мыши и активировать кнопки, на которые мы наводим. Делается это в событии формы OnMouseMove:

 

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

  Y: Integer);

Var

MX,MY:integer;

begin

 

MX:=Mouse.CursorPos.X-Form1.Left;

MY:=Mouse.CursorPos.y-Form1.Top-25;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=120) and (MY<=120+64) then

  Game.ActivBut:=1;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=190) and (MY<=190+64) then

  Game.ActivBut:=2;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=260) and (MY<=260+64) then

  Game.ActivBut:=3;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=330) and (MY<=330+64) then

  Game.ActivBut:=4;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=400) and (MY<=400+64) then

  Game.ActivBut:=5;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=470) and (MY<=470+64) then

  Game.ActivBut:=6;

 

  if (MX>=170) and (MX<=170+320)

  and (MY>=540) and (MY<=540+64) then

  Game.ActivBut:=7;

 

end;

 

А теперь сделаем чтобы кнопки реагировали на клики мышкой по ним. Напишем следующий исходный код в событии формы OnClick:

 

if (Game.Rezhim='Menu') then

  begin

    case Game.ActivBut of

    1:begin

      Game.Rezhim:='RandomOne';

      end;

    7:begin

      Form1.Close;

      end;

    end;

  end;

 

При клике на 1-й кнопке поять мы активируем какой-то режим, а при клике по 7-й кнопке – закрываем программу. Можно тепер запустить программу и насладиться нашим творением. Теперь работает и управление мішкой, и управление клавиатурой. Ну вот в об щем-то и все! Желаю всем успехов в Ваших начинаниях программирования игр.

 

Источник: delgame.at.ua

Категория: Игровые алгоритмы | Добавил: Armageddets (10.12.2013) | Автор: Создаем игровое меню.
Просмотров: 2981 | Теги: Создаем игровое меню, меню для игры, делфи создание игр | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Где Вам удобнее оставлять коментарии и задавать вопроссы?
Всего ответов: 24
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

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