Помощь - Поиск - Пользователи - Календарь
Полная версия: меню во фрейме
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Wait
здавствуйте, если можете, помогите, пожалуйста..
мне нужно меню во фрейме для игры... Где-то слышал, что такое возможно... Напишите, пожалуйста модуль для этого.
Заранее благодарен
Altair
В каком еще фрейме ? вы о чем?
NightPaladin
Мне кажется можно только нарисовать параллелепипед bar3D(x1,y1,x2,y2, глубина). Использую предварительно SetFillStyle(образец_заливки, цвет) и SetLineStyle(стиль_линий, 0, толщина).
Я правильно понял фрейм - это рамка? Тогда так можно. ЕСли надо могу выложить полный внешний вид и исходник
volvo
Если это "меню в рамке", то можно и поискать по форуму - уже выкладывалось несколько реализаций графического меню...
Wait
Цитата(NightPaladin @ 14.05.05 18:25)
Мне кажется можно только нарисовать параллелепипед bar3D(x1,y1,x2,y2, глубина). Использую предварительно SetFillStyle(образец_заливки, цвет) и SetLineStyle(стиль_линий, 0, толщина).
Я правильно понял фрейм - это рамка? Тогда так можно. ЕСли надо могу выложить полный внешний вид и исходник

Выложите, пожалуйста... :molitva:
NightPaladin
Лично у меня получилось вот так:
Код
program asd;
Uses
   crt,graph;
var
   a,i : Integer;
begin
    a:= detect;
    i:=0;
    InitGraph(a, i, 'C:\BP\BGI');
             ClearDevice;
             SetFillStyle(5, 9);
             bar(0,0,640,480);
             SetLineStyle(4,255,red);
             rectangle(10,10,630,470);
             SetFillStyle(4, 10);
             bar(10,10,630,470);
             SetFillStyle(SolidFill,black);
             bar(220,170,450,320);
             SetFillStyle(7, 3);
             bar3D(200,150,430,300, 0, TopOn);
             OutTextXY(285,180,'Options');
             OutTextXY(282,200,'New Game');
             OutTextXY(297,220,'Exit');
             Readkey;
     CloseGraph;
end.


Внешний вид огрничен только фантазией и занием графики в TP. Я конечно сделал очень просто, но ИМХО похоже на рамку...
Дож
Вот, что я написал в прошлом году по этому поводу:

Unit FMenu;
Interface


Type menu=record
But:byte;
button:array[1..8] of string[22];
Cin,Cout:integer;
Fon:array[1..2]of integer;
Zag : string[10];
end;

Var N : menu;


Function SimpleMenu : byte;

IMPLEMENTATION
Uses Graph,crt;

Function SimpleMenг : byte;
Var i,j:integer;;
C:char;
Y:1..8;
BEGIN
SetFillStyle(N.Fon[1],N.Fon[2]);
Y:=1; C:=' ';
While ord©<>13 do begin
i:=0;
With N do begin
settextstyle(4,0,8);{перенисите нужный BGI шрифт!}
setcolor(Cout);
Bar(0,0,640,480);
OutTextXY(20,5,Zag);
settextstyle(4,0,5);
While i<>But do begin
i:=i+1;
If i=Y then setcolor(Cin) else setcolor(Cout);
OutTextXY(20,i*TextHeight(N.Button[i])+60,N.Button[i]);
end;
end;
C:=Readkey;
Case ord( c ) of
72:If Y<>1 then Y:=Y-1 else Y:=N.But;
80:If Y<>N.But then Y:=y+1 else Y:=1;
end;
end;
simpleMenu:=Y;
end;

BEGIN

End.


Модуль состоит из одной функции SimpleMenu, типа Menu и глобальной переменной N. Переменная N отвечает за внешний вид и содержимое меню, а точнее за:
1) кол-во кнопок в меню (переменная Menu.but)
2) надписи в кнопках(переменная Menu.Button)
3) названия меню(переменная Menu.Zag)
4) цвет фона в стиле Bar. В переменной Menu.Fon[1] задан тип фона(см. setfillstyle), а в Menu.Fon[2] цвет фон.
5) Цвет пассивных и активных кнопок. Menu.Cin - cursor in(курсор внутри)
Menu.Cout - cursor out(курсор вне)

Функция SimpleMenu: создает меню и обробатывает сигналы пользователя:
стрелка вверх: сдвинуть указатель вверх
стрелка вниз: сдвинуть указатель вниз
Enter : выбрать выделенную кнопку.
Функция возвращает номер выбранной пользователем кнопки.
Примечание : модуль использует какой-то BGI шрифт, не помню какой точно.

