| 
 const TIME_T := 60
 const TARGET_NUM := 10
 const C_C := 0
 var TimeLeft : int := TIME_T
 var IntToString : string
 var Font1 : int := Font.New ("Arial:20")
 var Font2 : int := Font.New ("System:50")
 var Font3 : int := Font.New ("System:140")
 var Score : int := 0
 var Hitter : boolean
 var Pauser : char
 var Index2 : nat := 1
 var Xm, Ym, Click : int
 var Clicker : boolean := false
 var X, Y, Dx, Dy : array 1 .. TARGET_NUM of int
 var Length : array 1 .. TARGET_NUM of real4
 var Hit, Miss : nat1 := 0
 var YesNo : string (2)
 
 process Bang
 sound (200, 100)
 end Bang
 
 procedure Crosshairs
 
 drawline (Xm - 30, Ym, Xm - 5, Ym, C_C)
 drawline (Xm + 30, Ym, Xm + 5, Ym, C_C)
 drawline (Xm, Ym - 30, Xm, Ym - 5, C_C)
 drawline (Xm, Ym + 30, Xm, Ym + 5, C_C)
 
 Draw.ThickLine (Xm - 100, Ym, Xm - 30, Ym, 5, C_C)
 Draw.ThickLine (Xm + 100, Ym, Xm + 30, Ym, 5, C_C)
 Draw.ThickLine (Xm, Ym - 100, Xm, Ym - 30, 5, C_C)
 Draw.ThickLine (Xm, Ym + 100, Xm, Ym + 30, 5, C_C)
 
 
 drawoval (Xm, Ym, 100, 100, C_C)
 drawoval (Xm, Ym, 30, 30, C_C)
 
 drawfilloval (Xm, Ym, 3, 3, 12)
 
 
 end Crosshairs
 
 
 procedure Random
 
 for Index : 1 .. TARGET_NUM
 randint (X (Index), 1, maxx)
 randint (Y (Index), 1, maxy)
 
 loop
 randint (Dx (Index), -1, 1)
 exit when Dx (Index) not= 0
 end loop
 loop
 randint (Dy (Index), -1, 1)
 exit when Dy (Index) not= 0
 end loop
 end for
 end Random
 process Timer
 loop
 delay (1000)
 TimeLeft := TimeLeft - 1
 exit when TimeLeft <= 0
 end loop
 end Timer
 
 procedure Pause
 Pauser := getchar
 end Pause
 
 procedure Logo
 colorback (0)
 
 cls
 Font.Draw ("W", 300, 300, Font3, 7)
 View.Update
 delay (100)
 Font.Draw ("W", 305, 305, Font3, 4)
 View.Update
 delay (100)
 Font.Draw ("PEE-TORE", 200, 300, Font2, 7)
 View.Update
 delay (100)
 Font.Draw ("PEE-TORE", 205, 305, Font2, 12)
 View.Update
 delay (1000)
 
 Font.Draw ("**PEE-TORE GAMES**", 200, 100, Font1, 12)
 View.Update
 delay (2000)
 end Logo
 
 
 
 setscreen ("graphics:max,max,nobuttonbar,offscreenonly")
 
 Logo
 
 colorback (7)
 loop
 Random
 cls
 
 Font.Draw ("DISC SHOOTER", maxx div 2 - 200, maxy - 200, Font2, 12)
 Font.Draw ("**PEE-TORE GAMES** presents: ", 200, maxy - 100, Font1, 12)
 Font.Draw ("(press any key to continue) ", 200, maxy - 300, Font1, 12)
 View.Update
 Pause
 
 cls
 Font.Draw ("The object of this game is to shoot has many targets as you can"
 , 1, maxy - 50, Font1, 12)
 Font.Draw ("with in the time limit."
 , 1, maxy - 100, Font1, 12)
 
 Font.Draw ("(press any key to continue)", 1, maxy - 150, Font1, 12)
 View.Update
 Pause
 
 for decreasing CountDown : 3 .. 0
 cls
 IntToString := intstr (CountDown)
 
 Font.Draw (IntToString, maxx div 2, maxy div 2, Font1, 12)
 View.Update
 delay (1000)
 end for
 
 
 TimeLeft := TIME_T
 Score := 0
 Hit := 0
 Miss := 0
 fork Timer
 loop
 
 cls
 
 
 
 
 mousewhere (Xm, Ym, Click)
 
 for Index : 1 .. TARGET_NUM
 if X (Index) >= maxx or X (Index) <= 1 then
 Dx (Index) := -Dx (Index)
 end if
 
 if Y (Index) >= maxy or Y (Index) <= 1 then
 Dy (Index) := -Dy (Index)
 end if
 Y (Index) := Y (Index) + Dy (Index)
 X (Index) := X (Index) + Dx (Index)
 drawfilloval (X (Index), Y (Index), 15, 15, 12)
 drawfilloval (X (Index), Y (Index), 10, 10, 0)
 drawfilloval (X (Index), Y (Index), 5, 5, 12)
 end for
 
 
 % Shooting and checking if a target was hit
 
 if Click = 1 and Clicker = false then
 fork Bang
 Index2 := 1
 Clicker := true
 Hitter := false
 loop
 % find length between mouse and targets
 Length (Index2) := sqrt ((X (Index2) - Xm) ** 2 + (Y (Index2) - Ym) ** 2)
 % check if the length is within the range of the radius of the disc
 if Length (Index2) < 15 then
 
 Hitter := true % used for to flag if a target was hit
 Hit := Hit + 1
 Score := Score + 50
 randint (X (Index2), 1, maxx)
 randint (Y (Index2), 1, maxy)
 else
 Hitter := false
 end if
 exit when Hitter = true or Index2 >= TARGET_NUM %
 Index2 := Index2 + 1  % bumps the target being checked
 
 
 end loop
 if Hitter = false then
 Miss := Miss + 1
 Score := Score - 100
 end if
 elsif Click = 0 then
 Clicker := false
 end if
 Crosshairs
 
 IntToString := intstr (Hit)
 
 Font.Draw ("Hit :" + IntToString, 10, 10, Font1, C_C)
 
 
 IntToString := intstr (Miss)
 
 Font.Draw ("Miss :" + IntToString, 100, 10, Font1, C_C)
 IntToString := intstr (Score)
 
 Font.Draw ("Score :" + IntToString, 250, 10, Font1, C_C)
 
 IntToString := intstr (TimeLeft)
 
 Font.Draw ("Time left :" + IntToString, 10, maxy - 20, Font1, C_C)
 
 
 
 % put "Hit: ", Hit
 % put "Missed: ", Miss
 % put "Score ", Score
 
 exit when TimeLeft <= 0
 View.Update
 end loop
 cls
 
 Font.Draw ("Times Up!", maxx div 2, maxy - 100, Font2, 12)
 IntToString := intstr (Score)
 
 Font.Draw ("Your score was " + IntToString, maxx div 2, maxy - 200, Font1, 12)
 
 
 Font.Draw ("Would you like to play again? (y/n)", maxx div 2 - 100, maxy - 300, Font1, 12)
 View.Update
 get YesNo
 exit when YesNo = "n"
 end loop
 
 
 |