'===========================================================================
' Subject: GAME OF MATCHES FOR QB             Date: 03-13-97 (00:00)       
'  Author: batkin6114@aol.com                 Code: QB, QBasic, PDS        
'  Origin: Check ASIC.ABC for ASIC code     Packet: GAMES.ABC
'===========================================================================
SCREEN 0, 0: WIDTH 80: COLOR 7, 0, 0
DEFINT A-Z
CW = 0
HW = 0
START:
RANDOMIZE TIMER
N = 23
DUMB = 0
CLS
GOSUB SHOWMATCHES
PRINT
PRINT "           ******************** "; : COLOR 4, 0: PRINT "23 MATCHES GAME"; : COLOR 7, 0: PRINT " ********************"
PRINT "           **                                                     **"
PRINT "           **   Each turn, you may take away 1, 2, or 3 matches.  **"
PRINT "           **   The player stuck with the last match loses.       **"
PRINT "           **                                                     **"
PRINT "           **   Choose <"; : COLOR 4, 0: PRINT "D"; : COLOR 7, 0: PRINT ">unce, <"; : COLOR 4, 0: PRINT "S"; : COLOR 7, 0: PRINT ">mart, or <";
COLOR 4, 0: PRINT "G"; : COLOR 7, 0: PRINT ">enius Computer.    **"
PRINT "           **                                                     **"
PRINT "           *********************************************************"
DO
K$ = UCASE$(INKEY$)
IF K$ = CHR$(27) THEN CLS : END
IF K$ = "D" THEN DUMB = 1: EXIT DO
IF K$ = "S" THEN DUMB = 2: EXIT DO
IF K$ = "G" THEN EXIT DO
LOOP
CLS
LOCATE 10
PRINT "           *********************************************************"
PRINT "           **                                                     **"
PRINT "           **        Who moves first? <"; : COLOR 4, 0: PRINT "Y"; : COLOR 7, 0: PRINT ">ou, <"; : COLOR 4, 0: PRINT "C"; : COLOR 7, 0: PRINT ">omputer.          **"
PRINT "           **                                                     **"
PRINT "           *********************************************************"
DO
K$ = UCASE$(INKEY$)
IF K$ = CHR$(27) THEN CLS : END
IF K$ = "Y" THEN FIRST = 1: EXIT DO
IF K$ = "C" THEN FIRST = 0: EXIT DO
LOOP
IF FIRST = 0 THEN GOTO COMMOVE
GOSUB SHOWMATCHES
GOTO GETMOVE
SHOWMATCHES:
CLS
PRINT
PRINT "    ";
COLOR 4, 0
FOR A = 1 TO 2
PRINT
PRINT "    ";
FOR X = 1 TO N
PRINT " ²²";
NEXT X
NEXT A
COLOR 7, 0
PRINT
PRINT "    ";
FOR X = 1 TO N
PRINT " ²²";
NEXT X
PRINT
PRINT "    ";
COLOR 7, 0
FOR A = 1 TO 8
FOR X = 1 TO N
PRINT " ÛÛ";
NEXT X
PRINT
PRINT "    ";
NEXT A
RETURN
GETMOVE:
GETNUM:
PRINT
PRINT "     You have"; : COLOR 4, 0: PRINT N; : COLOR 7, 0: PRINT "matches left."
INPUT "     How many do you want to remove (1, 2, or 3)? ", R$
R = INT(ABS(VAL(R$)))
IF R >= N OR R < 1 OR R > 3 THEN
  PRINT
  COLOR 4, 0
  PRINT "     Illegal number. Try again!"
  COLOR 7, 0
  GOTO GETNUM
END IF
N = N - R
GOTO COMMOVE
COMMOVE:
CLS
CR = INT(RND * 3) + 1
IF (N = 20) + (N = 16) + (N = 12) + (N = 8) + (N = 4) THEN CR = 3
IF (N = 23) + (N = 19) + (N = 15) + (N = 11) + (N = 7) + (N = 3) THEN CR = 2
IF (N = 22) + (N = 18) + (N = 14) + (N = 10) + (N = 6) + (N = 2) + (N = 1) THEN CR = 1
IF DUMB > 0 THEN GOSUB COMDUMB
N = N - CR
IF N = 0 THEN GOTO COMLOSE
GOSUB SHOWMATCHES
PRINT
PRINT "     The Computer removes"; : COLOR 4, 0: PRINT CR; : COLOR 7, 0: PRINT "matches."
IF N = 1 THEN GOTO YOULOSE
GOTO GETMOVE
YOULOSE:
PRINT
PRINT "     You have the last match, You lose!"
CW = CW + 1
GOTO DONE
COMLOSE:
N = 1
GOSUB SHOWMATCHES
PRINT
PRINT "     The Computer has the last match, It loses!"
HW = HW + 1
GOTO DONE
DONE:
PRINT
PRINT "     You have won"; : COLOR 4, 0: PRINT HW;
COLOR 7, 0: PRINT "game(s), Computer has won"; : COLOR 4, 0: PRINT CW;
COLOR 7, 0: PRINT "game(s)."
PRINT
PRINT "     <"; : COLOR 4, 0: PRINT "Q"; : COLOR 7, 0: PRINT ">uit or any other key to play again..."
K$ = UCASE$(INPUT$(1))
IF K$ = "Q" OR K$ = CHR$(27) THEN CLS : END ELSE GOTO START
COMDUMB:
CR = INT(RND * 3) + 1
IF N = 4 THEN CR = 3
IF N = 3 THEN CR = 2
IF N = 2 THEN CR = 1
IF N = 1 THEN CR = 1
IF DUMB = 1 THEN RETURN
IF N = 6 OR N = 10 THEN CR = 1
IF N = 7 OR N = 11 THEN CR = 2
IF N = 8 OR N = 12 THEN CR = 3
RETURN

