Uses CRT, Graph; Const otn = 3; typeofstar = 5; ang1=5; ang2=10; ang3=15; Type TStar = record x,y,radius,color,ang : integer; end; Var stars : array [1..1+typeofstar+typeofstar*typeofstar] of Tstar; i : integer; Procedure GetStars; Var i,j: integer; tmp,tmp2 : integer; Begin randomize; with stars[1] do begin x := getmaxx div 2; y := getmaxy div 2; radius := 150; inc(ang,5); if ang > 360 then ang := ang mod 360; end; for i := 2 to typeofstar+1 do begin with stars[i] do begin tmp :=i*(360 div typeofstar)+stars[1].ang-(180 div typeofstar); x := stars[1].x+round(150*cos(Pi*tmp/180)); y := stars[1].y+round(150*sin((Pi*tmp)/180)); radius := 70; dec(ang,10); if ang < 0 then ang := 360+ang; for j := (i-1)*typeofstar+2 to (i-1)*typeofstar+2+typeofstar do with stars[j] do begin tmp2 :=j*(360 div typeofstar)+stars[i].ang-(180 div typeofstar); x := stars[i].x+round(70*cos(Pi*tmp2/180)); y := stars[i].y+round(70*sin((Pi*tmp2)/180)); radius := 35; inc(ang,15); if ang > 360 then ang := ang mod 360; end; end; end; End; Procedure INITG; Var grDriver: Integer; grMode: Integer; i : integer; begin grDriver := Detect; InitGraph(grDriver, grMode,''); for i := 1 to 1+typeofstar+typeofstar*typeofstar do stars[i].color := random(14)+1; End;{INITG} {------------------------------} Procedure Star(x,y,radius,Color,a0: integer); Var dx,dy,i,a : integer; Begin SetColor(color); MoveTO(x+round((radius div otn)*cos(pi*a0/180)), y+round((radius div otn)*sin(pi*a0/180))); for i := 1 to typeofstar * 2 do begin a := i*(360 div (typeofstar*2))+a0; if i mod 2 = 1 then begin dx := round(radius*cos((Pi*a)/180)); dy := round(radius*sin((Pi*a)/180)) end else begin dx := round((radius div otn)*cos((Pi*a)/180)); dy := round((radius div otn)*sin((Pi*a)/180)) end; LineTo(x+dx,y+dy); end; End;{Star} Begin INITG; repeat cleardevice; Getstars; for i := 1 to 1+typeofstar+typeofstar*typeofstar do star(stars[i].x,stars[i].y,stars[i].radius,stars[i].color,stars[i].ang); delay(500); until keypressed; CloseGraph; End.