View.Set ("graphics:offscreenonly")
setscreen ("graphics:vga")
setscreen ("nocursor")
setscreen ("noechoe")
%%%%%%%%%%Variables for Pacman%%%%%%%%%%
const pacWid : int := 12
var pacX, pacY, pacXchange, pacYchange, pacMth, pacMth1, mthCls, mthChange :
int
pacX := 100
pacY := 100
pacXchange := 0
pacYchange := 0
pacMth := 0
pacMth1 := 360
mthCls := 0
mthChange := 0
var reply : string (1)
var kill : boolean := false
const bgclr : int := 7
%%%%%%%%%%Screen Procedures%%%%%%%%%%
procedure background
drawfillbox (maxx div 2 - 5, maxy - 50, maxx div 2 + 5, maxy - 100, 1)
drawfillbox (0, maxy - 50, maxx, maxy - 55, 1)
drawfillbox (0, maxy - 55, 5, maxy - 150, 1)
drawfillbox (maxx, maxy - 55, maxx - 5, maxy - 150, 1)
drawfillbox (0, maxy - 150, 145, maxy - 155, 1)
drawfillbox (maxx, maxy - 150, maxx - 145, maxy - 155, 1)
drawfillbox (140, maxy - 155, 145, maxy - 200, 1)
drawfillbox (maxx - 140, maxy - 155, maxx - 145, maxy - 200, 1)
drawfillbox (0, maxy - 200, 145, maxy - 205, 1)
drawfillbox (maxx - 145, maxy - 200, maxx, maxy - 205, 1)
drawfillbox (0, maxy - 235, 145, maxy - 240, 1)
drawfillbox (maxx, maxy - 235, maxx - 145, maxy - 240, 1)
drawfillbox (0, 19, maxx, 14, 1)
drawfillbox (0, 19, 5, 114, 1)
drawfillbox (maxx, 19, maxx - 5, 114, 1)
drawfillbox (0, 109, 145, 114, 1)
drawfillbox (maxx, 114, maxx - 145, 109, 1)
drawfillbox (140, 109, 145, 159, 1)
drawfillbox (maxx - 140, 109, maxx - 145, 159, 1)
drawfillbox (0, 159, 145, 164, 1)
drawfillbox (maxx - 145, 400, maxx, 405, 1)
drawbox (35, maxy - 85, 145, maxy - 120, 1)
drawbox (maxx - 45, maxy - 85, maxx - 145, maxy - 120, 1)
drawbox (180, maxy - 85, maxx div 2 - 40, maxy - 120, 1)
drawbox (maxx - 180, maxy - 85, maxx div 2 + 40, maxy - 120, 1)
drawbox (180, maxy - 150, 195, maxy - 205, 1)
drawbox (maxx - 180, maxy - 150, maxx - 195, maxy - 205, 1)
drawbox (230, maxy - 150, maxx - 230, maxy - 160, 1)
drawbox (195, maxy - 190, 245, maxy - 205, 1)
drawbox (maxx - 195, maxy - 190, maxx - 245, maxy - 205, 1)
drawbox (280, maxy - 160, maxx - 280, maxy - 205, 1)
drawbox (230, maxy - 235, maxx - 230, maxy - 290, 1)
drawbox (240, maxy - 245, maxx - 240, maxy - 280, 1)
drawbox (180, maxy - 235, 195, maxy - 290, 1)
drawbox (maxx - 180, maxy - 235, maxx - 195, maxy - 290, 1)
drawbox (180, maxy - 320, 245, 49, 1)
drawbox (maxx - 180, maxy - 320, maxx - 245, 49, 1)
drawbox (280, maxy - 320, maxx - 280, 49, 1)
drawbox (40, maxy - 320, 145, 49, 1)
drawbox (maxx - 40, maxy - 320, maxx - 145, 49, 1)
drawline (195, maxy - 191, 195, maxy - 204, 7)
drawline (maxx - 195, maxy - 191, maxx - 195, maxy - 204, 7)
drawline (maxx div 2 - 38, maxy - 160, maxx div 2 + 39, maxy - 160, 7)
end background
%%%%%%%%%%Procedures%%%%%%%%%%
procedure pacRgt (pacX : int, pacY : int)
pacMth := 30
pacMth1 := 330
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth1, pacMth, bgclr)
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth - mthCls, pacMth1 + mthCls, 14)
end pacRgt
procedure pacUp (pacX : int, pacY : int)
pacMth := 120
pacMth1 := 60
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth1, pacMth, bgclr)
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth - mthCls, pacMth1 + mthCls, 14)
end pacUp
procedure pacDown (pacX : int, pacY : int)
pacMth := 300
pacMth1 := 240
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth1, pacMth, bgclr)
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth - mthCls, pacMth1 + mthCls, 14)
end pacDown
procedure pacLeft (pacX : int, pacY : int)
pacMth := 210
pacMth1 := 150
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth1, pacMth, bgclr)
drawfillarc (pacX + pacXchange, pacY + pacYchange, pacWid, pacWid,
pacMth - mthCls, pacMth1 + mthCls, 14)
end pacLeft
procedure clrPac (pacX : int, pacY : int)
drawfilloval (pacX + pacXchange, pacY + pacYchange, pacWid + 1, pacWid +
1, 7)
end clrPac
procedure hit (pacX, pacY : int)
if whatdotcolor (pacX, pacY) = 1 then
kill := true
else
kill := false
end if
end hit
%%%%%%%%%%Program%%%%%%%%%%
colourback (black)
cls
pacRgt (pacX, pacY)
background
colourback (black)
getch (reply)
mthChange := 2
loop
if hasch then
getch (reply)
else
reply := reply
end if
if reply = chr (200) then
hit (pacX, pacY + 13)
clrPac (pacX, pacY)
pacYchange := pacYchange + 1
pacUp (pacX, pacY)
elsif reply = chr (208) then
hit (pacX, pacY-13)
clrPac (pacX, pacY)
pacYchange := pacYchange - 1
pacDown (pacX, pacY )
elsif reply = chr (205) then
hit (pacX + 13, pacY)
clrPac (pacX, pacY)
pacXchange := pacXchange + 1
pacRgt (pacX, pacY)
elsif reply = chr (203) then
hit (pacX - 13, pacY)
clrPac (pacX, pacY)
pacXchange := pacXchange - 1
pacLeft (pacX, pacY)
end if
delay (10)
mthCls := mthCls + mthChange
if mthCls = 30 or mthCls = -6 then
mthChange *= -1
end if
View.Update
exit when kill = true
end loop
|