'===========================================================================
' Subject: POKER (TEXT VERSION)               Date: 12-17-97 (01:04)       
'  Author: Andrey Berezansky                  Code: QB, QBasic, PDS        
'  Origin: nikolai@nsi.co.il                Packet: GAMES.ABC
'===========================================================================
' Text graphics , with only one computer oponent , programmed in ONE day
' POKER game . But it is only  1.004938701 BETA version    :-)
' Press ESC to quit the game .

' Programmed by BEREZANSKY ANDREY  -  email (nikol@cs.bgu.ac.il)
' DATE   10/12/97  .




DEFINT A-Z
DECLARE SUB calc ()
DECLARE SUB change ()
DECLARE SUB cpgame ()
DECLARE SUB game ()
DECLARE SUB drawtable ()
DECLARE SUB comphand ()
DECLARE SUB place ()
CLS
RANDOMIZE TIMER
DIM SHARED a(9, 13, 9)
DIM SHARED card$(9)
DIM SHARED hand(5, 2)
DIM SHARED chand(5, 2)
plac = 1: moneypl = 1000: moneycp = 1000: start = 1

'***** reading data *****
FOR num = 1 TO 9
  FOR i = 1 TO 9
    FOR ii = 1 TO 13
      READ a(i, ii, num)
    NEXT
  NEXT
  READ card$(num)
NEXT
'************************
0
'***** background *****
COLOR 7, 6: LOCATE 1, 1
FOR i = 1 TO 1920
  PRINT CHR$(177);
NEXT
'**********************

'*********** choosing cards ***********************
FOR i = 1 TO 5
  char = INT(RND * 4) + 3
  IF char = 3 OR char = 4 THEN col = 4 ELSE col = 0
  num = INT(RND * 9) + 1
  CALL place
  plac = plac + 16
  hand(i, 1) = num: hand(i, 2) = char
NEXT
'**************************************************

CALL comphand

1
DO WHILE exitt = 0
  CALL drawtable
  CALL game
  IF moneypl < 0 THEN 8
  CALL drawtable
  IF exitt = 0 THEN CALL cpgame
  IF moneycp < 0 THEN 9
  CALL drawtable
LOOP

IF endgame = 1 THEN 10

IF mm = 0 THEN
CALL change
exitt = 0: start = 1: mm = 1: cal = 0
GOTO 1
ELSE
IF res = 0 THEN CALL calc
END IF
start = 1: cstart = 1: betpl = 0: betcp = 0: status = 0: plac = 1: cal = 0: exitt = 0: mm = 0: res = 0
FOR i = 1 TO 5
  hand(i, 1) = 0: hand(i, 2) = 0: chand(i, 1) = 0: chand(i, 2) = 0
NEXT
GOTO 0

'***************** here are ending of the game *******************
8 COLOR 15, 0: CLS : LOCATE 10, 32: PRINT "YOU LOOSE !!!": GOTO 10
9 COLOR 15, 0: CLS : LOCATE 10, 32: PRINT "YOU WIN !!!": GOTO 10
'*****************************************************************
10 END

'This data is card's shape ,change it if you whant better looking cards .

DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "6"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "7"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "8"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "9"
DATA 0,0,0,0,0,0,0,0,0,0,1,2,3
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 2,3,1,0,0,0,0,0,0,0,0,0,0
DATA "10"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,1,1,1,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "J"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,0,1,1,1,1,1,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,1,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,1,1,1,1,1,1,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "Q"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,1,0,0,0,1,0,0,0,1,0,0
DATA 0,0,1,1,0,1,1,1,0,1,1,0,0
DATA 0,0,1,1,1,1,1,1,1,1,1,0,0
DATA 0,0,1,1,1,1,0,1,1,1,1,0,0
DATA 0,0,1,1,1,1,1,1,1,1,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "K"
DATA 0,0,0,0,0,0,0,0,0,0,0,1,2
DATA 0,0,0,0,1,1,1,1,1,0,0,0,0
DATA 0,0,0,1,1,0,0,0,1,1,0,0,0
DATA 0,0,1,1,0,0,0,0,0,1,1,0,0
DATA 0,0,1,1,1,1,1,1,1,1,1,0,0
DATA 0,0,1,1,0,0,0,0,0,1,1,0,0
DATA 0,0,1,1,0,0,0,0,0,1,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 2,1,0,0,0,0,0,0,0,0,0,0,0
DATA "A"

