'=========================================================================== ' Subject: PAC-MAN CLONE (IN TEXT) Date: 06-01-96 (13:37) ' Author: John Wantland Code: QB, QBasic, PDS ' Origin: kwantlan@coffey.com Packet: GAMES.ABC '=========================================================================== REM PAC-MAN p = 0 DIM maze$(22) PRINT " Pac-Man" PRINT " By John Wantland" PRINT "O = Power Pellets" PRINT "C = Pac-Man" PRINT "G = Ghost-Monsters" PRINT "Use numeric pad to move" PRINT "Press a key to continue" 0 a$ = INKEY$: IF a$ <> "" THEN 1 GOTO 0 1 CLS maze$(1) = "лллллллллллллллллллллллллллллллл" maze$(2) = "л........лл..........лл........л" maze$(3) = "лOлллллл.лл.лллллллл.лл.ллллллOл" maze$(4) = "л..............................л" maze$(5) = "лллл.ллл.ллллл.лл.ллллл.ллл.лллл" maze$(6) = " л.ллл.ллллл.лл.ллллл.ллл.л" maze$(7) = "лллл.ллл.......лл.......ллл.лллл" maze$(8) = " .лллллл лллллллл лллллл. " maze$(9) = "лллл. .лллл" maze$(10) = " л.лллллл к-ФФФФФП лллллл.л" maze$(11) = " л.ллл Г Г ллл.л" maze$(12) = "лллл.ллл лл РФФФФФФй лл ллл.лллл" maze$(13) = " . лл лл . " maze$(14) = "лллл.ллллллллл лл ллллллллл.лллл" maze$(15) = " л........ лл .......л" maze$(16) = "лллл.лллллл.ллллллллл.ллллл.лллл" maze$(17) = "л.............. ..............л" maze$(18) = "л.ллллл.лллллл.лл.лллллл.ллллл.л" maze$(19) = "лOллллл.ллл....лл....ллл.лллллOл" maze$(20) = "л.ллллл.ллл.лллллллл.ллл.ллллл.л" maze$(21) = "л..............................л" maze$(22) = "лллллллллллллллллллллллллллллллл" WIDTH 40, 25 FOR count = 1 TO 22 FOR column = 1 TO 32 IF MID$(maze$(count), column, 1) = "." OR MID$(maze$(count), column, 1) = "O" THEN n = n + 1 NEXT column NEXT count lives = 5 points = 0 row = 17 column = 16 ghosrow = 11 ghostcolumn = 15 ghostrow2 = 11 ghostcolumn2 = 17 ghostrow3 = 11 ghostcolumn3 = 18 ghostrow4 = 11 ghostcolumn4 = 19 dots = n dop: LOCATE 1, 1 FOR count = 1 TO 22 COLOR 15, 0 PRINT maze$(count) NEXT count LOCATE 23, 1: PRINT "Lives"; lives; " Points"; points LOCATE row, column COLOR 14, 0 PRINT "C" LOCATE ghosrow, ghostcolumn COLOR 1, 0 PRINT "G" LOCATE ghostrow2, ghostcolumn2 COLOR 2, 0 PRINT "G" LOCATE ghostrow3, ghostcolumn3 COLOR 3, 0 PRINT "G" LOCATE ghostrow4, ghostcolumn4 COLOR 4, 0 PRINT "G" IF dots = 0 THEN CLS LOCATE 8, 1 PRINT "You have won!" END END IF IF ((row = ghosrow) AND (column = ghostcolumn2)) THEN lives = lives - 1: IF lives <= 0 THEN CLS : LOCATE 8, 1: PRINT "You've been eaten.": END: ELSE ghosrow = 11: ghostcolumn = 15: ghostrow2 = 11: ghostcolumn2 = 17: ghostrow3 = 11: ghostcolumn3 = 18: ghostrow4 = 11: ghostcolumn4 = 19: row = 17: _ column = 16 END IF IF ((row = ghostrow2) AND (column = ghostcolumn2)) THEN lives = lives - 1: IF lives <= 0 THEN CLS : LOCATE 8, 1: PRINT "You've been eaten.": END: ELSE ghosrow = 11: ghostcolumn = 15: ghostrow2 = 11: ghostcolumn2 = 17: row = 17: column = 16: ghostcolumn3 = 18: ghostrow4 = 11: ghostcolumn4 = 19: row = 17 _ : column = 16 END IF IF ((row = ghostrow3) AND (column = ghostcolumn3)) THEN lives = lives - 1: IF lives <= 0 THEN CLS : LOCATE 8, 1: PRINT "You've been eaten.": END: ELSE ghosrow = 11: ghostcolumn = 15: ghostrow2 = 11: ghostcolumn2 = 17: row = 17: column = 16: ghostcolumn3 = 18: ghostrow4 = 11: ghostcolumn4 = 19: row = _ 17: column = 16 END IF IF ((row = ghostrow4) AND (column = ghostcolumn4)) THEN lives = lives - 1: IF lives <= 0 THEN CLS : LOCATE 8, 1: PRINT "You've been eaten.": END: ELSE ghosrow = 11: ghostcolumn = 15: ghostrow2 = 11: ghostcolumn2 = 17: row = 17: column = 16: ghostcolumn3 = 18: ghostrow4 = 11: ghostcolumn4 = 19: row = _ 17: column = 16 END IF keyed$ = INKEY$ FOR nothing = 1 TO 100: REM change if your computer is faster NEXT nothing oldRow = row oldColumn = column REM examine the keys SELECT CASE keyed$ CASE IS = "8" row = row - 1 CASE IS = "2" row = row + 1 CASE IS = "4" column = column - 1: IF column = 0 THEN column = 31 CASE IS = "6": IF column = 32 THEN column = 2 column = column + 1 END SELECT REM examine the maze SELECT CASE MID$(maze$(row), column, 1) CASE IS = "л" row = oldRow column = oldColumn CASE IS = "-" row = oldRow column = oldColumn CASE IS = "к" row = oldRow column = oldColumn CASE IS = "Ф" row = oldRow column = oldColumn CASE IS = "Р" row = oldRow column = oldColumn CASE IS = "Г" row = oldRow column = oldColumn CASE IS = "й" row = oldRow column = oldColumn CASE IS = "П" row = oldRow column = oldColumn CASE IS = "." MID$(maze$(row), column, 1) = " " dots = dots - 1: points = points + 10 CASE IS = "O" MID$(maze$(row), column, 1) = " " dots = dots - 1: points = points + 50 GOSUB eat END SELECT : REM <ФТФ new IF RND < .1 THEN : REM Фй REM move ghost closer to PACMAN oldRow = ghosrow SELECT CASE ghosrow CASE IS < row ghosrow = ghosrow + 1 CASE IS > row ghosrow = ghosrow - 1 END SELECT IF MID$(maze$(ghosrow), ghostcolumn, 1) = "л" THEN ghosrow = oldRow IF ghosrow = oldRow THEN oldColumn = ghostcolumn SELECT CASE ghostcolumn CASE IS < column ghostcolumn = ghostcolumn + 1 CASE IS > column ghostcolumn = ghostcolumn - 1 END SELECT IF MID$(maze$(ghosrow), ghostcolumn, 1) = "л" THEN ghostcolumn = oldColumn IF ghostcolumn = 0 THEN ghostcolumn = 31 IF ghostcolumn = 32 THEN ghostcolumn = 2 END IF END IF: REM <ФФФ new : REM <ФТФ new IF RND < .1 THEN : REM Фй REM move ghost closer to PACMAN oldRow2 = ghostrow2 SELECT CASE ghostrow2 CASE IS < row ghostrow2 = ghostrow2 + 1 CASE IS > row ghostrow2 = ghostrow2 - 1 END SELECT IF MID$(maze$(ghostrow2), ghostcolumn2, 1) = "л" THEN ghostrow2 = oldRow2 IF ghostrow2 = oldRow2 THEN oldColumn2 = ghostcolumn2 SELECT CASE ghostcolumn2 CASE IS < column ghostcolumn2 = ghostcolumn2 + 1 CASE IS > column ghostcolumn2 = ghostcolumn2 - 1 END SELECT IF MID$(maze$(ghostrow2), ghostcolumn2, 1) = "л" THEN ghostcolumn2 = oldColumn2 IF ghostcolumn2 = 0 THEN ghostcolumn2 = 31 IF ghostcolumn2 = 32 THEN ghostcolumn = 2 END IF END IF: REM <ФФФ new : REM <ФТФ new IF RND < .1 THEN : REM Фй REM move ghost closer to PACMAN oldRow3 = ghostrow3 SELECT CASE ghostrow3 CASE IS < row ghostrow3 = ghostrow3 + 1 CASE IS > row ghostrow3 = ghostrow3 - 1 END SELECT IF MID$(maze$(ghostrow3), ghostcolumn3, 1) = "л" THEN ghostrow3 = oldRow3 IF ghostrow3 = oldRow3 THEN oldColumn3 = ghostcolumn3 SELECT CASE ghostcolumn3 CASE IS < column ghostcolumn3 = ghostcolumn3 + 1 CASE IS > column ghostcolumn3 = ghostcolumn3 - 1 END SELECT IF MID$(maze$(ghostrow3), ghostcolumn3, 1) = "л" THEN ghostcolumn3 = oldColumn3 IF ghostcolumn3 = 0 THEN ghostcolumn3 = 31 IF ghostcolumn3 = 33 THEN ghostcolumn3 = 2 END IF END IF: REM <ФФФ new : REM <ФТФ new IF RND < .2 THEN : REM Фй REM move ghost closer to PACMAN oldRow4 = ghostrow4 SELECT CASE ghostrow4 CASE IS < row ghostrow4 = ghostrow4 + 1 CASE IS > row ghostrow4 = ghostrow4 - 1 END SELECT IF MID$(maze$(ghostrow4), ghostcolumn4, 1) = "л" THEN ghostrow4 = oldRow4 IF ghostrow2 = oldRow2 THEN oldColumn4 = ghostcolumn4 SELECT CASE ghostcolumn4 CASE IS < column ghostcolumn4 = ghostcolumn4 + 1 CASE IS > column ghostcolumn4 = ghostcolumn4 - 1 END SELECT IF MID$(maze$(ghostrow4), ghostcolumn4, 1) = "л" THEN ghostcolumn4 = oldColumn4 IF ghostcolumn4 = 0 THEN ghostcolumn4 = 31 IF ghostcolumn4 = 32 THEN ghostcolumn4 = 2 END IF END IF: REM <ФФФ new GOTO dop eat: FOR t = 1 TO 500 LOCATE 1, 1 FOR count = 1 TO 22 COLOR 15, 0 PRINT maze$(count) NEXT count LOCATE 23, 1: PRINT "Lives"; lives; " Points"; points LOCATE row, column COLOR 14, 0 PRINT "C" LOCATE ghosrow, ghostcolumn COLOR 9, 0 PRINT "G" LOCATE ghostrow2, ghostcolumn2 COLOR 9, 0 PRINT "G" LOCATE ghostrow3, ghostcolumn3 COLOR 9, 0 PRINT "G" LOCATE ghostrow4, ghostcolumn4 COLOR 9, 0 PRINT "G" IF dots = 0 THEN CLS LOCATE 8, 1 PRINT "You have won!" END END IF IF ((row = ghosrow) AND (column = ghostcolumn)) THEN ghosrow = 11: ghostcolumn = 15 points = points + 100 END IF IF ((row = ghostrow2) AND (column = ghostcolumn2)) THEN ghostrow2 = 11: ghostcolumn2 = 17 points = points + 100 END IF IF ((row = ghostrow3) AND (column = ghostcolumn3)) THEN ghostrow3 = 11: ghostcolumn3 = 18 points = points + 100 END IF IF ((row = ghostrow4) AND (column = ghostcolumn4)) THEN ghostrow4 = 11: ghostcolumn4 = 19 points = points + 100 END IF keyed$ = INKEY$ FOR nothing = 1 TO 100: REM change if your computer is faster NEXT nothing oldRow = row oldColumn = column REM examine the keys SELECT CASE keyed$ CASE IS = "8" row = row - 1 CASE IS = "2" row = row + 1 CASE IS = "4" column = column - 1: IF column = 0 THEN column = 31 CASE IS = "6": IF column = 32 THEN column = 2 column = column + 1 END SELECT REM examine the maze SELECT CASE MID$(maze$(row), column, 1) CASE IS = "л" row = oldRow column = oldColumn CASE IS = "-" row = oldRow column = oldColumn CASE IS = "к" row = oldRow column = oldColumn CASE IS = "Ф" row = oldRow column = oldColumn CASE IS = "Р" row = oldRow column = oldColumn CASE IS = "Г" row = oldRow column = oldColumn CASE IS = "й" row = oldRow column = oldColumn CASE IS = "П" row = oldRow column = oldColumn CASE IS = "." MID$(maze$(row), column, 1) = " " dots = dots - 1: points = points + 10 CASE IS = "O" MID$(maze$(row), column, 1) = " " dots = dots - 1: points = points + 50 GOSUB eat END SELECT : REM <ФТФ new IF RND < .1 THEN : REM Фй REM move ghost closer to PACMAN oldRow = ghosrow SELECT CASE ghosrow CASE IS < row ghosrow = ghosrow - 1 CASE IS > row ghosrow = ghosrow + 1 END SELECT IF MID$(maze$(ghosrow), ghostcolumn, 1) = "л" THEN ghosrow = oldRow IF ghosrow = oldRow THEN oldColumn = ghostcolumn SELECT CASE ghostcolumn CASE IS < column ghostcolumn = ghostcolumn - 1 CASE IS > column ghostcolumn = ghostcolumn + 1 END SELECT IF MID$(maze$(ghosrow), ghostcolumn, 1) = "л" THEN ghostcolumn = oldColumn IF ghostcolumn = 0 THEN ghostcolumn = 31 IF ghostcolumn = 33 THEN ghostcolumn = 2 END IF END IF: REM <ФФФ new IF RND < .1 THEN oldRow2 = ghostrow2 SELECT CASE ghostrow2 CASE IS < row ghostrow2 = ghostrow2 - 1 CASE IS > row ghostrow2 = ghostrow2 + 1 END SELECT IF MID$(maze$(ghostrow2), ghostcolumn2, 1) = "л" THEN ghostrow2 = oldRow2 IF ghostrow2 = oldRow2 THEN oldColumn2 = ghostcolumn2 SELECT CASE ghostcolumn2 CASE IS < column ghostcolumn2 = ghostcolumn2 - 1 CASE IS > column ghostcolumn2 = ghostcolumn2 + 1 END SELECT IF MID$(maze$(ghostrow2), ghostcolumn2, 1) = "л" THEN ghostcolumn2 = oldColumn2 IF ghostcolumn2 = 0 THEN ghostcolumn2 = 31 IF ghostcolumn2 = 33 THEN ghostcolumn2 = 2 END IF END IF IF RND < .1 THEN oldRow3 = ghostrow3 SELECT CASE ghostrow3 CASE IS < row ghostrow3 = ghostrow3 + 1 CASE IS > row ghostrow3 = ghostrow3 - 1 END SELECT IF MID$(maze$(ghostrow3), ghostcolumn3, 1) = "л" THEN ghostrow3 = oldRow3 IF ghostrow3 = oldRow3 THEN oldColumn3 = ghostcolumn3 SELECT CASE ghostcolumn3 CASE IS < column ghostcolumn3 = ghostcolumn3 - 1 CASE IS > column ghostcolumn3 = ghostcolumn3 + 1 END SELECT IF MID$(maze$(ghostrow3), ghostcolumn3, 1) = "л" THEN ghostcolumn3 = oldColumn3 IF ghostcolumn3 = 0 THEN ghostcolumn3 = 31 IF ghostcolumn3 = 33 THEN ghostcolumn3 = 2 END IF END IF IF RND < .2 THEN oldRow4 = ghostrow4 SELECT CASE ghostrow4 CASE IS < row ghostrow4 = ghostrow4 - 1 CASE IS > row ghostrow4 = ghostrow4 + 1 END SELECT IF MID$(maze$(ghostrow4), ghostcolumn4, 1) = "л" THEN ghostrow4 = oldRow4 IF ghostrow4 = oldRow4 THEN oldColumn4 = ghostcolumn2 SELECT CASE ghostcolumn4 CASE IS < column ghostcolumn4 = ghostcolumn4 - 1 CASE IS > column ghostcolumn4 = ghostcolumn4 + 1 END SELECT IF MID$(maze$(ghostrow4), ghostcolumn4, 1) = "л" THEN ghostcolumn4 = oldColumn4 IF ghostcolumn4 = 0 THEN ghostcolumn4 = 31 IF ghostcolumn4 = 33 THEN ghostcolumn4 = 2 END IF END IF NEXT t RETURN