'=========================================================================== ' Subject: HANGMAN GAME Date: 10/16/95 (00:00) ' Author: Unknown Author(s) Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: GAMES.ABC '=========================================================================== DEFINT A-Z DECLARE FUNCTION GetKey% () DECLARE FUNCTION Enput$ (FieldLength) DECLARE SUB XLocate (Column) CONST Esc = 27, Enter = 13, BackSpace = 8 CONST NumWords = 18 SCREEN 0 WIDTH 80 COLOR 13 CLS LOCATE , , 0 RANDOMIZE TIMER PRINT "This is a game of hangman. You may play aginst the computer or another person." PRINT " You will get a body part added to the man if you get a letter wrong." PRINT " If you get the letter correct you will get another guess." PRINT " You will have the possibility of six errors." PRINT " You must get the word correct before your man gets hanged." PRINT PRINT " BEWARE: There maybe hyphens, periods, numbers, and you must guess spaces. " PRINT " Good luck!" LOCATE 23 PRINT " Press a key to continue..." KeyCode = GetKey% Top: SCREEN 0 CLS COLOR 9 LOCATE 9 PRINT TAB(20); "1) YO! G U WON'T PLAY DIS 1!!!!" PRINT COLOR 10 PRINT TAB(20); "2) HA!HA! PLAY DIS MODE!!! HA!HA!" PRINT COLOR 15 PRINT TAB(20); "3) C'YA! OUTTY 5000 G!!" PRINT COLOR 4 PRINT TAB(20); " WHICH 1 U BE WANNIN!!" 230 KeyCode = GetKey% SELECT CASE KeyCode CASE 49 '1 ' ' **** WORD INPUT BY COMPUTER **** ' RESTORE WordList: FOR Temp = 0 TO INT(RND * NumWords) READ Word$ NEXT Temp Word$ = UCASE$(Word$) CASE 50 '2 ' ' **** WORD ENTERED BY PLAYER ONE **** ' PRINT "TYPE IN A WORD, AND THE PRESS THE ENTER KEY." Word$ = UCASE$(Enput$(50)) CASE 51 '3 GOSUB 970 CASE Esc 'ESC END CASE ELSE GOTO 230 END SELECT 'GOTO 180 490 ' ' **** GUESS ROUTINE **** ' SCREEN 2 CLS : LOCATE 6, 10 GOSUB 1070 Mistakes = 0: WordLen = LEN(Word$) PRINT "THA WORD HAZ"; WordLen; "LETTERS" LOCATE 10, 10 S = 5 Guess$ = STRING$(WordLen, 221) PRINT Guess$ DO LOCATE 18, 10: PRINT "U HAVE "; Mistakes; " MIZTAKEZ!" LOCATE 19, 10: PRINT "GUEZZ DA LETTER: "; Letter$ = UCASE$(Enput$(1)) IF KeyCode = Esc THEN GOTO Top: END IF LOCATE 21, 5: PRINT "U HAVE PICKED THEZE LETTERS...." S = S + 2 LOCATE 23, S PRINT Letter$ FOR J = 1 TO WordLen IF MID$(Word$, J, 1) = Letter$ THEN GG = 1 MID$(Guess$, J, 1) = Letter$ END IF NEXT J LOCATE 10, 10: PRINT Guess$ IF GG <> 1 THEN Mistakes = Mistakes + 1 ON Mistakes GOSUB 1190, 1280, 1320, 1400, 1480 ELSE GG = 0 IF Guess$ = Word$ THEN EXIT DO END IF LOOP WHILE Mistakes < 6 LOCATE 18, 10: PRINT "U HAVE "; Mistakes; " MIZTAKEZ!" GOSUB 1190 GOSUB 1280 GOSUB 1320 GOSUB 1400 GOSUB 1480 GOSUB 1520 LOCATE 14, 10 IF Guess$ = Word$ THEN PRINT " ' B O U T T I M E ! !" GOSUB 1590 ELSE PRINT "HA HA ! !... THA WORD WUZ "; Word$ GOSUB 1560 END IF GOTO Top: 970 ' ' **** PROGRAM EXIT ROUTINE **** ' SCREEN 0 END 1070 ' **** GALLOWS **** LINE (260, 170)-(350, 199), 1, BF LINE (600, 0)-(590, 199), 1, BF LINE (500, 170)-(600, 199), 1, BF LINE (355, 170)-(495, 170), 1, BF LINE (422, 0)-(600, 3), 1, BF LINE (515, 0)-(600, 43) LINE (500, 0)-(600, 50) LINE (422, 0)-(426, 50), 1, BF CIRCLE (424, 64), 10, 1, , , .9 LINE (420, 50)-(428, 55), 1, BF RETURN 1190 ' **** HEAD **** CIRCLE (424, 64), 10, 0, , , .9 'Erase noose CIRCLE (424, 50), 30, 1 CIRCLE (424, 50), 28, 0 PAINT (424, 50), 0 'Erase rope CIRCLE (415, 47), 2, 1 CIRCLE (433, 47), 2, 1 CIRCLE (424, 56), 9, 1, , , .2 CIRCLE (424, 50), 1, 1 RETURN 1280 ' **** BODY **** LINE (421, 64)-(427, 70), 1, BF CIRCLE (424, 92), 25, 1, , , .9 RETURN 1320 ' **** ARM 1 **** LINE (401, 83)-(350, 95) LINE (409, 73)-(350, 95) LINE (350, 95)-(340, 93) LINE (350, 95)-(338, 96) LINE (350, 95)-(336, 100) LINE (350, 95)-(348, 103) RETURN 1400 ' **** ARM 2 **** LINE (448, 83)-(500, 95) LINE (432, 70)-(500, 95) LINE (500, 95)-(515, 90) LINE (500, 95)-(518, 95) LINE (500, 95)-(513, 99) LINE (500, 95)-(510, 102) RETURN 1480 ' **** LEG 1 **** LINE (417, 115)-(410, 163) CIRCLE (402, 165), 10, 1, , , .3 RETURN 1520 ' **** LEG 2 **** LINE (433, 115)-(440, 163) CIRCLE (446, 165), 10, 1, , , .3 RETURN 1560 ' **** LOSE **** 'CIRCLE (415, 47), 2, 0 'CIRCLE (433, 47), 2, 0 'PSET (415, 47) 'PSET (433, 47) LINE (355, 170)-(495, 170), 0, BF 'Erase floorboard KeyCode = GetKey% RETURN 1590 ' **** WIN **** CIRCLE (424, 64), 10, 0, , , .9 LINE (420, 50)-(428, 55), 0, BF LINE (422, 0)-(426, 50), 0, BF CIRCLE (424, 50), 30, 1 CIRCLE (424, 50), 28, 1 PAINT (424, 50), 0 CIRCLE (415, 47), 2, 1 CIRCLE (433, 47), 2, 1 CIRCLE (424, 56), 9, 1, , , .2 CIRCLE (424, 50), 1, 1 KeyCode = GetKey% RETURN WordList: DATA "JUJU BEE" DATA "R.T." DATA "NICE BUTT" DATA "B.B." DATA "CHAD BECK" DATA "KIETHERS" DATA "PARIS" DATA "PRINCE" DATA "9-MILLIMETER" DATA "TECH-9" DATA "SYSTEM" DATA "ICE-T" DATA "BUSH KILLA" DATA "GUERRILLAS IN THE MIST" DATA "DEATHPOOL" DATA "MARK SALASBALLS" DATA "LIVIN' IN THA SESTPOOL" DATA "I HATE KRISTA REALLY WITH A PASSION!!!!!!!" FUNCTION Enput$ (FieldLength) STATIC SHARED KeyCode, KeyStroke$ 'Define internal defaults ReturnVar$ = "" 'Used to hold output Col = POS(0) CharsCollected = 0 EmptySpaceChar$ = "Ý" ' Supply usable keys AllowCharsMask$ = CHR$(34) + " !#$%&'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz[\]_" ' begin main loop DO IF CharsCollected THEN 'Column = Col + CharsCollected CALL XLocate(Col + CharsCollected) ELSE CALL XLocate(Col) 'On PRINT STRING$(FieldLength, EmptySpaceChar$); CALL XLocate(Col) 'On END IF KeyCode = GetKey% SELECT CASE KeyCode CASE Esc 'Abort program EXIT DO CASE BackSpace 'Back up IF CharsCollected THEN CharsCollected = CharsCollected - 1 'Column = Col + CharsCollected CALL XLocate(Col + CharsCollected) PRINT EmptySpaceChar$; ReturnVar$ = LEFT$(ReturnVar$, CharsCollected) END IF CASE Enter 'Accept EXIT DO CASE 1 TO 255 'Normal key KeyStroke$ = CHR$(KeyCode) IF INSTR(AllowCharsMask$, KeyStroke$) THEN 'see if it's printable IF CharsCollected < FieldLength THEN ReturnVar$ = ReturnVar$ + KeyStroke$ CharsCollected = CharsCollected + 1 PRINT KeyStroke$; END IF END IF END SELECT LOOP Enput$ = ReturnVar$ PRINT END FUNCTION FUNCTION GetKey% STATIC DO Ky$ = INKEY$ KeyCode = 0 SELECT CASE LEN(Ky$) CASE 1 KeyCode = ASC(Ky$) CASE <> 0 KeyCode = -ASC(RIGHT$(Ky$, 1)) END SELECT LOOP UNTIL KeyCode GetKey% = KeyCode END FUNCTION SUB XLocate (Column) STATIC LOCATE , Column, 1 END SUB