SUB calc
SHARED plac, num, char, col, moneypl, moneycp, status
COLOR 15, 6: LOCATE 10, 25: PRINT "ANY KEY FOR RESULTS"
DO WHILE INKEY$ = "": LOOP
COLOR 15, 6: LOCATE 10, 25: PRINT "COMPUTER HAND IS : "
plac = 1
FOR i = 1 TO 5
  num = chand(i, 1): char = chand(i, 2)
  IF char = 3 OR char = 4 THEN col = 4 ELSE col = 0
  CALL place
  plac = plac + 16
NEXT
SLEEP 2&

DIM comp(9)
DIM player(9)
FOR i = 1 TO 5
  comp(chand(i, 1)) = comp(chand(i, 1)) + 1
NEXT
FOR i = 1 TO 5
  player(hand(i, 1)) = player(hand(i, 1)) + 1
NEXT

FOR i = 1 TO 9
  IF comp(i) = 1 THEN
    a = a + 1: aa = aa + i
  END IF
  IF comp(i) = 1 THEN
    b = b + 1: bb = bb + i
  END IF
  IF comp(i) = 2 THEN
    scorecp = scorecp + 1: ii = ii + i
  END IF
  IF comp(i) = 3 THEN
    scorecp = scorecp + 3: ii = ii + i
  END IF
  IF comp(i) = 4 THEN
    scorecp = scorecp + 4: ii = i
  END IF
  IF player(i) = 2 THEN
    scorepl = scorepl + 1: iii = iii + i
  END IF
  IF player(i) = 3 THEN
    scorepl = scorepl + 3: iii = iii + i
  END IF
  IF player(i) = 4 THEN
    scorepl = scorepl + 4: iii = i
  END IF
NEXT

IF scorepl > scorecp THEN win = 1
IF scorepl = scorecp AND iii > ii THEN win = 1
IF a = 5 AND b = 5 AND bb > aa THEN win = 1


IF win = 1 THEN
  COLOR 15, 6: LOCATE 10, 25: PRINT "YOU ARE THE WINNER !"
END IF
IF win = 0 THEN
  COLOR 15, 6: LOCATE 10, 25: PRINT "COMPUTER WIN !!!!!!!"
END IF
DO WHILE INKEY$ = "": LOOP
IF win = 1 THEN moneypl = moneypl + status ELSE moneycp = moneycp + status


END SUB

SUB change
SHARED num, char, col, plac
DIM nnn(5)
COLOR 15, 6: LOCATE 10, 4: PRINT "PRESS NUMBERS (1 - 5) OF CARDS THAT YOU WHANT TO CHANGE .ENTER WHEN DONE."
DO WHILE endd = 0
  SELECT CASE INKEY$
    CASE "1"
      IF n1 = 0 THEN
        choos = 1: n1 = 1: nn = nn + 1: nnn(nn) = 1
      END IF
    CASE "2"
      IF n2 = 0 THEN
        choos = 2: n2 = 1: nn = nn + 1: nnn(nn) = 2
      END IF
    CASE "3"
      IF n3 = 0 THEN
        choos = 3: n3 = 1: nn = nn + 1: nnn(nn) = 3
      END IF
    CASE "4"
      IF n4 = 0 THEN
        choos = 4: n4 = 1: nn = nn + 1: nnn(nn) = 4
      END IF
    CASE "5"
      IF n5 = 0 THEN
        choos = 5: n5 = 1: nn = nn + 1: nnn(nn) = 5
      END IF
    CASE CHR$(13)
      endd = 1
  END SELECT
  IF choos > 0 THEN
    FOR i = 15 TO 23
      FOR ii = 2 + 16 * (choos - 1) TO 14 + 16 * (choos - 1)
        COLOR 8, 6: LOCATE i, ii: PRINT CHR$(178);
      NEXT
    NEXT
    choos = 0
  END IF
