! *********************************************************************** ! * * ! * H A N G M A N * ! * Donated by Lee Pallmann of UltraSoft * ! * * ! *********************************************************************** ! This program uses GET.SBR VER: PROGRAM HANG,1.0 MAPS: ! Program variables MAP1 ANSWER,S,30 ! Thw word that the player is trying to guess MAP1 USED(50),B,1 ! There are 50 words; 1=already used, 0=free MAP1 WRD,F,6 ! Which answer (1-50) is currently being useed MAP1 ROUNDS,F,6 ! Number of rounds played. MAP1 POINTS,F,6 ! Number of wins. MAP1 RESPONSE,S,30 ! The players guess (of the answer) MAP1 GUESS,S,1 ! The letter (A-Z) the player is guessing MAP1 LETTER(26),B,1 ! Has the letter been chosen yet? 1=Yes, 0=No MAP1 LIMBS,F,6 ! Player has six limbs MAP1 COUNT,F,6 ! Number of correctly guessed letters. MAP1 COL,F,6 ! Column counter for bottom row. MAP1 I,F,6 INIT: ! Initialize RANDOMIZE SCREEN: ! Paint background PRINT TAB(-1,0); CALL PAINT GETWRD: ! Get next word WRD = INT(RND(0)*50)+1 IF USED(WRD) THEN GOTO GETWRD USED(WRD) = 1 ROUNDS = ROUNDS + 1 IF ROUNDS=50 THEN PRINT TAB(24,1); : GOTO QUIT COUNT=0 COL = 10 LIMBS=0 PRINT TAB(22,12); TAB(-1,9); CALL ANSWER PRINT TAB(12,3); "Guess? _"; TAB(-1,5); GUESS: PRINT TAB(12,10); IF COUNT=LEN(ANSWER) THEN GOTO WIN XCALL GET, GUESS IF GUESS = CHR(27) THEN ROUNDS = ROUNDS - 1 : GOTO QUIT GUESS = UCS(GUESS) I = ASC(GUESS) IF I < 65 OR I > 90 THEN GOTO BADMOV I = I - 64 IF LETTER(I) = 1 THEN GOTO CHOSEN LETTER(I) = 1 PRINT TAB(19,1); TAB(-1,9); CALL DISPLY IF LIMBS=6 THEN GOTO LOSE GOTO GUESS DISPLY: ! Display letter(s) on screen. PRINT TAB(17,36); IF INSTR(1,ANSWER,GUESS)<1 CALL HANG : THEN RETURN FOR I = 1 TO LEN(ANSWER) IF ANSWER[I;1] = GUESS THEN PRINT GUESS; : COUNT = COUNT + 1 : & ELSE CALL CHAR NEXT I RETURN CHAR: ! If character was already on screen, redraw it. IF LETTER(ASC(ANSWER[I;1])-64) = 1 THEN PRINT ANSWER[I;1]; & ELSE PRINT "_"; RETURN ANSWER: ! Find the answer RESTORE PRINT TAB(17,1); TAB(-1,9); FOR I = 1 TO WRD READ ANSWER NEXT I PRINT TAB(17,36); FOR I = 1 TO LEN(ANSWER) PRINT "_"; NEXT I FOR I = 9 TO 11 PRINT TAB(I,36); SPACE(3); NEXT I RETURN CHOSEN: ! Duplicate choice - not allowed PRINT TAB(19,33); "Already Chosen" BADMOV: ! Invalid keystroke PRINT CHR(7); GOTO GUESS HANG: ! Hang him...slowly & painfully LIMBS = LIMBS + 1 CALL BOTTOM ON LIMBS GOTO HANG1,HANG2,HANG3,HANG4,HANG5,HANG6 HANG1: PRINT TAB(9,37); "O"; RETURN HANG2: PRINT TAB(10,37); "|"; RETURN HANG3: PRINT TAB(10,36); "/"; RETURN HANG4: PRINT TAB(10,38); "\"; RETURN HANG5: PRINT TAB(11,36); "/"; RETURN HANG6: PRINT TAB(11,38); "\"; RETURN BOTTOM: ! Keep list of used letters on bottom COL=COL + 2 PRINT TAB(22,COL); GUESS; RETURN LOSE: ! You lost! PRINT TAB(19,13); "YOU ARE DEAD - The word was `"; ANSWER; "' - "; & "Another game? "; GOTO ASK WIN: ! You won! PRINT TAB(19,27); "CONGRATULATIONS! - Another game? "; POINTS = POINTS + 1 ASK: ! Continue? XCALL GET, GUESS IF UCS(GUESS[1,1]) #"Y" THEN GOTO QUIT PRINT TAB(19,1); TAB(-1,9); FOR I = 1 TO 26 LETTER(I) = 0 NEXT I GOTO GETWRD QUIT: ! Exit program PRINT TAB(-1,0) PRINT POINTS; "win"; IF POINTS # 1 THEN PRINT "s"; PRINT ","; ROUNDS; "game"; IF ROUNDS # 1 THEN PRINT "s"; PRINT "." PRINT END DATA ZEPHYR,HANGMAN,ACUPUNCTURE,WHISKEY,BREVITY,COUNTERFEIT,COVENANT,SCORCH DATA RESISTANT,HALLUCINATE,HOURGLASS,IMPATIENT,INQUISITION,ITINERARY,JETLAG DATA KANGAROO,LATITUDE,LEDGER,COMPUTER,LIGHTWEIGHT,MACHINE,MILEAGE,MOUNTAIN DATA NICKEL,OCCURRENCE,OCEAN,PYROMANIAC,PSYCHOLOGICAL,REBELLIOUS,XENOPHOBIA DATA SCREECH,SPECIFY,TEMPEST,WRESTLE,TIMID,TORTOISE,TWINKLE,FABRIC,TELEGRAM DATA TYPICAL,BEASTLY,VAMPIRE,VISIBLE,AIRCRAFT,AVIATION,WITHSTAND,XENOPHOBIA DATA UNABLE,XYLOPHONE,YEAST PAINT: ! HANG.BSI created on 12-08-86 by AlphaPAINT PRINT TAB(-1,0); TAB(-1,29); PRINT TAB(-1,12); PRINT TAB(2,32); "H A N G M A N"; PRINT TAB(8,37); TAB(-1,23); TAB(-1,11); TAB(-1,38); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,39); PRINT TAB(9,40); TAB(-1,47); PRINT TAB(10,40); TAB(-1,47); PRINT TAB(11,40); TAB(-1,47); PRINT TAB(12,39); TAB(-1,38); TAB(-1,45); TAB(-1,39); PRINT TAB(13,37); TAB(-1,38); TAB(-1,46); TAB(-1,41); TAB(13,41); TAB(-1,40); PRINT TAB(-1,46); TAB(-1,39); PRINT TAB(14,36); TAB(-1,38); TAB(-1,41); TAB(14,43); TAB(-1,40); TAB(-1,39); PRINT PRINT TAB(15,36); TAB(-1,40); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,41); PRINT TAB(21,1); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); PRINT TAB(-1,24); ""; TAB(-1,12); "Guesses:"; PRINT TAB(-1,12); TAB(-1,28); RETURN