'===========================================================================
' Subject: WHACK A MOLE                       Date: 05-04-96 (12:00)       
'  Author: Michael Stein                      Code: QB, QBasic, PDS        
'  Origin: www.nerc.com/~dstein/bas/        Packet: GAMES.ABC
'===========================================================================
CLS
        arrowup$ = CHR$(0) + "H"
                 arrowdown$ = CHR$(0) + "P"
           arrowleft$ = CHR$(0) + "K"
    arrowright$ = CHR$(0) + "M"
    ham = 1
    mole = 5
    RANDOMIZE TIMER
    mole = INT(RND * 5) + 1
    SCREEN 12
    zz = 0
    speed = 1000
    x = 0
    hits = 0
    miss = 0
a:
 PAINT (1, 1), 2, 5
CIRCLE (150, 100), 50
CIRCLE (300, 100), 50
CIRCLE (450, 100), 50
CIRCLE (225, 300), 50
CIRCLE (375, 300), 50
FOR a = 150 TO 450 STEP 150
PAINT (a, 100), 12, 15
NEXT a
FOR a = 225 TO 375 STEP 150
PAINT (a, 300), 12, 15
NEXT a
'mole
a = 150
b = 100
IF mole = 2 THEN LET a = a + 150
IF mole = 3 THEN LET a = a + 300
IF mole = 4 THEN
LET b = b + 200
LET a = a + 75
ELSEIF mole = 5 THEN
LET b = b + 200
LET a = a + 225
END IF
SCREEN 12
CIRCLE (a, (b - 5)), 30, 13
PAINT (a, (b - 5)), 13, 13
CIRCLE ((a - 10), (b - 10)), 5, 0
CIRCLE ((a + 10), (b - 10)), 5, 0
PAINT ((a - 10), (b - 10)), 0, 0
PAINT ((a + 10), (b - 10)), 0, 0
CIRCLE (a, b), 3, 0
LINE (a, (b + 10))-((a - 20), (b - 5)), 0
LINE (a, (b + 10))-((a + 20), (b - 5)), 0
'endmole
LET a = 0
LET b = 0
IF ham = 2 THEN LET a = a + 150
IF ham = 3 THEN LET a = a + 300
IF ham = 4 OR ham = 5 THEN
LET a = a + 75
LET b = b + 200
END IF
IF ham = 5 THEN LET a = a + 150
CIRCLE ((a + 150), (b + 100)), 25, 6
PAINT ((a + 150), (b + 100)), 6, 6
LINE ((a + 145), (b + 100))-((a + 150), (b + 175)), 6, B
PAINT ((a + 149), (b + 174)), 6, 6
LOCATE 1, 1
PRINT "Hits:"; num
PRINT ; "Misses:"; pp
DO
LET a$ = UCASE$(INKEY$)
PAINT ((a + 147), (b + 134)), 6, 6
LET zz = zz + 1
IF zz = speed THEN GOTO uhoh
LOOP WHILE a$ = ""
LET pee = ham
IF a$ = arrowup$ THEN
IF ham = 4 THEN LET ham = 1
IF ham = 5 THEN LET ham = 2
ELSEIF a$ = arrowdown$ THEN
IF ham = 3 THEN LET ham = 5
IF ham = 2 THEN LET ham = 4
IF ham = 1 THEN LET ham = 4
ELSEIF a$ = arrowleft$ THEN
IF ham = 5 THEN ham = 40
IF ham = 4 THEN ham = 1
IF ham = 3 THEN ham = 20
IF ham = 2 THEN ham = 1
IF ham = 20 THEN ham = 2
IF ham = 40 THEN ham = 4
ELSEIF a$ = arrowright$ THEN
IF ham = 5 THEN ham = 3
IF ham = 4 THEN ham = 5
IF ham = 2 THEN ham = 3
IF ham = 1 THEN ham = 2
END IF
IF a$ = " " THEN
IF ham <> mole THEN GOTO rty
zz = 0
num = num + 1
speed = speed - 5
RANDOMIZE TIMER
    mole = INT(RND * 5) + 1
    SOUND 500, 5
rty:
END IF
LET a = 0
LET b = 0
IF pee = 2 THEN LET a = a + 150
IF pee = 3 THEN LET a = a + 300
IF pee = 4 OR pee = 5 THEN
LET a = a + 75
LET b = b + 200
END IF
IF a$ = CHR$(27) THEN SYSTEM
IF pee = 5 THEN LET a = a + 150
CIRCLE ((a + 150), (b + 100)), 25, 0
PAINT ((a + 150), (b + 100)), 0, 0
LINE ((a + 145), (b + 100))-((a + 150), (b + 175)), 0, B
PAINT ((a + 149), (b + 174)), 0, 0
PAINT ((a + 149), (b + 174)), 2, 15
GOTO a
uhoh:
    RANDOMIZE TIMER
    mole = INT(RND * 5) + 1
   LET pp = pp + 1
   zz = 0
   IF pp = 10 THEN GOTO byebye
   GOTO a
byebye:
CLS
PRINT "Game Over!"
PRINT "You whacked"; num; "moles!!"
INPUT kj$
SYSTEM