LOOP

FOR ii = 1 TO nn
200
  char = INT(RND * 4) + 3
  IF char = 3 OR char = 4 THEN col = 4 ELSE col = 0
  num = INT(RND * 9) + 1
  FOR i = 1 TO 5
    IF hand(i, 1) = num AND hand(i, 2) = char THEN 200
    IF chand(i, 1) = num AND hand(i, 2) = char THEN 200
  NEXT i
  hand(nnn(ii), 1) = num: hand(nnn(ii), 2) = char
NEXT

COLOR 7, 6: LOCATE 1, 1
FOR i = 1 TO 1920
  PRINT CHR$(177);
NEXT
plac = 1
FOR i = 1 TO 5
  num = hand(i, 1): char = hand(i, 2)
  IF char = 3 OR char = 4 THEN col = 4 ELSE col = 0
  CALL place
  plac = plac + 16
NEXT

END SUB

SUB comphand
FOR n = 1 TO 5
100
  char = INT(RND * 4) + 3
  IF char = 3 OR char = 4 THEN col = 4 ELSE col = 0
  num = INT(RND * 9) + 1
  FOR i = 1 TO 5
    IF hand(i, 1) = num AND hand(i, 2) = char THEN 100
    IF chand(i, 1) = num AND hand(i, 2) = char THEN 100
  NEXT i
  chand(n, 1) = num: chand(n, 2) = char
NEXT

END SUB

SUB cpgame
SHARED betpl, betcp, moneypl, moneycp, status, exitt, start, cal, cstart
DIM comp(9)
'**********************ANALYZE************************
FOR i = 1 TO 5
  comp(chand(i, 1)) = comp(chand(i, 1)) + 1
NEXT

FOR i = 1 TO 9
  IF comp(i) = 2 THEN
    par = par + 1: ii = i
  END IF
  IF comp(i) = 3 THEN tri = tri + 1
  IF comp(i) = 4 THEN yes = 1
NEXT
'*****************************************************
k = (INT(RND * 3) + 1) * 10
kk = (INT(RND * 2) + 1) * 10
IF cal < 3 THEN
  IF INT(RND * 10000) > 9222 AND moneycp > 29 THEN
    IF cstart = 0 THEN
      moneycp = moneycp - k - betpl
      status = status + k + betpl
    ELSE
      moneycp = moneycp - betpl + betcp - k
      status = status + betpl - betcp + k
    END IF
    betcp = betpl + k: cal = cal + 1
    GOTO 1001
  END IF
  IF yes = 1 AND moneycp > 29 THEN
    IF cstart = 0 THEN
      moneycp = moneycp - k - betpl
      status = status + k + betpl
    ELSE
      moneycp = moneycp - betpl + betcp - k
      status = status + betpl - betcp + k
    END IF
    betcp = betpl + k: cal = cal + 1
  END IF
  IF par = 1 AND tri = 1 AND moneycp > 29 THEN
    IF cstart = 0 THEN
      moneycp = moneycp - k - betpl
      status = status + k + betpl
    ELSE
      moneycp = moneycp - betpl + betcp - k
      status = status + betpl - betcp + k
    END IF
    betcp = betpl + k: cal = cal + 1
  END IF
  IF par = 0 AND tri = 1 AND moneycp > 19 THEN
    IF cstart = 0 THEN
      moneycp = moneycp - kk - betpl
      status = status + kk + betpl
    ELSE
      moneycp = moneycp - betpl + betcp - kk
      status = status + betpl - betcp + kk
    END IF
    betcp = betpl + kk: cal = cal + 1
  END IF
  IF par = 2 AND moneycp > 19 THEN
    IF cstart = 0 THEN
      moneycp = moneycp - kk - betpl
      status = status + kk + betpl
    ELSE
      moneycp = moneycp - betpl + betcp - kk
      status = status + betpl - betcp + kk
    END IF
    betcp = betpl + kk: cal = cal + 1
  END IF
  IF par = 1 AND tri = 0 AND yes = 0 AND moneycp > 19 AND ii > 3 THEN
    IF cstart = 0 THEN
      moneycp = moneycp - kk - betpl
      status = status + kk + betpl
    ELSE
      moneycp = moneycp - betpl + betcp - kk
      status = status + betpl - betcp + kk
    END IF
    betcp = betpl + kk: cal = cal + 1
  END IF
