uses Crt, Graph; const NORM=green; { цвет невыделеного пункта } 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: longint;{координаты эллипса} grDriver: Integer; grMode: Integer; ErrCode: Integer; KoordX,KoordY:longint; next_circle:boolean; 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; Function MouseIn (x1, y1, r : LongInt) : boolean; var C_X, C_Y: word; begin Asm mov ax, $03 int $33 mov C_X, CX mov C_Y, DX end; MouseIn := sqr(C_X - X1) + sqr(C_Y - Y1) <= sqr(r); 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; OutTextxy(getmaxx div 4,getmaxy div 3,'Controls In game: Mouse'); outtextxy(getmaxx div 10,getmaxy div 2,' 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: boolean; 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); next_circle:=true; mouse_on; repeat repeat X1 := Random(GetMaxX - k) + k; Y1 := Random(GetMaxY - k) + k; r := Random(k) + 6; 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)+5)); until ok; inc(curr); C[curr].X := X1; C[curr].Y := Y1; C[curr].R := R; for i := 1 to 15 do begin setpalette (i, black); delay(3000); end; fillellipse(X1,y1,r,r); delay(3000); for i := 1 to 15 do begin setpalette (i, i); end; repeat delay(15000) until ButtonPressed = 1; next_circle := MouseIn(x1, y1, r); until next_circle=false; cleardevice; Outtextxy(getmaxx div 3-30,getmaxy div 3,'Game over'); Outtextxy(getmaxx div 3-40,getmaxy div 3+3,'Press Right Button to continue'); repeat until ButtonPressed = 2; MenutoScr; end; { основная программа } begin mouse_init; 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.