Прошу не судить строго, я тогда не знал ни о каком ООП, мышь на паскале казалась нереальностью... :p2:
NightPaladin
Красиво - мой респект Дож.
Если Wait надо шоб полная симуляция менюшки - ну с управлением и т.д.
то щас пойду усовершенствую...

2Дож

А почему ООП, мышь можно и встроенным ассемблером делать к сожалению на память не воспроизведу, но можно и найти - тя интересует?
Дож
Цитата
А почему ООП, мышь можно и встроенным ассемблером делать к сожалению на память не воспроизведу, но можно и найти - тя интересует?

Я тебя недопонял.
NightPaladin
Цитата
ни о каком ООП, мышь на паскале казалась нереальностью


Я эб этом, что мышь к паскалю можно приспособить с помощью встроенного ассемблера, и ооп здесь ни причём
Дож
ААА! Да, насчет мыши я все уже хорошо знаю, но год назад не знал. А насчет ООП, если бы я об нем знал, то создал бы объект, например, TMenu, в который бы входили все эти поля и функция SimpleMenu. И была бы возможность создавать не одно меню, а много! Хотя, здесь не много исправлять нужно.
Цитата
А почему ООП, мышь можно и встроенным ассемблером делать к сожалению на память не воспроизведу, но можно и найти - тя интересует?

Да, нет наверно, у меня рядом книжка по паскалю лежит и в FAQ про это говорится(FAQ).
volvo
Кого интересует меню с ООП - смотрите здесь: Меню - ООП
Wait
Цитата(NightPaladin @ 15.05.05 16:50)
Если Wait надо шоб полная симуляция менюшки - ну с управлением и т.д.
то щас пойду усовершенствую...

Усовершенствуйте, плиз, если Вам не трудно, буду очень благодарен.
Мне это меню нужно для первой страницы игры
В тексовом режиме я его умею делать, но это не то - для первой страницы нужна графика...
Мне надо, чтобы управление было попроще без всяких там мышей, ассемблеров... чтобы был переход на метки Новая игра, Справка, Выход...
Очень хотелось бы...
Wait
Или кто-нибудь... напишите это мне, пожалуйста. Очень прошу. Надо побыстрее :molitva: :molitva: :molitva: :molitva: :molitva: :molitva:
Дож
Ну, что тебя не устраивает здесь:
Код

Unit FMenu;

Interface



Type menu=record

    But:byte;

    button:array[1..8] of string[22];

    Cin,Cout:integer;

    Fon:array[1..2]of integer;

    Zag : string[10];

    end;


Var N : menu;

   


Function  SimpleMenu : byte;


IMPLEMENTATION

Uses Graph,crt;


Function SimpleMenг : byte;

Var i,j:integer;;

     C:char;

      Y:1..8;

BEGIN

SetFillStyle(N.Fon[1],N.Fon[2]);

Y:=1; C:=' ';

While ord( C )<>13 do begin

i:=0;

With N do begin

settextstyle(4,0,8);{перенисите нужный BGI шрифт!}

setcolor(Cout);

Bar(0,0,640,480);

OutTextXY(20,5,Zag);

settextstyle(4,0,5);

While i<>But do begin

i:=i+1;

If i=Y then setcolor(Cin) else setcolor(Cout);

OutTextXY(20,i*TextHeight(N.Button[i])+60,N.Button[i]);

end;

end;

C:=Readkey;

Case ord( C ) of

72:If Y<>1 then Y:=Y-1 else Y:=N.But;

80:If Y<>N.But then Y:=y+1 else Y:=1;

end;

end;

simpleMenu:=Y;

end;


BEGIN


End.


А? Назови конкретно, что нужно исправить...
Дож
Цитата
Кого интересует меню с ООП - смотрите здесь: Меню - ООП


Не компилируется Graph...
Цитата(console)
graphix.pas(9,11) Fatal: Can't compile unit GRAPH, no sourcer available

unsure.gif
volvo
Ну так ты в ту же директорию GRAPH.TPU скопируй... Кстати, я не тестировал эту программу под FPC, когда я ее писал даже TP7 еще не было...
Дож
Не получается, GRAPH.TPU там уже был... Та же ошибка... sad.gif
-= M0hs =-
Цитата(Дож @ 19.05.2005 8:09) *

Не получается, GRAPH.TPU там уже был... Та же ошибка... sad.gif

может директория паскаля неверно задана?
Дож
-= M0hs =-
тема потеряла актуальность smile.gif
Я даже не помню о чем идет речь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.