This is Version 1.2, July 12, 2006.
'\ITECH\GAMES\BUNGEE\BUNGEE
' Bungee! Version 1.2
' (C) 2006 i-TECH and Kristopher Windsor
DECLARE FUNCTION action (name$)
DECLARE SUB MouseDriver (ax AS INTEGER, bx AS INTEGER, cx AS INTEGER, dx AS INTEGER)
DECLARE FUNCTION MouseExists% ()
DECLARE SUB MouseStatus (mouseX, mouseY, leftB, rightB, middleB)
DECLARE SUB MousePosition (newX, newY)
DECLARE SUB MouseSetArea (x1, y1, x2, y2)
DECLARE SUB MouseLastPress (button, x, y)
CONST true = -1, FALSE = 0, LEFT = 0, RIGHT = 1, CENTER = 2, tc = 4, pi = 3.1415926535898#
ON KEY(31) GOSUB quickexit: KEY(31) ON: RANDOMIZE TIMER
TYPE BULLET: x AS INTEGER: y AS INTEGER: angle AS DOUBLE: dist AS INTEGER: c AS INTEGER: END TYPE
SCREEN 0: WIDTH 40, 25: CLS : pcount = 1
LOCATE 3, 6: PRINT CHR$(17) + "Bungee Jumping! Version 1.2" + CHR$(16)
'waits for user to press [Enter], [Space], or a number key
DO: LOCATE 5, 5: PRINT "Select the Number of Players:"; pcount
IF (key$ = CHR$(0) + CHR$(75) OR key$ = CHR$(0) + CHR$(80)) AND pcount > 1 THEN pcount = pcount - 1
IF (key$ = CHR$(0) + CHR$(72) OR key$ = CHR$(0) + CHR$(77)) AND pcount < 5 THEN pcount = pcount + 1
key$ = INKEY$: LOOP UNTIL (VAL(key$) > 0 AND VAL(key$) < 6) OR (key$ = CHR$(13) OR key$ = CHR$(27) OR key$ = " ")
IF VAL(key$) THEN pcount = VAL(key$)
LOCATE 5, 5: PRINT SPACE$(2) + "Enter the Players' names..." + SPACE$(2)
DIM s(1 TO pcount, 1 TO tc) AS INTEGER, n(1 TO pcount) AS STRING
FOR a = 1 TO pcount: LOCATE a * 2 + 5, 4: PRINT "Player" + STR$(a) + "'s name";
LINE INPUT ": ", n(a): n(a) = LEFT$(n(a), 12): IF n(a) = "" THEN n(a) = "Player" + STR$(a)
NEXT a
SCREEN 12: WIDTH 80, 60: turn = 1
WHILE turn <= tc
FOR tturn = 1 TO pcount
GOSUB displayscore
s(tturn, turn) = action(n(tturn))
NEXT tturn: turn = turn + 1
WEND: turn = turn - 1: GOSUB displayscore
SCREEN 0: WIDTH 40, 25: CLS : r = 0: tp = 0
FOR a = 1 TO pcount
c = 0: FOR b = 1 TO tc: c = c + s(a, b): NEXT b
IF c > r THEN r = c: tp = a
NEXT a
IF tp > 0 THEN COLOR 25: LOCATE 11, 17 - INT(LEN(n(tp)) / 2): PRINT n(tp) + " Wins!" + STRING$(1 - LEN(n(tp)) MOD 2, "!"): SLEEP 3
COLOR 0: SYSTEM
displayscore:
DO: LOOP UNTIL INKEY$ = "": CLS
b = 0: c = 0: FOR a = 1 TO 150: d = INT(RND * 6.4 * a): e = INT(RND * 4.8 * a): LINE (b, c)-(d, e), 2: b = d: c = e: NEXT a
LOCATE 3, 3: PRINT "Bungee! Score Chart ("; : IF tturn > pcount THEN PRINT "Final Game Scores)" ELSE PRINT "Turn" + STR$(turn) + " of" + STR$(tc) + ")"
FOR a = 1 TO pcount
IF a = tturn THEN COLOR 9 ELSE COLOR 15
LOCATE 5, a * 16 - 13: PRINT n(a): c = 0
FOR b = 1 TO turn
IF b < turn OR a < tturn THEN LOCATE b * 2 + 6, a * 16 - 13: PRINT LTRIM$(STR$(s(a, b))): c = c + s(a, b)
NEXT b: IF turn > 2 OR (turn = 2 AND tturn > a) THEN LOCATE b * 2 + 6, a * 16 - 13: PRINT "-----": LOCATE b * 2 + 7, a * 16 - 13: PRINT LTRIM$(STR$(c))
NEXT a: COLOR 15: IF tturn <= pcount THEN LOCATE 58, 3: PRINT "Press any key to play..."
SLEEP: RETURN
MouseData:
DATA 55,89,E5,8B,76,06,8B,14,8B,76,08,8B,0C,8B,76,0A
DATA 8B,1C,8B,76,0C,8B,04,1E,07,CD,33,8B,76,06,89,14
DATA 8B,76,08,89,0C,8B,76,0A,89,1C,8B,76,0C,89,04,5D
DATA CA,08,00
quickexit:
SYSTEM
FUNCTION action (name$)
CALL MouseSetArea(70, 2, 300, 477): CALL MousePosition(185, 240)
CLS : FOR a = 0 TO 200 STEP 20
FOR b = 200 TO 440 STEP 40
FOR c = 160 TO 320 STEP 40
FOR d = 1 TO 3
CIRCLE (b, c), a, 2
NEXT d, c, b, a
GOSUB displayname: SLEEP 2
FOR a = 200 TO 0 STEP -20
FOR b = 200 TO 440 STEP 40
FOR c = 160 TO 320 STEP 40
IF INT(RND * 8) > 0 THEN FOR d = 1 TO 3: CIRCLE (b, c), a, 0: NEXT d: GOSUB displayname
NEXT c, b, a
FOR a = 0 TO 130 STEP .2
LINE (320 - a, 240 - a / 5)-(320 + a, 240 + a / 5), 2, BF
NEXT a
LOCATE 30, 29: PRINT " Bungee! Loading... ": DO: LOOP UNTIL INKEY$ = "": LOCATE 58, 3: PRINT "Press [Space] for instructions."
SLEEP 1: key$ = INKEY$
IF key$ = " " THEN
CLS : LOCATE 3, 3: PRINT "Bungee! Directions"
LOCATE 5, 3: PRINT "Move the mouse horizontally to move the bungee jumper,"
LOCATE 7, 5: PRINT "and hold the mouse buttons down to spin him."
LOCATE 9, 3: PRINT "Hit the balloons (1 point), but don't hit hitting the jumper's head"
LOCATE 11, 5: PRINT "on the crane's load after his hat breaks."
LOCATE 13, 3: PRINT "Shoot the tennis balls (5 points) as they fly across the sky,"
LOCATE 15, 5: PRINT "and shoot the suicidal squirrels (2 points) before they fall off the crane"
LOCATE 17, 5: PRINT "and attack you. But be warned! Your guns only work half of the time! " + CHR$(1)
LOCATE 58, 3: PRINT "Press any key to play...": SLEEP
END IF: LINE (0, 0)-(639, 479), 9, BF
GOSUB displaycrane: GOSUB displaytext
angle = 5 * pi / 8
CONST av = .02
CONST bsize = 40
bx = bsize + 20
bxv = 1
by = bsize + 80
CONST ecount = 8, eq = 12, espeed = 8
framecount = 0
gcount = 64
gx = 20
hat = -1
invince = 0
lives = 5
CONST pcount = 8, psize = 16
px = 185
score = 0
sdrop = 300
sv = 0
CONST scount = 6
CONST tcount = 3, tsize = 4
whiche = 0
wind = 0
x = 185
DIM e(1 TO ecount) AS BULLET, g(1 TO gcount) AS BULLET, p(1 TO pcount, 1 TO 4) AS INTEGER
DIM pic(10000) AS INTEGER, s(1 TO scount, 1 TO 3) AS INTEGER, t(1 TO tcount, 1 TO 3) AS SINGLE
WHILE lives > 0 AND key$ <> CHR$(27)
IF framecount MOD 40 = 0 THEN GOSUB displaytext
IF framecount MOD 1000 = 0 THEN sv = sv + 1
GOSUB mrbungee
GOSUB points
GOSUB tennis
GOSUB enemy
GOSUB bullets
GOSUB particles
GOSUB displaycrane
IF framecount MOD 500 = 0 THEN wind = INT(RND * 3)
px = x: py = y: plb = lb: prb = rb: MouseStatus x, y, lb, rb, 0
key$ = INKEY$: IF key$ = CHR$(13) THEN LOCATE 1, 72: PRINT framecount: SLEEP
framecount = framecount + 1: WEND
SLEEP 2: action = score
EXIT FUNCTION
attack:
picx = bx - bsize * 1.5: IF picx < 0 THEN picx = 0
picy = by - bsize * 1.5: IF picy + bsize * 3 > 479 THEN picy = 479 - bsize * 3
GET (picx, picy)-(picx + bsize * 3, picy + bsize * 3), pic
FOR b = 1 TO 500
c = RND * pi * 2: sx = bx + RND * COS(c) * bsize: sy = by + RND * SIN(c) * bsize
SELECT CASE INT(RND * 4) + 1
CASE 1
CIRCLE (sx + 4, sy - 5), 4, 6
PSET (sx + 3, sy - 6), 15
CIRCLE (sx, sy), 6, 6, , , 1 / 3
CIRCLE (sx, sy + 10), 6, 6, , , 1 / 3
CIRCLE (sx + 4, sy + 5), 6, 6, , , 3
CASE 2
CIRCLE (sx - 5, sy - 4), 4, 6
PSET (sx - 6, sy - 3), 15
CIRCLE (sx, sy), 6, 6, , , 3
CIRCLE (sx + 10, sy), 6, 6, , , 3
CIRCLE (sx + 5, sy - 4), 6, 6, , , 1 / 3
CASE 3
CIRCLE (sx - 4, sy + 5), 4, 6
PSET (sx - 3, sy + 6), 15
CIRCLE (sx, sy), 6, 6, , , 1 / 3
CIRCLE (sx, sy - 10), 6, 6, , , 1 / 3
CIRCLE (sx - 4, sy - 5), 6, 6, , , 3
CASE 4
CIRCLE (sx + 5, sy + 4), 4, 6
PSET (sx + 6, sy + 3), 15
CIRCLE (sx, sy), 6, 6, , , 3
CIRCLE (sx - 10, sy), 6, 6, , , 3
CIRCLE (sx - 5, sy + 4), 6, 6, , , 1 / 3
END SELECT
FOR c = 1 TO 50000 / b: NEXT c, b
lives = lives - 1: GOSUB displaytext: s(a, 3) = 0
PUT (picx, picy), pic, PSET: invince = framecount
RETURN
bullets:
IF framecount MOD 5 = 0 AND framecount MOD 2000 < 1000 THEN
a = INT(RND * gcount) + 1: IF g(a).x = 0 THEN g(a).x = bx: g(a).y = by: g(a).angle = angle + 13 * pi / 32: g(a).dist = bsize
a = INT(RND * gcount) + 1: IF g(a).x = 0 THEN g(a).x = bx: g(a).y = by: g(a).angle = angle - 13 * pi / 32: g(a).dist = bsize
END IF
FOR a = 1 TO gcount
IF g(a).x > 0 THEN
LINE (g(a).x + COS(g(a).angle) * g(a).dist, g(a).y + SIN(g(a).angle) * g(a).dist)-(g(a).x + COS(g(a).angle) * (g(a).dist - 8), g(a).y + SIN(g(a).angle) * (g(a).dist - 8)), 9
g(a).dist = g(a).dist + 8
IF g(a).dist > 600 THEN g(a).x = 0 ELSE LINE (g(a).x + COS(g(a).angle) * g(a).dist, g(a).y + SIN(g(a).angle) * g(a).dist)-(g(a).x + COS(g(a).angle) * (g(a).dist - 8), g(a).y + SIN(g(a).angle) * (g(a).dist - 8)), 0
END IF
NEXT a
RETURN
displaycrane:
GOSUB displaycraneh: GOSUB displaycranev
LINE (600, 20)-(620, 40), 14: LINE (620, 20)-(600, 40), 14
RETURN
displaycraneh:
LINE (20, 20)-(620, 20), 14
LINE (600, 40)-(20, 40), 14
LINE (20, 40)-(20, 20), 14
FOR z = 20 TO 580 STEP 20: LINE (z, 20)-(z + 20, 40), 14: LINE (z + 20, 20)-(z, 40), 14: NEXT z
RETURN
displaycranev:
LINE (620, 20)-(620, 479), 14
LINE (620, 479)-(600, 479), 14
LINE (600, 479)-(600, 40), 14
FOR z = 40 TO 460 STEP 20: LINE (600, z)-(620, z + 20), 14: LINE (600, z + 20)-(620, z), 14: NEXT z
RETURN
displayname:
COLOR 15: LOCATE 30, 35 - INT(LEN(name$) / 2): PRINT name$ + "'s Turn..."
RETURN
displaytext:
LOCATE 1, 4: PRINT "<< " + name$ + " >> Score:" + STR$(score) + " | Health:" + STR$(lives * 20) + " Percent" + SPACE$(2)
RETURN
enemy:
IF framecount MOD 25 = 0 THEN a = INT(RND * scount) + 1: IF s(a, 3) = 0 THEN s(a, 1) = 496: s(a, 3) = 1
FOR a = 1 TO scount
SELECT CASE s(a, 3)
CASE 1
CIRCLE (631, s(a, 1) - 5), 4, 9
PSET (630, s(a, 1) - 6), 9
CIRCLE (627, s(a, 1)), 6, 9, , , 1 / 3
CIRCLE (627, s(a, 1) + 10), 6, 9, , , 1 / 3
CIRCLE (631, s(a, 1) + 5), 6, 9, , , 3
s(a, 1) = s(a, 1) - 2
FOR b = 1 TO gcount
IF g(b).x > 0 THEN
gx = g(b).x + COS(g(b).angle) * g(b).dist: gy = g(b).y + SIN(g(b).angle) * g(b).dist
IF SQR((627 - gx) * (627 - gx) + (s(a, 1) - gy) * (s(a, 1) - gy)) < 15 THEN s(a, 3) = 0: score = score + 2: ex = 627: ey = s(a, 1): dist = 8: w = 6: GOSUB newparticle
END IF
NEXT b
IF s(a, 3) = 1 THEN
IF s(a, 1) = 10 THEN
s(a, 3) = 2: s(a, 1) = 610
ELSE
CIRCLE (631, s(a, 1) - 5), 4, 6
PSET (630, s(a, 1) - 6), 15
CIRCLE (627, s(a, 1)), 6, 6, , , 1 / 3
CIRCLE (627, s(a, 1) + 10), 6, 6, , , 1 / 3
CIRCLE (631, s(a, 1) + 5), 6, 6, , , 3
END IF
END IF
CASE 2
CIRCLE (s(a, 1) - 5, 9), 4, 9
PSET (s(a, 1) - 6, 10), 9
CIRCLE (s(a, 1), 13), 6, 9, , , 3
CIRCLE (s(a, 1) + 10, 13), 6, 9, , , 3
CIRCLE (s(a, 1) + 5, 9), 6, 9, , , 1 / 3
s(a, 1) = s(a, 1) - 2
FOR b = 1 TO gcount
IF g(b).x > 0 THEN
gx = g(b).x + COS(g(b).angle) * g(b).dist: gy = g(b).y + SIN(g(b).angle) * g(b).dist
IF SQR((s(a, 1) - gx) * (s(a, 1) - gx) + (9 - gy) * (9 - gy)) < 15 THEN s(a, 3) = 0: score = score + 2: ex = s(a, 1): ey = 6: dist = 8: w = 6: GOSUB newparticle
END IF
NEXT b
IF s(a, 3) = 2 THEN
IF s(a, 1) < sdrop THEN
s(a, 1) = sdrop: s(a, 2) = 16: s(a, 3) = 3: sdrop = INT(RND * 400) + 30
ELSE
CIRCLE (s(a, 1) - 5, 9), 4, 6
PSET (s(a, 1) - 6, 10), 15
CIRCLE (s(a, 1), 13), 6, 6, , , 3
CIRCLE (s(a, 1) + 10, 13), 6, 6, , , 3
CIRCLE (s(a, 1) + 5, 9), 6, 6, , , 1 / 3
END IF
END IF
CASE 3
CIRCLE (s(a, 1) - 4, s(a, 2) + 5), 4, 9
PSET (s(a, 1) - 3, s(a, 2) + 6), 9
CIRCLE (s(a, 1), s(a, 2)), 6, 9, , , 1 / 3
CIRCLE (s(a, 1), s(a, 2) - 10), 6, 9, , , 1 / 3
CIRCLE (s(a, 1) - 4, s(a, 2) - 5), 6, 9, , , 3
s(a, 1) = s(a, 1) - wind: s(a, 2) = s(a, 2) + sv
FOR b = 1 TO gcount
IF g(b).x > 0 THEN
gx = g(b).x + COS(g(b).angle) * g(b).dist: gy = g(b).y + SIN(g(b).angle) * g(b).dist
IF SQR((s(a, 1) - gx) * (s(a, 1) - gx) + (s(a, 2) - gy) * (s(a, 2) - gy)) < 12 THEN s(a, 3) = 0: score = score + 2: ex = s(a, 1): ey = s(a, 2): dist = 8: w = 6: GOSUB newparticle
END IF
NEXT b
IF s(a, 3) = 3 THEN
IF SQR((bx - s(a, 1)) * (bx - s(a, 1)) + (by - s(a, 2)) * (by - s(a, 2))) < bsize + 8 AND framecount - invince > 60 THEN
GOSUB attack
ELSE
IF s(a, 1) < -4 OR s(a, 2) > 491 THEN
s(a, 3) = 0
ELSE
CIRCLE (s(a, 1) - 4, s(a, 2) + 5), 4, 6
PSET (s(a, 1) - 3, s(a, 2) + 6), 15
CIRCLE (s(a, 1), s(a, 2)), 6, 6, , , 1 / 3
CIRCLE (s(a, 1), s(a, 2) - 10), 6, 6, , , 1 / 3
CIRCLE (s(a, 1) - 4, s(a, 2) - 5), 6, 6, , , 3
END IF
END IF
END IF
END SELECT
NEXT a
RETURN
hithead:
lives = 0: GOSUB displaytext
FOR a = 0 TO 15 STEP 2: FOR b = 0 TO pi STEP .05
PSET (bx + COS(angle) * bsize * .8 + COS(b) * a, by + SIN(angle) * bsize * .8 - 7 * bsize / 20 + SIN(b) * a + a / 5), 4
NEXT b: FOR b = 1 TO 500: NEXT b, a: RETURN
mrbungee:
IF x <> px THEN LINE (px - 50, 41)-(px + 50, 49), 9, BF
LINE (x - 50, 41)-(x + 50, 49), 6, BF
oangle = angle: obx = bx: oby = by
angle = angle - av * (NOT (lb XOR rb)) + lb / 8 - rb / 8
IF (x > bx AND bxv > 0) OR (x < bx AND bxv < 0) THEN a = .6 ELSE a = 1
IF x > bx THEN bxv = bxv + a ELSE bxv = bxv - a
bx = bx + bxv: by = SIN(framecount / 10) * 160 + 250
LINE (px, 50)-(obx, oby), 9
CIRCLE (obx + COS(oangle) * bsize * .8, oby + SIN(oangle) * bsize * .8), 7 * bsize / 20, 9
LINE (obx, oby)-(obx + COS(oangle) * bsize * .45, oby + SIN(oangle) * bsize * .45), 9
LINE (obx + COS(oangle + 13 * pi / 32) * bsize * .8, oby + SIN(oangle + 13 * pi / 32) * bsize * .8)-(obx + COS(oangle - 13 * pi / 32) * bsize * .8, oby + SIN(oangle - 13 * pi / 32) * bsize * .8), 9
LINE (obx, oby)-(obx + COS(oangle + 13 * pi / 16) * bsize, oby + SIN(oangle + 13 * pi / 16) * bsize), 9
LINE (obx, oby)-(obx + COS(oangle - 13 * pi / 16) * bsize, oby + SIN(oangle - 13 * pi / 16) * bsize), 9
IF hat THEN
LINE (obx + COS(oangle + 5 * pi / 32) * bsize * .9, oby + SIN(oangle + 5 * pi / 32) * bsize * .9)-(obx + COS(oangle - 5 * pi / 32) * bsize * .9, oby + SIN(oangle - 5 * pi / 32) * bsize * .9), 9
LINE (obx + COS(oangle + 5 * pi / 32) * bsize * .9, oby + SIN(oangle + 5 * pi / 32) * bsize * .9)-(obx + COS(oangle) * bsize * 1.3, oby + SIN(oangle) * bsize * 1.3), 9
LINE (obx + COS(oangle - 5 * pi / 32) * bsize * .9, oby + SIN(oangle - 5 * pi / 32) * bsize * .9)-(obx + COS(oangle) * bsize * 1.3, oby + SIN(oangle) * bsize * 1.3), 9
IF score > 19 OR framecount > 500 THEN
ex = bx + COS(angle) * bsize * .9: ey = by + SIN(angle) * bsize * .9: dist = 8: w = 14: GOSUB newparticle: hat = 0
ELSE
LINE (bx + COS(angle + 5 * pi / 32) * bsize * .9, by + SIN(angle + 5 * pi / 32) * bsize * .9)-(bx + COS(angle - 5 * pi / 32) * bsize * .9, by + SIN(angle - 5 * pi / 32) * bsize * .9), 14
LINE (bx + COS(angle + 5 * pi / 32) * bsize * .9, by + SIN(angle + 5 * pi / 32) * bsize * .9)-(bx + COS(angle) * bsize * 1.3, by + SIN(angle) * bsize * 1.3), 14
LINE (bx + COS(angle - 5 * pi / 32) * bsize * .9, by + SIN(angle - 5 * pi / 32) * bsize * .9)-(bx + COS(angle) * bsize * 1.3, by + SIN(angle) * bsize * 1.3), 14
END IF
END IF
LINE (x, 50)-(bx, by), 8
CIRCLE (bx + COS(angle) * bsize * .8, by + SIN(angle) * bsize * .8), 7 * bsize / 20, 15
LINE (bx, by)-(bx + COS(angle) * bsize * .45, by + SIN(angle) * bsize * .45), 15
LINE (bx + COS(angle + 13 * pi / 32) * bsize * .8, by + SIN(angle + 13 * pi / 32) * bsize * .8)-(bx + COS(angle - 13 * pi / 32) * bsize * .8, by + SIN(angle - 13 * pi / 32) * bsize * .8), 15
LINE (bx, by)-(bx + COS(angle + 13 * pi / 16) * bsize, by + SIN(angle + 13 * pi / 16) * bsize), 15
LINE (bx, by)-(bx + COS(angle - 13 * pi / 16) * bsize, by + SIN(angle - 13 * pi / 16) * bsize), 15
IF bx + COS(angle) * bsize * .8 > x - 50 AND bx + COS(angle) * bsize * .8 < x + 50 AND by + SIN(angle) * bsize * .8 - 7 * bsize / 20 < 50 AND NOT hat THEN GOSUB hithead
RETURN
newparticle:
whiche = whiche + 1: IF whiche > ecount THEN whiche = 1
FOR np = 0 TO 2 * pi STEP 2 * pi / eq
IF e(whiche).x > 0 THEN CIRCLE (e(whiche).x + COS(np) * e(whiche).dist, e(whiche).y + SIN(np) * e(whiche).dist), 2, 9
NEXT np
e(whiche).x = ex: e(whiche).y = ey: e(whiche).dist = dist: e(whiche).c = w
RETURN
particles:
FOR a = 1 TO ecount
IF e(a).x > 0 THEN
FOR b = 0 TO 2 * pi STEP 2 * pi / eq
CIRCLE (e(a).x + COS(b) * e(a).dist, e(a).y + SIN(b) * e(a).dist), 2, 9
CIRCLE (e(a).x + COS(b) * (e(a).dist + espeed), e(a).y + SIN(b) * (e(a).dist + espeed)), 2, e(a).c
NEXT b
e(a).dist = e(a).dist + espeed
END IF
NEXT a
RETURN
points:
a = INT(RND * pcount + 1): IF p(a, 3) = 0 THEN p(a, 1) = INT(RND * 560): p(a, 2) = 479 + psize: p(a, 3) = INT(RND * 6) + 10: p(a, 4) = INT(RND * 290) + 120
FOR a = 1 TO pcount
IF p(a, 3) > 0 THEN
IF SQR((bx - p(a, 1)) * (bx - p(a, 1)) + (by - p(a, 2)) * (by - p(a, 2))) < bsize + psize THEN
CIRCLE (p(a, 1), p(a, 2)), psize, 9, , , 1.3
CIRCLE (p(a, 1), p(a, 2) + psize + 1), 2, 9
LINE (p(a, 1), p(a, 2) + psize + 3)-(p(a, 1), 479), 9
ex = p(a, 1): ey = p(a, 2): dist = psize: w = p(a, 3): GOSUB newparticle
score = score + 1: GOSUB displaytext: p(a, 3) = 0
ELSE
IF p(a, 2) > p(a, 4) THEN CIRCLE (p(a, 1), p(a, 2)), psize, 9, , , 1.3: CIRCLE (p(a, 1), p(a, 2) + psize + 1), 2, 9: p(a, 2) = p(a, 2) - 3
CIRCLE (p(a, 1), p(a, 2)), psize, p(a, 3), , , 1.3
CIRCLE (p(a, 1), p(a, 2) + psize + 1), 2, p(a, 3)
LINE (p(a, 1), p(a, 2) + psize + 3)-(p(a, 1), 479), p(a, 3)
END IF
END IF: NEXT a: RETURN
tennis:
IF framecount MOD 60 = 0 THEN a = INT(RND * tcount) + 1: IF t(a, 1) = 0 THEN t(a, 1) = 639 + tsize: t(a, 2) = 140: t(a, 3) = -3
FOR a = 1 TO tcount
IF t(a, 1) THEN
FOR b = 2 TO tsize: CIRCLE (t(a, 1), t(a, 2)), b, 9: NEXT b
t(a, 1) = t(a, 1) - 6: t(a, 2) = t(a, 2) + t(a, 3): t(a, 3) = t(a, 3) + .05
c = 0: FOR b = 1 TO gcount
IF g(b).x > 0 THEN
gx = g(b).x + COS(g(b).angle) * g(b).dist: gy = g(b).y + SIN(g(b).angle) * g(b).dist
IF SQR((gx - t(a, 1)) * (gx - t(a, 1)) + (gy - t(a, 2)) * (gy - t(a, 2))) < 8 THEN c = -1: score = score + 5: GOSUB displaytext: ex = t(a, 1): ey = t(a, 2): dist = tsize: w = 10: GOSUB newparticle
END IF
NEXT b
IF t(a, 1) < tsize OR c THEN t(a, 1) = 0 ELSE FOR b = 2 TO tsize: CIRCLE (t(a, 1), t(a, 2)), b, 10: NEXT b
END IF
NEXT a
RETURN
END FUNCTION
SUB MouseDriver (ax AS INTEGER, bx AS INTEGER, cx AS INTEGER, dx AS INTEGER)
STATIC called AS INTEGER, mouseDrv AS STRING
DIM mCount AS INTEGER, mData AS STRING
IF NOT called THEN
called = true
RESTORE MouseData
FOR mCount = 1 TO 51
READ mData
mouseDrv = mouseDrv + CHR$(VAL("&H" + mData))
NEXT mCount
IF NOT MouseExists THEN PRINT "No Mouse Driver": END
END IF
DEF SEG = VARSEG(mouseDrv)
CALL ABSOLUTE(ax, bx, cx, dx, SADD(mouseDrv))
DEF SEG
END SUB
FUNCTION MouseExists%
DIM ax AS INTEGER
ax = 0
MouseDriver ax, 0, 0, 0
MouseExists% = ax
END FUNCTION
SUB MouseLastPress (button, x, y)
DIM bx AS INTEGER, cx AS INTEGER, dx AS INTEGER
IF button <> LEFT AND button <> RIGHT AND button <> MIDDLE THEN x = -1: y = -1: EXIT SUB
bx = button
MouseDriver 5, bx, cx, dx
IF bx = 0 THEN x = -1: y = -1 ELSE x = cx: y = dx
END SUB
SUB MousePosition (newX, newY)
DIM cx AS INTEGER, dx AS INTEGER
cx = newX
dx = newY
MouseDriver 4, 0, cx, dx
END SUB
SUB MouseSetArea (x1, y1, x2, y2)
DIM cx AS INTEGER, dx AS INTEGER
cx = x1
dx = x2
MouseDriver 7, 0, cx, dx
cx = y1
dx = y2
MouseDriver 8, 0, cx, dx
END SUB
SUB MouseStatus (mouseX, mouseY, leftB, rightB, middleB)
DIM bx AS INTEGER, cx AS INTEGER, dx AS INTEGER
MouseDriver 3, bx, cx, dx
IF (bx AND 1) THEN leftB = true ELSE leftB = FALSE
IF (bx AND 2) THEN rightB = true ELSE rightB = FALSE
IF (bx AND 4) THEN middleB = true ELSE middleB = FALSE
mouseX = cx
mouseY = dx
END SUB
(C) 2006 i-TECH |