uses Crt, Graph; const NORM=WHITE; { цвет невыделеного пункта } SEL=YELLOW; { цвет выделенного пункта } BackSelectedColor=Cyan; BackNotSelectedColor=Black; k=50;{рандом радиуса} maxCircles = 50;{кол-во шаров} N=3; {количество пунктов в меню} HeightSize = 40; {высота, занимаемая каждой строчкой в меню} WidthSize = 200; {длина каждой строчки} var menu:array[1..N] of string[12];{ названия пунктов меню } punkt:integer; { номер выделенного пункта } ch:char; { введенный символ } x,y:integer; { координаты первой строки меню } X1,y1, r: Integer;{координаты эллипса} grDriver: Integer; grMode: Integer; ErrCode: Integer; button,q,w,e, mouse_keys: word; mouse_X, mouse_Y:word; function mouse_init: boolean; var ResultregAX:word; begin asm mov ax,$00 int $33 mov ResultRegAX,ax end; If ResultRegAX=$FFFF then Mouse_Init:=true else Mouse_Init:=false end; procedure mouse_on; begin asm mov ax,$01 int $33 end end; procedure mouse_off; begin asm mov ax,$02 int $33 end end; procedure mouse_get(var m_x:word; var m_y:word); var ResultCX, ResultDX:word; begin asm mov ax,$03 int $33 mov ResultCX,CX mov ResultDX,DX end; m_x:=ResultCX; m_y:=ResultDX; end; Function MouseIn(r,x1,y1:integer;m_x,m_y:word):boolean; var rdx,rcx:word; begin asm mov ax,$03 int $33 mov rdx,dx mov rcx,cx end; MouseIn := (sqr((m_x-x1)/r) + sqr((m_y-y1)/r))<=1 end; Function ButtonPressed:byte; var rbl:byte; begin asm mov ax,$03 int $33 mov rbl,bl end; ButtonPressed:=rbl end; Procedure punkt2; begin ClearDevice; OutText('Controls In game: Mouse & ESC, Controls in Menu by buttons : Up,Down,ESC,ENTER'); readln; end; procedure ShowSelectedPunkt; begin SetFillStyle(1, BackSelectedColor ); Bar(x,y+(punkt-1)*HeightSize-(HeightSize div 4), x + WidthSize, y+(punkt-1)*HeightSize+3*(HeightSize div 4)); SetColor(SEL); MoveTo(x,y+(punkt-1)*HeightSize); OutText(menu[punkt]);{ выделение строки меню } SetColor(NORM); end; procedure ShowNotSelected(i : integer); begin SetFillStyle(1, BackNotSelectedColor); Bar(x,y+(i-1)*HeightSize-(HeightSize div 4), x + WidthSize, y+(i-1)*HeightSize+3*(HeightSize div 4)); SetColor(NORM); MoveTo(x,y+(i-1)*HeightSize); OutText(menu[i]);{ выделение строки меню } end; Procedure MenuToScr;{ вывод меню на экран } var i:integer; begin ClearDevice; SetTextStyle(TriplexFont, HorizDir, 2); SetTextJustify(LeftText, TopText); SetColor(NORM); for i:=1 to N do begin ShowNotSelected(i); end; ShowSelectedPunkt; end; Procedure punkt1; var GraphDriver, GraphMode: Integer; ch:char; i, curr : integer; ok,vn : boolean; knop:byte; C : array[1 .. maxCircles] of record X, Y, R : longint; end; begin GraphDriver := Detect; InitGraph(GraphDriver, GraphMode, ' '); if GraphResult<> grOk then Halt(1); curr := 0; setfillstyle(8,red); setcolor(red); mouse_on; repeat X1 := Random(GetMaxX - k) + k; Y1 := Random(GetMaxY - k) + k; r := Random(k) + 6; { mouse_get(m_x,m_y); knop:=ButtonPressed; if knop=1 then vn:=MouseIn(r,x1,y1,m_x,m_y); If vn=true then begin } ch:=readkey; if ch=chr(13) then begin repeat ok := true; for i := 1 to curr do ok := ok and (sqr(C[i].X - X1) + sqr(C[i].Y - Y1) > sqr(R + C[i].R)); until ok; inc(curr); C[curr].X := X1; C[curr].Y := Y1; C[curr].R := R; fillellipse(X1,y1,r,r); end; until ch=chr(27);{vn=false; } MenutoScr; end; { основная программа } begin grDriver := Detect; InitGraph(grDriver, grMode,'..\BGI'); ErrCode := GraphResult; menu[1]:=' Start '; menu[2]:=' About '; menu[3]:=' Quit '; punkt:=1; x:=200; y:=100; MenuToScr; repeat mouse_on; ch:=ReadKey; if ch=char(0) then begin ch:=ReadKey; case ch of chr(80):{ стрелка вниз } if punkt1 then begin ShowNotSelected(punkt); punkt:=punkt-1; ShowSelectedPunkt; end; end; end else if ch=chr(13) then begin { } case punkt of 1:punkt1; 2:punkt2; N:ch:=chr(27);{ выход } end; MenuToScr; end; until ch=chr(27);{ } end.