END IF

IF par = 1 AND ii < 4 AND yes = 0 AND tri = 0 THEN
  moneycp = moneycp - betpl + betcp: status = status + betpl - betcp
  betcp = betpl: start = 1: exitt = 1
END IF
IF par = 0 AND yes = 0 AND tri = 0 THEN
  moneycp = moneycp - betpl + betcp: status = status + betpl - betcp
  betcp = betpl: start = 1: exitt = 1
END IF
IF moneycp < 19 THEN
  moneycp = moneycp - betpl + betcp: status = status + betpl - betcp
  betcp = betpl: start = 1: exitt = 1
END IF

1001
IF betpl = betcp THEN
  COLOR 15, 6: LOCATE 10, 30: PRINT "COMPUTER CALL"
END IF
IF betpl < betcp THEN
  COLOR 15, 6: LOCATE 10, 30: PRINT "COMPUTER RAISE"; betcp - betpl
END IF
IF betpl < betcp THEN
  COLOR 15, 6: LOCATE 10, 30: PRINT "COMPUTER RAISE"; betcp - betpl
END IF
DO WHILE INKEY$ = "": LOOP
COLOR 7, 6
FOR i = 30 TO 50
  LOCATE 10, i: PRINT CHR$(177)
NEXT

cstart = 1
END SUB

SUB drawtable
SHARED moneypl, moneycp, status, betpl, betcp
COLOR 0, 3
LOCATE 12, 5: PRINT " 1 - BET "
LOCATE 12, 25: PRINT " 2 - RAISE "
LOCATE 12, 45: PRINT " 3 - CALL "
LOCATE 12, 65: PRINT " 4 - RESIGN "

COLOR 15, 11
LOCATE 4, 15: PRINT " |       $| YOR BET | STATUS | COMPUTERS |       $|"
LOCATE 5, 15: PRINT " |________| |$$$$$| |--------|  |$$$$$|  |________|"
LOCATE 6, 15: PRINT "  /\ /\ /\  |     | |$      $|  |     |   /\ /\ /\ "
LOCATE 7, 15: PRINT " YOUR MONEY |_____| |________|  |_____|   COMPUTER "

LOCATE 4, 17: PRINT moneypl: LOCATE 4, 57: PRINT moneycp
LOCATE 6, 28: PRINT betpl: LOCATE 6, 48: PRINT betcp
LOCATE 6, 37: PRINT status
COLOR 8, 6
FOR i = 17 TO 67
  LOCATE 8, i: PRINT CHR$(177);
NEXT
LOCATE 5, 66: PRINT CHR$(177); CHR$(177): LOCATE 6, 66: PRINT CHR$(177); CHR$(177): LOCATE 7, 66: PRINT CHR$(177); CHR$(177)


END SUB

