language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/games/tank/menu2.mod
IMPLEMENTATION MODULE Menu2;
(*****************************************************************************)
(** Menu routines to set up and start the game. **)
(*****************************************************************************)
FROM Windows IMPORT Window,Colour,OpenWindow,FrameType,DividerType,SetCursor,
WriteString,WriteLn,EraseLine;
FROM Menus IMPORT CreateMenu,SelectFromMenu,DestroyMenu,PositionMenu,DisplayMenu,
Menu,ItemText;
FROM TankHelp IMPORT Help;
VAR i:initvalu;
PROCEDURE BlastMenu():initvalu;
VAR M,wind,sound,trace,res,play:Menu;
items,WindOn,TraceOn,SoundOn,Res,Play2:ARRAY [0..9] OF ItemText;
MenuItem,count,select:CARDINAL;
Init:initvalu;
w:Window;
BEGIN
Init.Wind:=1.0;
Init.Sound:=TRUE;
Init.Trace:=TRUE;
Init.ScreenRes:=1;
Init.Player2:=human;
items[0]:= "TankBlast Startup Menu";
items[1]:=" Instructions";
items[2]:=" Sound ";
items[3]:=" Wind ";
items[4]:=" Projectile Traces";
items[5]:=" Screen Resolution";
items[6]:=" Player 2 ";
items[7]:=" BEGIN THE BATTLE";
items[8]:=" QUIT";
WindOn[0]:="WIND";
WindOn[1]:="ON";
WindOn[2]:="OFF";
TraceOn[0]:="Projectile Traces";
TraceOn[1]:="ON";
TraceOn[2]:="OFF";
SoundOn[0]:="Sound";
SoundOn[1]:="ON";
SoundOn[2]:="OFF";
Res[0]:="Screen Resolution";
Res[1]:="640 x 480";
Res[2]:="800 x 600";
Res[3]:="1024 x 768";
Play2[0]:="PLAYER 2";
Play2[1]:="HUMAN";
Play2[2]:="COMPUTER";
Play2[3]:="SUPER COMPUTER";
CreateMenu(M,1,items,8);
PositionMenu(M,intensewhite,blue,10,21,10,33);
CreateMenu(wind,1,WindOn,2);
PositionMenu(wind,intensewhite,blue,10,21,34,45);
CreateMenu(sound,1,SoundOn,2);
PositionMenu(sound,intensewhite,blue,10,21,34,45);
CreateMenu(trace,1,TraceOn,2);
PositionMenu(trace,intensewhite,blue,10,21,34,54);
CreateMenu(res,1,Res,3);
PositionMenu(res,intensewhite,blue,10,21,34,54);
CreateMenu(play,1,Play2,3);
PositionMenu(play,intensewhite,blue,10,21,34,54);
OpenWindow(w,intensewhite,blue,10,21,34,45,simpleframe,nodivider);
SetCursor(w,4,1);
FOR count:= 1 TO 3 DO
WriteString(w,"ON");
WriteLn(w);
END (*FOR*);
WriteString(w,Res[1]);
WriteLn(w);
WriteString(w,Play2[1]);
Init.Play:=TRUE;
REPEAT
MenuItem:=SelectFromMenu(M);
CASE MenuItem OF
1: Help;
|
2: SetCursor(w,4,1);
EraseLine(w,0);
IF SelectFromMenu(sound) = 2 THEN
Init.Sound:=FALSE;
WriteString(w,"OFF");
ELSE Init.Sound:=TRUE;
WriteString(w,"ON");
END;
|
3: SetCursor(w,5,1);
EraseLine(w,0);
IF SelectFromMenu(wind) = 2 THEN
Init.Wind:=0.0;
WriteString(w,"OFF");
ELSE Init.Wind :=1.0;
WriteString(w,"ON");
END;
|
4: SetCursor(w,6,1);
EraseLine(w,0);
IF SelectFromMenu(trace) = 2 THEN
Init.Trace:=FALSE;
WriteString(w,"OFF");
ELSE Init.Trace:=TRUE;
WriteString(w,"ON");
END;
|
5: SetCursor(w,7,1);
EraseLine(w,0);
select:=SelectFromMenu(res);
IF select= 1 THEN
Init.ScreenRes:=1;
WriteString(w,"640 x 480");
ELSIF select = 2 THEN
Init.ScreenRes := 2;
WriteString(w,"800 x 600");
ELSE Init.ScreenRes:=3;
WriteString(w,"1024 x 768");
END;
|
6: SetCursor(w,8,1);
EraseLine(w,0);
select:=SelectFromMenu(play);
IF select= 1 THEN
Init.Player2:=human;
WriteString(w,"HUMAN");
ELSIF select = 2 THEN
Init.Player2 := DumbComp;
WriteString(w,"COMPUTER");
ELSE Init.Player2:=SmartComp;
WriteString(w,"SUPER COMP");
END;
|
8: Init.Play := FALSE;
END;
UNTIL (MenuItem=7) OR (MenuItem = 8);
RETURN Init;
END BlastMenu;
END Menu2.