Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ меню во фрейме

Автор: Wait 14.05.2005 22:00

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

Автор: Altair 14.05.2005 22:09

В каком еще фрейме ? вы о чем?

Автор: NightPaladin 14.05.2005 22:25

Мне кажется можно только нарисовать параллелепипед bar3D(x1,y1,x2,y2, глубина). Использую предварительно SetFillStyle(образец_заливки, цвет) и SetLineStyle(стиль_линий, 0, толщина).
Я правильно понял фрейм - это рамка? Тогда так можно. ЕСли надо могу выложить полный внешний вид и исходник

Автор: volvo 14.05.2005 22:35

Если это "меню в рамке", то можно и поискать по форуму - уже выкладывалось несколько реализаций графического меню...

Автор: Wait 14.05.2005 22:51

Цитата(NightPaladin @ 14.05.05 18:25)
Мне кажется можно только нарисовать параллелепипед bar3D(x1,y1,x2,y2, глубина). Использую предварительно SetFillStyle(образец_заливки, цвет) и SetLineStyle(стиль_линий, 0, толщина).
Я правильно понял фрейм - это рамка? Тогда так можно. ЕСли надо могу выложить полный внешний вид и исходник

Выложите, пожалуйста... :molitva:

Автор: NightPaladin 15.05.2005 10:11

Лично у меня получилось вот так:

Код
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. Я конечно сделал очень просто, но ИМХО похоже на рамку...

Автор: Дож 15.05.2005 20:45

Вот, что я написал в прошлом году по этому поводу:

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 15.05.2005 20:50

Красиво - мой респект Дож.
Если Wait надо шоб полная симуляция менюшки - ну с управлением и т.д.
то щас пойду усовершенствую...

2Дож

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

Автор: Дож 15.05.2005 20:51

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

Я тебя недопонял.

Автор: NightPaladin 15.05.2005 20:55

Цитата
ни о каком ООП, мышь на паскале казалась нереальностью


Я эб этом, что мышь к паскалю можно приспособить с помощью встроенного ассемблера, и ооп здесь ни причём

Автор: Дож 15.05.2005 21:05

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

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

Да, нет наверно, у меня рядом книжка по паскалю лежит и в FAQ про это говорится(http://forum.pascal.net.ru/index.php?showtopic=4510&st=0&p=40148�entry40148).

Автор: volvo 15.05.2005 21:27

Кого интересует меню с ООП - смотрите здесь: http://forum.pascal.net.ru/index.php?showtopic=3222&view=findpost&p=28959

Автор: Wait 17.05.2005 21:58

Цитата(NightPaladin @ 15.05.05 16:50)
Если Wait надо шоб полная симуляция менюшки - ну с управлением и т.д.
то щас пойду усовершенствую...

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

Автор: Wait 18.05.2005 2:52

Или кто-нибудь... напишите это мне, пожалуйста. Очень прошу. Надо побыстрее :molitva: :molitva: :molitva: :molitva: :molitva: :molitva:

Автор: Дож 18.05.2005 22:57

Ну, что тебя не устраивает здесь:

Код

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.


А? Назови конкретно, что нужно исправить...

Автор: Дож 20.05.2005 0:46

Цитата
Кого интересует меню с ООП - смотрите здесь: Меню - ООП


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

unsure.gif

Автор: volvo 20.05.2005 0:50

Ну так ты в ту же директорию GRAPH.TPU скопируй... Кстати, я не тестировал эту программу под FPC, когда я ее писал даже TP7 еще не было...

Автор: Дож 20.05.2005 1:09

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

Автор: -= M0hs =- 7.02.2007 4:09

Цитата(Дож @ 19.05.2005 8:09) *

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

может директория паскаля неверно задана?

Автор: Дож 9.02.2007 0:45

-= M0hs =-
тема потеряла актуальность smile.gif
Я даже не помню о чем идет речь.