SUB game
SHARED betpl, betcp, moneypl, moneycp, status, exitt, start, cal, endgame, res, mm
DO WHILE ex = 0
  SELECT CASE INKEY$
    CASE "1"
      IF start = 1 THEN
        COLOR 15, 4
        LOCATE 8, 5:  PRINT "___BET___"
        LOCATE 9, 5:  PRINT " 1 - 0  $"
        LOCATE 10, 5: PRINT " 2 - 5  $"
        LOCATE 11, 5: PRINT " 3 - 10 $"
        LOCATE 12, 5: PRINT " 4 - 15 $"
        DO WHILE ex = 0
          SELECT CASE INKEY$
            CASE "1"
              ex = 1
            CASE "2"
              IF moneypl > 4 THEN
                betpl = betpl + 5: ex = 1: status = status + 5: moneypl = moneypl - 5
              END IF
            CASE "3"
              IF moneypl > 9 THEN
                betpl = betpl + 10: ex = 1: status = status + 10: moneypl = moneypl - 10
              END IF
            CASE "4"
              IF moneypl > 4 THEN
                betpl = betpl + 15: ex = 1: status = status + 15: moneypl = moneypl - 15
              END IF
          END SELECT
        LOOP
        COLOR 7, 6
        FOR i = 8 TO 11
          FOR ii = 5 TO 13
            LOCATE i, ii: PRINT CHR$(177)
          NEXT
        NEXT
        start = 0
      END IF
   
    CASE "2"
      IF start = 0 AND moneypl > 4 AND cal < 3 THEN
        COLOR 15, 4
        LOCATE 8, 25: PRINT "___RAISE___"
        LOCATE 9, 25:  PRINT "  1 - 5  $ "
        LOCATE 10, 25: PRINT "  2 - 10 $ "
        LOCATE 11, 25: PRINT "  3 - 20 $ "
        LOCATE 12, 25: PRINT "  4 - 30 $ "
        DO WHILE ex = 0
          SELECT CASE INKEY$
            CASE "1"
              ex = 1: status = status + betcp - betpl + 5
              moneypl = moneypl - betcp + betpl - 5: cal = cal + 1
              betpl = betcp + 5
            CASE "2"
              IF moneypl > 9 THEN
                ex = 1: status = status + betcp - betpl + 10
                moneypl = moneypl - betcp + betpl - 10: cal = cal + 1
                betpl = betcp + 10
              END IF
            CASE "3"
              IF moneypl > 19 THEN
                ex = 1: status = status + betcp - betpl + 20
                moneypl = moneypl - betcp + betpl - 20: cal = cal + 1
                betpl = betcp + 20
              END IF
            CASE "4"
              IF moneypl > 29 THEN
                ex = 1: status = status + betcp - betpl + 30
                moneypl = moneypl - betcp + betpl - 30: cal = cal + 1
                betpl = betcp + 30
              END IF
          END SELECT
        LOOP
        COLOR 7, 6
        FOR i = 8 TO 11
          FOR ii = 25 TO 35
            LOCATE i, ii: PRINT CHR$(177)
          NEXT
        NEXT
      END IF
   
    CASE "3"
      IF start = 0 THEN
        status = status + betcp - betpl
        moneypl = moneypl - betcp + betpl
        betpl = betcp: start = 1: ex = 1: exitt = 1
      END IF
    CASE "4"
      IF betpl > 0 THEN
        exitt = 1: mm = 1: ex = 1: moneycp = moneycp + status: res = 1
        COLOR 15, 6: LOCATE 10, 23: PRINT "YOU LOOSE ! LETS START A NEW ONE !"
        SLEEP
      END IF
    CASE CHR$(27)
    exitt = 1: endgame = 1: ex = 1
  END SELECT
LOOP

END SUB

SUB place
SHARED char, col, num, plac
FOR i = 1 TO 9
  FOR ii = 1 TO 13
    LOCATE i + 14, ii + plac
    IF a(i, ii, num) = 0 THEN
      COLOR 7, 7
      PRINT CHR$(219)
      ELSE
        COLOR col, 7
        IF a(i, ii, num) = 1 THEN PRINT CHR$(char)
        IF a(i, ii, num) = 2 THEN PRINT card$(num)
    END IF
  NEXT
NEXT

END SUB
