%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% WHAK-A-MOLE %
% BY: MATT GUTTMAN %
% LAST MODIFIED: FEB 17/04 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
setscreen ("graphics:340;360,position:300;200,nocursor,title:Whak-A-Mole")
var name : string
var sound1 : string
var molenum : int
var molenum2 : int
var difficulty : string (1)
var delay1 : int
var x : int := 60
var y : int := 60
var x1 : int := 60
var y1 : int := 60
var x2 : int := 60
var y2 : int := 60
var timeremain : int := 30
var timeposition : int := maxcol - 3
var gameover : int := 0
var countdownnum : int := 6
var btnnum : int
var btnupdn : int
var moux : int
var mouy : int
var moux1 : int
var mouy1 : int
var score : int := 0
var duration : int
var duration2 : int
var streamNumber : int
var filename : string
var hiscore : array 1 .. 10 of int
var hiscorer : array 1 .. 10 of string
var scorerank : int := 11
var scorerankword : string
var newhigh : string := ""
var count : int := 11
var endprog : string (1)
var fontId : int := Font.New ("verdana:34:bold")
var a : int := 0000
var c : int := 0000
var x4 : int := 10
var y4 : int := 210
var text : string := "Matt"
var buffer : string := ""
var x3 : array 1 .. length (text) of int
var y3 : array 1 .. length (text) of int
colourback (7)
cls
Font.Draw ("WHAK-A-MOLE", 10, 315, fontId, 2)
delay (500)
Font.Draw ("BY:", 10, 265, fontId, 3)
delay (250)
fontId := Font.New ("verdana:45:bold")
for i : 1 .. length (text)
x3 (i) := x4 + Font.Width (buffer, fontId)
y3 (i) := y4
buffer += text (i)
end for
for decreasing i : length (text) .. 1
for k : 1 .. x3 (i)
Font.Draw (text (i), k, y3 (i), fontId, 14)
delay (1)
drawline (k - 1, y3 (i) - 5, k - 1, y3 (i) + 50, 7)
Font.Draw (text (i), k - 2, y3 (i), fontId, 7)
end for
Font.Draw (text (i), x3 (i), y3 (i), fontId, 14)
delay (50)
end for
a := 0000
c := 0000
x4 := 10
y4 := 160
text := "Guttman"
buffer := ""
var x5 : array 1 .. length (text) of int
var y5 : array 1 .. length (text) of int
for i : 1 .. length (text)
x5 (i) := x4 + Font.Width (buffer, fontId)
y5 (i) := y4
buffer += text (i)
end for
for decreasing i : length (text) .. 1
for k : 1 .. x5 (i)
Font.Draw (text (i), k, y5 (i), fontId, 43)
delay (1)
drawline (k - 1, y5 (i) - 5, k - 1, y5 (i) + 50, 7)
Font.Draw (text (i), k - 2, y5 (i), fontId, 7)
end for
Font.Draw (text (i), x5 (i), y5 (i), fontId, 43)
delay (50)
end for
delay (100)
for count1 : 1 .. 2
drawfilloval (75, 10, 40, 10, 7)
drawfillbox (65, 15, 125, 55, 7)
drawfilloval (75, 46, 40, 40, 4)
drawfilloval (55, 66, 5, 5, 2)
drawfilloval (95, 66, 5, 5, 2)
drawarc (75, 26, 20, 10, 180, 0, 2)
drawfillbox (110, 80, 150, 100, 0)
drawfillbox (125, 30, 135, 80, 0)
delay (500)
drawfilloval (75, 46, 40, 40, 7)
drawfillbox (110, 30, 150, 100, 7)
drawfilloval (75, 10, 40, 4, 4)
drawfilloval (55, 12, 1, 1, 2)
drawfilloval (95, 12, 1, 1, 2)
drawarc (75, 8, 20, 1, 180, 0, 2)
drawfillbox (65, 15, 85, 55, 0)
drawfillbox (85, 30, 135, 40, 0)
delay (500)
end for
drawfilloval (75, 10, 40, 10, 7)
drawfillbox (65, 15, 125, 55, 7)
drawfilloval (75, 46, 40, 40, 4)
drawfilloval (55, 66, 5, 5, 2)
drawfilloval (95, 66, 5, 5, 2)
drawarc (75, 26, 20, 10, 180, 0, 2)
drawfillbox (110, 80, 150, 100, 0)
drawfillbox (125, 30, 135, 80, 0)
delay (500)
colourback (0)
cls
setscreen ("cursor")
loop
cls
put "Enter your name: " ..
get name : *
exit when length (name) > 2 and length (name) < 19
if length (name) < 3 then
cls
setscreen ("nocursor,noecho")
put "THAT NAME IS TOO SHORT!"
delay (2000)
setscreen ("cursor,echo")
elsif length (name) > 18 then
cls
setscreen ("nocursor,noecho")
put "THAT NAME IS TOO LONG!"
delay (2000)
setscreen ("cursor,echo")
end if
end loop
loop
cls
put "Enter difficulty 1-3: " ..
getch (difficulty)
exit when difficulty = "1" or difficulty = "2" or difficulty = "3"
end loop
loop
cls
put "Sound on or off? " ..
get sound1
exit when sound1 = "on" or sound1 = "off"
end loop
cls
setscreen ("nocursor,noecho")
if difficulty = "1" then
delay1 := 250
duration := 120
duration2 := 60
filename := Dir.Current + "\\highscore1"
elsif difficulty = "2" then
delay1 := 125
duration := 237
duration2 := 118
filename := Dir.Current + "\\highscore2"
elsif difficulty = "3" then
delay1 := 63
duration := 470
duration2 := 234
filename := Dir.Current + "\\highscore3"
end if
if sound1 = "on" then
sound1 := "<<1c"
else
sound1 := ""
end if
drawbox (0, 0, 340, 340, 17)
drawbox (10, 10, 330, 330, 17)
drawfill (5, 5, 17, 17)
drawfillbox (110, 0, 120, 340, 17)
drawfillbox (220, 0, 230, 340, 17)
drawfillbox (0, 110, 340, 120, 17)
drawfillbox (0, 220, 340, 230, 17)
procedure countdown
loop
countdownnum := countdownnum - 1
locate ( (maxrow div 2) + 1, maxcol div 2)
put countdownnum
delay (1000)
exit when countdownnum = 0
end loop
locate ( (maxrow div 2) + 1, maxcol div 2)
put " "
end countdown
process timer
loop
timeremain := timeremain - 1
if timeremain < 10 then
locate (1, maxcol - 3)
put "0"
timeposition := maxcol - 2
end if
locate (1, timeposition)
put timeremain
delay (1000)
exit when timeremain = 0
end loop
gameover := 1
end timer
process drawmole
for count : 1 .. duration
randint (molenum, 1, 9)
if molenum = 1 then
x := 60
y := 60
elsif molenum = 2 then
x := 170
y := 60
elsif molenum = 3 then
x := 280
y := 60
elsif molenum = 4 then
x := 60
y := 170
elsif molenum = 5 then
x := 170
y := 170
elsif molenum = 6 then
x := 280
y := 170
elsif molenum = 7 then
x := 60
y := 280
elsif molenum = 8 then
x := 170
y := 280
elsif molenum = 9 then
x := 280
y := 280
end if
drawfilloval (x, y, 40, 40, 4)
drawfilloval (x - 20, y + 20, 5, 5, 2)
drawfilloval (x + 20, y + 20, 5, 5, 2)
drawarc (x, y - 20, 20, 10, 180, 0, 2)
delay (delay1)
end for
end drawmole
process manerasemole (moux1 : int, mouy1 : int)
if moux1 > 18 and moux1 < 102 and mouy1 > 18 and mouy1 < 102 then
x1 := 60
y1 := 60
elsif moux1 > 128 and moux1 < 212 and mouy1 > 18 and mouy1 < 102 then
x1 := 170
y1 := 60
elsif moux1 > 238 and moux1 < 322 and mouy1 > 18 and mouy1 < 102 then
x1 := 280
y1 := 60
elsif moux1 > 18 and moux1 < 102 and mouy1 > 128 and mouy1 < 212 then
x1 := 60
y1 := 170
elsif moux1 > 128 and moux1 < 212 and mouy1 > 128 and mouy1 < 212 then
x1 := 170
y1 := 170
elsif moux1 > 238 and moux1 < 322 and mouy1 > 128 and mouy1 < 212 then
x1 := 280
y1 := 170
elsif moux1 > 18 and moux1 < 102 and mouy1 > 238 and mouy1 < 322 then
x1 := 60
y1 := 280
elsif moux1 > 128 and moux1 < 212 and mouy1 > 238 and mouy1 < 322 then
x1 := 170
y1 := 280
elsif moux1 > 238 and moux1 < 322 and mouy1 > 238 and mouy1 < 322 then
x1 := 280
y1 := 280
end if
drawfilloval (x1, y1, 40, 40, 0)
play (sound1)
score := score + 100
locate (1, (maxcol div 2) - 1)
put score
end manerasemole
process autoerasemole
delay (500)
for count : 1 .. duration2
randint (molenum2, 1, 9)
if molenum2 = 1 then
x2 := 60
y2 := 60
elsif molenum2 = 2 then
x2 := 170
y2 := 60
elsif molenum2 = 3 then
x2 := 280
y2 := 60
elsif molenum2 = 4 then
x2 := 60
y2 := 170
elsif molenum2 = 5 then
x2 := 170
y2 := 170
elsif molenum2 = 6 then
x2 := 280
y2 := 170
elsif molenum = 7 then
x2 := 60
y2 := 280
elsif molenum2 = 8 then
x2 := 170
y2 := 280
elsif molenum2 = 9 then
x2 := 280
y2 := 280
end if
drawfilloval (x2, y2, 40, 40, 0)
delay (delay1 * 2)
end for
end autoerasemole
procedure checkhighscore
for decreasing i : 10 .. 1
if score > hiscore (i) then
scorerank := i
end if
end for
end checkhighscore
procedure changescorelist
loop
count := count - 1
exit when scorerank = count
hiscore (count) := hiscore (count - 1)
end loop
hiscore (count) := score
count := 11
loop
count := count - 1
exit when scorerank = count
hiscorer (count) := hiscorer (count - 1)
end loop
hiscorer (count) := name
end changescorelist
locate (1, 1)
put " "
locate (1, 1)
put name
locate (1, maxcol div 2)
put "0"
locate (1, timeposition)
put "30"
countdown
fork timer
fork drawmole
fork autoerasemole
loop
if buttonmoved ("down") then
buttonwait ("down", moux, mouy, btnnum, btnupdn)
if whatdotcolour (moux, mouy) = 4 or whatdotcolour (moux, mouy) = 2
then
fork manerasemole (moux, mouy)
end if
end if
exit when gameover = 1
end loop
delay (500)
open : streamNumber, filename, get
if streamNumber > 0 then
for i1 : 1 .. 10
get : streamNumber, hiscore (i1)
end for
for i2 : 1 .. 10
get : streamNumber, hiscorer (i2) : *
end for
close : streamNumber
else
for i3 : 1 .. 10
hiscore (1) := 10000
hiscore (2) := 9000
hiscore (3) := 8000
hiscore (4) := 7000
hiscore (5) := 6000
hiscore (6) := 5000
hiscore (7) := 4000
hiscore (8) := 3000
hiscore (9) := 2000
hiscore (10) := 1000
end for
for i4 : 1 .. 10
hiscorer (i4) := "Matt Guttman"
end for
end if
checkhighscore
if scorerank < 11 then
scorerankword := intstr (scorerank)
newhigh := "NEW HIGH SCORE #" + scorerankword + "!"
changescorelist
end if
cls
locate (1, (maxcol div 2) - 4)
put "GAME OVER"
put skip
put "Your score: ", score, " ", newhigh
locate (6, (maxcol div 2) - 5)
put "HIGH SCORES"
put skip
for i5 : 1 .. 10
put hiscorer (i5) : 20, hiscore (i5)
end for
open : streamNumber, filename, put
assert streamNumber > 0
for i6 : 1 .. 10
put : streamNumber, hiscore (i6)
end for
for i7 : 1 .. 10
put : streamNumber, hiscorer (i7)
end for
close : streamNumber
put skip
put "Press any key to exit"
getch (endprog)
|