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
|