Z80-21 Yet Another "BlackJack"

General games-related topics
User avatar
sanello
Posts: 100
Joined: Sat Jul 23, 2022 9:26 pm

Re: Z80-21 Yet Another "BlackJack"

Post by sanello »

XavSnap wrote: Sun Aug 07, 2022 10:54 am HI,

Ok sanello !

New test release:
-Display "$BLACKJAK$" if you score=21.
-You can set a 16 deck of card.
-Card display in a machine code routine.

BLACKJACKZ8021.P
I hardly recognize this anymore, but there are only 2 issues I see so far.

I think at 4910 is where you put the line to go reshuffle. I made it just be 16 for a single deck. A casino would reshuffle usually with 25% of the cards are left at the most. So I'd change that to a percentage left.

It still won't let you double when you have enough money. Example. I have $1000 and my initial bet is $500. since i have $500 left I should be able to double. I fixed it in one of the versions, but i can't remember which one anymore.

16 decks. WOW. 8 is probably plenty, but why not!
-sanello
User avatar
sanello
Posts: 100
Joined: Sat Jul 23, 2022 9:26 pm

Re: Z80-21 Yet Another "BlackJack"

Post by sanello »

...and $BLACKJACK$ doesn't clear the k$

...when it does say H/S/D, it makes you press h twice. There is a line there that I had in that worked with my convoluted code, but doesn't with your better streamlined code.
-sanello
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: Z80-21 Yet Another "BlackJack"

Post by XavSnap »

Was

Code: Select all

4910 GOTO 90+100 AND L>16
Should be :

Code: Select all

  4910 GOTO 90+(100 AND L>((P*52)*.25))
If L>((P*52)*.25)= above 25% ? = TRUE
4910 GOTO 90+100 AND TRUE
4910 GOTO 90+100
4910 GOTO 190
Next game.

If L<=((P*52)*.25)= above 25% ? = FALSE
4910 GOTO 90+100 AND FALSE
4910 GOTO 90+0
4910 GOTO 90
"SHUFFLING"
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: Z80-21 Yet Another "BlackJack"

Post by XavSnap »

Code: Select all

..and $BLACKJACK$ doesn't clear the k$
No, this text is display by the score at line 8 or 13 (y or z display).

The score display is in a GOSUB routine ,now:

Code: Select all

 
     86 LET YD=VAL "320"
     (...)
   320 PRINT AT 8,0;Y;" ";TAB 4;("ˆblackjackˆ" AND Y=21)
   322 RETURN
   324 PRINT AT 13,0;Z;" ";TAB 4;("ˆblackjackˆ" AND Z=21)
   325 RETURN
Called by GOSUB 320 or GOSUB 320 +PI
GOSUB YD
GOSUB YD+PI
Cap0014.jpg


[Edit:] Arghhh! it not the variable K$ >>> $BLACKJAC_K$
I will change the line 3006.

Code: Select all

  3006 PRINT AT 8,4;"’bust’" AND Y>21;"´´´´´´´´´´´" AND Y<>21
[/Edit]
Last edited by XavSnap on Sun Aug 07, 2022 8:51 pm, edited 3 times in total.
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: Z80-21 Yet Another "BlackJack"

Post by XavSnap »

New code:
Line 0 : Pur ASM screen display, slide screen and card display (back and front side)
Line 1: Screen>start (game type & decks.
Line 2: Screen>bet choice.
Line 3: Screen>game screen.

Code: Select all

0 REM [HEX:\
00,00,E7,CD,92,0D,CD,F5,0B,68,61,CD,D8,09,01,05,\
00,09,EB,2A,0C,40,23,FD,36,7C,01,1A,CB,77,CB,B7,\
FD,77,7B,28,0A,13,1A,FD,77,7C,FE,01,CA,5B,00,ED,\
4B,7B,40,71,23,CB,76,28,01,23,10,F7,13,18,D8,21,\
3D,40,36,20,2A,0C,40,0E,16,23,7E,06,1F,F5,23,7E,\
2B,77,23,10,F9,F1,36,88,23,0D,20,ED,21,3D,40,35,\
3E,00,BE,20,DF,C9,2A,12,40,11,00,01,06,04,72,23,\
1C,73,23,10,F9,14,7A,FE,0E,28,04,1E,00,18,ED,FD,\
35,21,3A,21,40,FE,00,20,E0,01,01,00,C9,FD,36,3D,\
00,21,60,41,ED,5B,0E,40,01,05,00,ED,B0,3E,05,EB,\
01,1C,00,09,EB,0E,05,ED,B0,3D,28,07,2B,2B,2B,2B,\
2B,18,EC,EB,01,1C,00,09,EB,01,05,00,ED,B0,3E,FF,\
BE,28,0F,FD,BE,3D,28,13,01,FF,0C,0B,78,B1,20,FB,\
18,C2,0E,07,C9,FD,36,3D,FF,18,B6,0E,80,C9,80,84,\
84,84,84,82,86,86,86,84,82,82,82,82,80,80,84,84,\
84,88,82,86,86,84,88,82,82,82,80,88,80,84,84,88,\
88,82,86,84,88,88,82,82,80,88,88,88,84,03,84,88,\
88,86,00,85,88,88,82,83,81,88,80,89,03,03,84,82,\
88,00,00,85,82,8A,83,83,81,07,03,03,03,84,05,00,\
00,00,85,82,83,83,83,81,FF ]


1 REM [HEX:\
00,81,82,0A,43,04,07,0A,06,03,86,0A,06,03,86,4A,04,06,03,84,4A,02,81,0A,06,86,03,04,83,C0,02,8A,4A,03,06,4A,02,05,0A,85,0A,05,0A,85,4A,06,06,0A,02,C5,02,40,03,85,C0,04,4A,02,06,4A,03,84,80,07,0A,05,0A,85,0A,87,8A,4A,02,06,4A,03,85,0A,86,00,87,01,02,84,07,01,0A,06,4A,04,05,0A,85,0A,05,0A,85,4A,04,06,4A,04,85,4A,02,86,01,40,02,43,02,0A,81,CA,04,0A,82,8A,81,0A,82,8A,81,4A,04,82,CA,02,4A,02,81,8A,4A,22,40,02,CA,20,40,20,06,C3,1E,86,85,4A,1E,05,85,00,2A,33,39,2A,37,00,39,26,27,31,2A,00,37,3A,31,2A,38,00,87,1D,00,2B,34,37,00,1E,0E,1D,00,05,85,40,03,2B,34,37,00,1E,1D,00,35,26,3E,34,3A,39,40,03,87,1E,00,2B,34,37,00,1F,0E,1E,00,05,85,40,13,87,1F,00,2B,34,37,00,22,0E,21,00,05,85,49,1E,05,86,43,1E,06,40,26,29,2A,28,30,38,00,34,2B,00,28,26,37,29,38,0E,40,0D,04,40,1E,06,02,04,40,03,A6,00,A7,00,A8,00,A9,00,AA,00,AB,00,AC,00,AD,00,AE,40,05,87,82,00,06,40,02,02,04,40,02,1D,00,1E,00,1F,00,20,00,21,00,22,00,23,00,24,00,1D,22,40,03,87,C0,02,82,02,04,00,06,40,03,03,40,14,02,C0,02,07,00,02,06,40,02,35,37,34,2C,37,26,72,02,2A,29,00,27,3E,0E,00,38,1B,26,33,2A,71,02,34,00,87,82,40,41,40,01 ]


     2  REM [HEX:\
CA,05,88,CA,05,88,CA,05,\
88,CA,05,88,CA,05,88,07,\
84,05,40,03,85,88,05,40,\
03,85,88,05,40,03,85,88,\
05,40,03,85,88,05,40,03,\
85,88,05,85,05,40,03,85,\
88,05,40,03,85,88,05,40,\
03,85,88,05,40,03,85,88,\
05,40,03,85,88,05,85,05,\
40,03,85,88,05,40,03,85,\
88,05,40,03,85,88,05,40,\
03,85,88,05,40,03,85,88,\
05,85,05,40,03,85,88,05,\
40,03,85,88,05,40,03,85,\
88,05,40,03,85,88,05,40,\
03,85,88,05,85,05,40,03,\
85,88,05,40,03,85,88,05,\
40,03,85,88,05,40,03,85,\
88,05,40,03,85,88,05,85,\
C9,05,88,C9,05,88,C9,05,\
88,C9,05,88,C9,05,88,05,\
85,CA,04,C8,1A,82,81,40,\
03,80,C9,16,B5,B1,A6,BE,\
AA,B7,CA,03,80,CA,1C,3C,\
26,71,02,2A,39,8D,40,05,\
85,40,16,27,2A,39,8D,40,\
05,85,40,13,C9,03,80,C9,\
1C,40,03,80,CA,14,A8,B7,\
B4,BA,B5,AE,AA,B7,43,04,\
40,1A,07,84,8F,C8,03,8F,\
00,C8,05,00,C8,05,00,C8,\
05,00,C8,05,00,05,85,C8,\
05,00,C8,05,00,C8,05,00,\
C8,05,00,C8,05,00,05,85,\
C8,05,00,C8,05,00,C8,05,\
00,C8,05,00,C8,05,00,05,\
85,C8,05,00,C8,05,00,C8,\
05,00,C8,05,00,C8,05,00,\
05,85,C8,05,00,C8,05,00,\
C8,05,00,C8,05,00,C8,05,\
00,05,85,C8,05,00,C8,05,\
00,C8,05,00,C8,05,00,C8,\
05,00,05,85,8F,C8,03,8F,\
00,C8,05,00,C8,05,00,C8,\
05,00,C8,05,00,82,81,40,\
40,40,01 ]

     3  REM [HEX:\
C8,08,40,02,0E,16,40,02,\
87,C9,03,04,40,02,16,0E,\
00,C8,0F,40,03,0E,40,03,\
85,1B,0B,1B,05,40,03,0E,\
40,02,C8,0D,0E,16,00,16,\
0E,40,02,81,80,0A,11,00,\
07,04,40,02,0E,16,00,16,\
C8,0C,0E,40,03,0E,00,85,\
88,02,8A,16,06,00,85,40,\
02,0E,40,03,C8,0B,00,0E,\
40,03,0E,00,81,88,04,88,\
89,18,87,00,05,00,0E,40,\
03,0E,C8,09,40,02,0E,40,\
03,0E,85,88,87,05,88,32,\
00,85,05,02,04,0E,40,03,\
0E,C8,09,00,09,0E,40,03,\
87,89,8A,81,05,88,3B,00,\
85,80,04,86,40,02,5A,02,\
0E,C8,08,00,49,02,0E,16,\
00,87,03,C4,02,80,10,88,\
0E,00,11,80,84,03,86,00,\
D8,03,00,C8,06,C9,1B,C8,\
03,40,FF,40,E0,40,01 ]

     4 LET SC=VAL "16516"
     5 LET SD=VAL "16577"
     6 LET FV=VAL "16417"
     7 LET FD=VAL "16616"
     8 LET M$="     "
     9 GOSUB 9100
    10 RAND 
    15 DIM P(5)
    20 DIM D(5)
    30 DIM A$(4,3)
    40 LET A$(1)="CLB"
    50 LET A$(2)="SPD"
    60 LET A$(3)="DMD"
    70 LET A$(4)="HRT"
    73 LET D$="winner«"
    74 LET F$="loser«"
    75 LET G$="draw«"
    76 LET I$="push«"
    77 LET J$="µµµµµ³"
    78 LET K$="º   °"
    79 LET L$="´´´´´³"
    81 LET N$="   "
    82 LET W=1000
    84 LET CD=0
    86 LET YD=VAL "320"
    87 LET CC=VAL "16727"
    88 LET FC=VAL "16655"
    90 CLS 
    91 IF W<2 THEN GOTO 9900
    92 IF W>9999 THEN GOTO 9970
   100 PRINT AT 0,0;"SHUFFLING",,
   
#   110 DIM C(13,4)
#   120 FOR I=1 TO 4
#   130 FOR N=1 TO 13
#   140 PRINT ".";
#   150 LET C(N,I)=N
#   160 NEXT N
#   170 NEXT I

# 13 VALUES*4 COLORS*P

   110 DIM O$(2*52*P)
#   112 LET L=1
#   115 FOR R=1 TO P
## C(1)=COLOR *52*P= "C$=CHR$ I"
## C(2)=VALUE *52*P= "C$=CHR$ N"
#   117 PRINT "DESK ";R
#   120  FOR N=1 TO 13 
#   130   FOR I=1 TO 4
#   140   LET O$(L TO)=CHR$ N+CHR$ I
#   155   LET L=L+2
#   160   NEXT I
#   170  NEXT N
#   175 NEXT R

    130 PRINT ,,P;" DESK";"S" AND P>1;" OF CARDS"
    140 POKE FV,P+SIN PI+SIN PI
    150 LET O$(1)=CHR$ USR FD

   180 LET L=52*P
   190 RAND USR SD
   191 PRINT USR SC,VAL "3"
   194 IF W<1 THEN GOTO 9900
   195 IF W>9999 THEN GOTO 9970
   196 LET Y1=0
   197 LET Y2=Y1
   198 LET P1=0
   199 LET P2=P1
   200 PRINT AT 10,0;"WALLET:$";M$;AT 10,8;W
   204 DIM P(5)
   208 DIM D(5)
   210 PRINT AT 11,0;"BET ?";M$;M$
   220 INPUT B
   221 IF B/2=INT (B/2) THEN GOTO 224
   222 PRINT AT 11,0;"EVEN BETS ONLY"
   223 GOTO 270
   225 LET V=0
   226 LET E=V
   227 LET S=V
   228 LET T=V
   229 LET U=V
   230 LET B=INT B
   240 IF B<=W AND B<501 AND B>0 THEN GOTO 330
   250 IF B>W THEN GOTO 300
   260 PRINT AT 11,0;"max500min1"
   270 GOSUB 1300
   290 GOTO 210
   300 PRINT AT 11,0;"$LOW FUNDS$"
   310 GOTO 270

   320 PRINT AT 8,0;Y;" ";TAB 4;("ˆblackjackˆ" AND Y=21)
   322 RETURN
   324 PRINT AT 13,0;Z;" ";TAB 4;("ˆblackjackˆ" AND Z=21)
   325 RETURN

   330 RAND USR SD
   340 PRINT USR SC,VAL "2"
   350 PRINT AT 10,7;M$;AT 10,7;W-B;AT 11,7;M$;AT 11,7;B
   360 LET W=W-B
   364 LET Q=0
   368 LET B1=Q
   370 LET B2=Q
   375 LET A=1
   380 LET J=1
   390 GOSUB 7000
   400 LET F=CD
   410 LET E$=A$(S)
   420 IF CD>9 THEN LET P(1)=10
   430 IF CD>1 AND CD<=9 THEN LET P(1)=CD
   440 IF CD=1 THEN LET P(1)=11
   455 GOSUB 9096
   460 GOSUB 2000
   462 IF U AND Y=1 THEN LET Y=11
   464 IF U AND Y=11 THEN LET P(1)=11
   465 GOSUB YD
   470 LET J=7
   480 GOSUB 7000
   490 IF NOT U THEN LET M=CD
   500 IF CD>9 THEN LET P(2)=10
   510 IF CD>1 AND CD<=9 THEN LET P(2)=CD
   520 IF CD=1 THEN LET P(2)=11
   535 GOSUB 9096
   540 IF Y>21 THEN LET P(1)=1
   541 GOSUB 9096
   542 GOSUB 2000
   545 GOSUB YD
   547 IF U>0 THEN GOTO 715
   550 LET A=16
   560 LET J=0
   570 GOSUB 7000
   575 LET H=S
   576 LET G=T
   580 IF CD>9 THEN LET D(1)=10
   590 IF CD>1 AND CD<=9 THEN LET D(1)=CD
   591 IF CD=1 THEN LET D(1)=11
   595 LET CD=0

   610 PRINT AT A-1,J;CHR$ USR CC

   620 LET J=7
   630 GOSUB 7000
   640 IF CD>9 THEN LET D(2)=10
   650 IF CD>1 AND CD<=9 THEN LET D(2)=CD
   660 IF CD=1 THEN LET D(2)=11
   665 GOSUB 9092
   670 IF Z>21 AND D(1)=11 THEN LET D(1)=1
   685 GOSUB 9092
   690 GOSUB 2000
   692 PRINT AT 13,0;N$;AT 13,0;D(2);TAB 4;("ˆblackjackˆ" AND D(2)=21)
   697 IF U=1 THEN GOTO 715
   700 IF F=M THEN GOSUB 8000
   705 IF U=0 THEN GOSUB 9000
   710 IF U=1 THEN GOTO 460
   715 IF U=0 THEN LET BC=B
   716 IF U=1 THEN LET BC=B1
   717 IF U=2 THEN LET BC=B2

   718 IF W>B+BC THEN PRINT AT 10,13;"HIT,STAY OR DOUBLE?";TAB 14;M$;"H/S/D";M$;N$
   719 IF W<B+BC THEN PRINT AT 10,13;" HIT OR STAY? H/S"
   
   720 GOSUB 8300
   730 PRINT AT 10,13;M$;M$;M$;N$;" ";TAB 13;M$;M$;M$;N$;" "
   740 IF H$="S" THEN GOTO 3000
   750 IF H$="H" THEN GOTO 770
   755 IF H$="D" THEN GOTO 765
   760 GOTO 718
   765 IF W>B+BC THEN GOTO 770
   767 GOTO 715
   770 LET A=1
   771 LET J=13
   772 IF H$<>"D" THEN GOTO 787
   774 LET W=W-BC
   776 LET B=B+BC
   780 IF U=2 THEN LET B2=B2+B2
   785 IF U=1 THEN LET B1=B1+B1
   787 PRINT AT 10,7;M$;AT 10,7;W;TAB 7;B
   789 IF U<>0 THEN PRINT AT 10,13;"BET1 $";B1;" BET2 $";B2
   790 GOSUB 7000
   800 IF CD>9 THEN LET P(3)=10
   810 IF CD>1 AND CD<=9 THEN LET P(3)=CD
   820 IF CD=1 THEN LET P(3)=11
   825 GOSUB 9096
   830 FOR I=1 TO 3
   840 IF Y>21 AND P(I)=11 THEN LET P(I)=1
   850 GOSUB 9096
   855 NEXT I
   860 GOSUB 2000
   870 IF Y>21 THEN GOTO 3000
   880 PRINT AT 8,4;"´´´´´´´´´"
   882 GOSUB YD
   885 IF H$="D" THEN GOTO 3000
   890 PRINT AT 10,14;"HIT OR STAY? H/S"
   900 GOSUB 8300
   910 PRINT AT 10,14;M$;M$;M$;" "
   920 IF H$="S" THEN GOTO 3000
   930 IF H$="H" THEN GOTO 950
   940 GOTO 890
   950 LET J=19
   960 GOSUB 7000
   970 IF CD>9 THEN LET P(4)=10
   980 IF CD>1 AND CD<=9 THEN LET P(4)=CD
   990 IF CD=1 THEN LET P(4)=11
   995 GOSUB 9096
  1000 FOR I=1 TO 4
  1010 IF Y>21 AND P(I)=11 THEN LET P(I)=1
  1020 GOSUB 9096
  1030 NEXT I
  1040 GOSUB 2000
  1050 IF Y>21 THEN GOTO 3000
  1060 GOSUB YD
  1070 PRINT AT 10,14;"HIT OR STAY? H/S"
  1080 GOSUB 8300
  1090 PRINT AT 10,14;M$;M$;M$;" "
  1100 IF H$="S" THEN GOTO 3000
  1110 IF H$="H" THEN GOTO 1130
  1120 GOTO 1070
  1130 LET J=25
  1140 GOSUB 7000
  1150 IF CD>9 THEN LET P(5)=10
  1160 IF CD<=9 THEN LET P(5)=CD
  1170 FOR I=1 TO 4
  1180 IF P(I)=11 THEN LET P(I)=1
  1190 NEXT I
  1195 GOSUB 9096

  1200 GOSUB 2000
  1201 IF Y>21 AND P(5)=11 THEN LET P(5)=1
  1202 GOSUB 9096
  1205 IF U=1 THEN LET P1=P(5)
  1207 IF U=2 THEN LET P2=P(5)
  1210 IF Y>21 THEN GOTO 3000
  1220 GOSUB YD
  1230 GOTO 3000
  1300 FOR I=1 TO 50
  1310 NEXT I
  1320 RETURN 


  2000 PRINT AT A-1,J-1;CHR$ USR FC
  2005 GOSUB 5000+(CD*100)
  2010 LET CD=0
  2020 RETURN
 

  3000 GOSUB 9096
  3005 GOSUB YD
  
   3006 PRINT AT 8,4;"’bust’" AND Y>21;"´´´´´´´´´´´" AND Y<>21
 # was 3006 PRINT AT 8,4;"’bust’" AND Y>21;"´´´´´´´´´"
 
  3007 IF U THEN PRINT AT 10,13;M$;M$;M$;N$;" "
  3008 IF U=1 THEN GOSUB 8160
  3010 IF U=2 THEN GOSUB 8260
  3012 GOSUB 9800

  3014 IF Z>16 THEN GOTO 4510
  3015 LET J=13
  3016 IF Y>21 THEN GOTO 4515
  3017 IF Y1>21 AND Y2>21 THEN GOTO 4800
  3020 GOSUB 7000
  3030 IF CD>9 THEN LET D(3)=10
  3040 IF CD<=9 THEN LET D(3)=CD
  3050 IF CD=1 THEN LET D(3)=11
  3055 GOSUB 9092
  3060 FOR I=1 TO 3
  3070 IF Z>21 AND D(I)=11 THEN LET D(I)=1
  3080 GOSUB 9092
  3085 NEXT I
  3090 GOSUB 2000
  3095 GOSUB YD+PI
  3100 IF Z>21 THEN GOTO 4500
  3110 IF Z>16 THEN GOTO 4510
  3120 LET J=19
  3130 GOSUB 7000
  3140 IF CD>9 THEN LET D(4)=10
  3150 IF CD<=9 THEN LET D(4)=CD
  3160 IF CD=1 THEN LET D(4)=11
  3165 GOSUB 9092
  3170 FOR I=1 TO 4
  3180 IF Z>21 AND D(I)=11 THEN LET D(I)=1
  3190 GOSUB 9092
  3200 NEXT I
  3210 GOSUB 2000
  3220 GOSUB YD+PI
  3230 IF Z>21 THEN GOTO 4500
  3240 IF Z>16 THEN GOTO 4510
  3250 LET J=25
  3260 GOSUB 7000
  3270 IF CD>9 THEN LET D(5)=10
  3280 IF CD<=9 THEN LET D(5)=CD
  3290 IF CD=1 THEN LET D(5)=11
  3295 GOSUB 9092
  3300 FOR I=1 TO 5
  3310 IF Z>21 AND D(I)=11 THEN LET D(I)=1
  3320 GOSUB 9092
  3330 NEXT I
  3350 GOSUB 2000
  3360 GOSUB YD+PI
  3370 IF Z>21 THEN GOTO 4500
  3380 GOTO 4510
  4500 PRINT AT 13,0;Z;TAB 4;"’bust’"
  4510 GOSUB 9092
  4515 LET K=0
  4516 IF Y1>0 THEN GOTO 4800
  4530 IF Y>Z AND Y<22 THEN LET K=1
  4540 IF Z>21 AND Y<22 THEN LET K=1
  4550 IF Z=Y AND Y<22 THEN LET K=3
  4554 IF Z<22 AND Y<22 AND P(5)>0 THEN LET K=1
  4556 IF Y=21 AND Z<>21 THEN LET K=2
  4560 IF K=1 THEN LET W=W+B+B
  4565 IF K=2 THEN LET W=INT (W+B+(B*(O/X)))
  4570 IF K=3 THEN LET W=W+B
  4580 IF K=1 OR K=2 THEN PRINT AT 3,0;"««";D$;D$;D$;D$;"««"
  4590 IF K=3 THEN PRINT AT 3,0;"«";G$;I$;G$;I$;G$;I$;"«"
  4600 IF NOT K THEN PRINT AT 3,0;"««";F$;F$;F$;F$;F$
  4610 GOSUB 1300
  4630 GOTO 4910
  4800 LET K1=0
  4801 LET K2=0
  4804 IF Y1>Z AND Y1<22 THEN LET K1=1
  4805 IF Y2>Z AND Y2<22 THEN LET K2=1
  4810 IF Z>21 AND Y1<22 THEN LET K1=1
  4815 IF Z>21 AND Y2<22 THEN LET K2=1
  4820 IF Z=Y1 AND Y1<22 THEN LET K1=3
  4825 IF Z=Y2 AND Y2<22 THEN LET K2=3
  4830 IF Z<22 AND Y1<22 AND P1>0 THEN LET K1=1
  4835 IF Z<22 AND Y2<22 AND P2>0 THEN LET K2=1
  4837 IF Y1=21 AND Z<>21 THEN LET K1=2
  4838 IF Y2=21 AND Z<>21 THEN LET K2=2
  4840 IF K1=1 THEN LET W=W+B1+B1
  4845 IF K2=1 THEN LET W=W+B2+B2
  4847 IF K1=2 THEN LET W=INT (W+(B1*(O/X)))
  4848 IF K2=2 THEN LET W=INT (W+(B2*(O/X)))
  4850 IF K1=3 THEN LET W=W+B1
  4855 IF K2=3 THEN LET W=W+B2
  4860 IF K1=1 OR K1=2 THEN PRINT AT 3,0;"«««hand˜«";D$;D$;D$;"««"
  4865 IF K2=1 OR K2=2 THEN PRINT AT 5,0;"«««hand™«";D$;D$;D$;"««"
  4870 IF K1=3 THEN PRINT AT 3,0;"«hand˜«";I$;G$;I$;G$;I$
  4875 IF K2=3 THEN PRINT AT 3,0;"«hand™«";I$;G$;I$;G$;I$
  4880 IF NOT K1 THEN PRINT AT 3,0;"«hand˜«";F$;F$;F$;F$;"«"
  4885 IF NOT K2 THEN PRINT AT 5,0;"«hand™«";F$;F$;F$;F$;"«"
  4890 GOSUB 1300

  4910 GOTO 90+(100 AND L>((P*52)*.25))

 # 5000 
 # 5040 RETURN 

  5100 PRINT AT A,J;"²¸¹";TAB J;"º °";TAB J;"¼¸¯";TAB J;"º °";TAB J;A$(S)
  5170 RETURN 
  5200 PRINT AT A,J;" 2";TAB J,TAB J;" 2";TAB J,TAB J;A$(S)
  5270 RETURN 
  5300 PRINT AT A,J;" 3";TAB J;" 3";TAB J;" 3";TAB J,TAB J;A$(S)
  5370 RETURN 
  5400 PRINT AT A,J;"4 4";TAB J,TAB J;"4 4";TAB J,TAB J;A$(S)
  5470 RETURN 
  5500 PRINT AT A,J;"5 5";TAB J;" 5";TAB J;"5 5";TAB J,TAB J;A$(S)
  5570 RETURN 
  5600 PRINT AT A,J;"6 6";TAB J;"6 6";TAB J;"6 6";TAB J,TAB J;A$(S)
  5670 RETURN 
  5700 PRINT AT A,J;"7 7";TAB J;" 7";TAB J;"7 7";TAB J;"7 7";TAB J;A$(S)
  5770 RETURN 
  5800 PRINT AT A,J;"8 8";TAB J;"8 8";TAB J;"8 8";TAB J;"8 8";TAB J;A$(S)
  5870 RETURN 
  5900 PRINT AT A,J;"9 9";TAB J;"9 9";TAB J;"999";TAB J;"9 9";TAB J;A$(S)
  5970 RETURN 
  6000 PRINT AT A,J;"TEN";TAB J;" ˜";TAB J;" —";TAB J;"TEN";TAB J;A$(S)
  6070 RETURN 
  6100 PRINT AT A,J;"·¯¸";TAB J;" °";TAB J;" °";TAB J;"±»";TAB J;A$(S)
  6170 RETURN 
  6200 PRINT AT A,J;"²¸¹";TAB J;"º °";TAB J;"º²°";TAB J;"·®±";TAB J;A$(S)
  6270 RETURN 
  6300 PRINT AT A,J;"º »";TAB J;"ª»";TAB J;"¼±";TAB J;"º ±";TAB J;A$(S)
  6370 RETURN 

  
#  7000 LET T=INT ((RND*13*P)+1)
#  7100 LET S=INT (RND*4+1)
#  7500 IF C(T,S)=0 THEN GOTO 7000


# ALL 'C(T,S)'='CD'='T'='card value'
# 

  7000 LET C=((INT(RND*L)+1)*2)-1
  7100 LET T=CODE O$(C)
  7200 LET S=CODE O$(C+1)
  7400 IF C=(L*2)-1 THEN GOTO 7500

#  7410 LET O$(C)=O$((L*2)-1)
#  7420 LET O$(C+1)=O$(L*2)

  7410 LET O$(C TO C+1)=O$((L*2)-1)+O$(L*2)
  7500 LET CD=T
  7540 LET L=L-1
  7550 PRINT AT 14,10;"CARDS LEFT:";L;" "
  7600 RETURN 


  8000 IF W<B+B AND NOT U THEN RETURN 
  8005 IF U=2 THEN RETURN 
  8006 GOSUB 9000
  8010 PRINT AT 7,8;"splitŠ Y OR N"
  8012 GOSUB 8300
  8014 LET Q$=H$
  8015 IF Q$="Y" THEN GOTO 8050
  8020 IF Q$="N" THEN RETURN 
  8030 GOTO 8010
  8040 RETURN 

  8050 LET U=1
  8056 LET A=1
  8058 PRINT AT 7,8;"³³³³³³³³³³³³³"
  8060 PRINT AT 5,0;"hand˜"
  8070 GOSUB 8400
  8080 LET B1=B
  8090 LET B2=B
  8100 PRINT AT 11,13;"BET1 $";B1;" BET2 $";B2
  8110 LET W=W-B1
  8120 LET B=B+B
  8130 PRINT AT 10,7;M$;AT 10,7;W;AT 11,7;M$;AT 11,7;B
  8142 IF F=1 THEN LET P(1)=11
  8150 RETURN 

  8160 LET Y1=Y
  8162 GOSUB 1300
  8166 PRINT AT 8,0;N$
  8170 LET U=2
  8180 FOR I=2 TO 5
  8190 LET P(I)=0
  8200 NEXT I
  8210 LET CD=M
  8215 PRINT AT 5,0;"hand™"
  8220 LET A=1
  8230 LET J=1
  8235 GOSUB 8400
  8240 PRINT AT 10,14;"hand˜ SUM:";Y1
  8250 GOTO 470

  8260 LET Y2=Y
  8262 GOSUB 1300
  8270 PRINT AT 10,14;"hand™ SUM:";Y2
  8280 RETURN 

  8300 IF INKEY$<>"" THEN GOTO 8300
  8310 IF INKEY$="" THEN GOTO 8310
  8320 LET H$=INKEY$
  8330 RETURN 
  8400 PRINT AT 0,6;J$;J$;J$;J$
  8410 FOR I=1 TO 5
  8420 PRINT TAB 6;K$;"³";K$;"³";K$;"³";K$
  8430 NEXT I
  8440 PRINT TAB 6;L$;L$;L$;L$
  8450 RETURN 

  
  9000 IF Y=21 AND Z=21 THEN GOSUB 9800
  9001 IF Y<>21 AND D(2)=11 AND W>=B/2 THEN GOTO 9019
  9002 IF Y=21 AND Z<>21 THEN LET K=2
  9003 IF Z=21 AND Y<>21 THEN LET K=0
  9004 IF Z<>21 AND Y<>21 THEN RETURN 
  9005 GOSUB 9800
  9006 GOTO 4560

  9019 PRINT AT 7,8;"insuranceŠ Y/N"
  9020 GOSUB 8300
  9022 LET Q$=H$
  9030 PRINT AT 7,8;"³³³³³³³³³³³³³³"

 # 9030 IF Q$="Y" THEN GOTO 9070
 # 9040 IF Q$="N" THEN GOTO 9081
 # 9060 GOTO 9010

 9040 GOTO 9010+(60 AND Q$="Y")+(71 AND Q$="N")

  9070 IF Z=21 THEN LET W=W+(B/2)
  9075 IF Z<>21 THEN LET W=W-(B/2)
  9076 PRINT AT 10,7;M$;AT 10,7;W
  9078 IF Z=21 THEN PRINT AT 13,0;N$;AT 13,0;Z;TAB 4;"ins–«won"
  9080 IF Z<>21 THEN PRINT AT 13,0;N$;AT 13,0;Z;TAB 4;"ins–«lost"
  9081 IF Z=21 THEN GOSUB 9800
  9082 IF Z=21 THEN GOTO 4515
  9090 GOTO 9002
  9092 LET Z=D(1)+D(2)+D(3)+D(4)+D(5)
  9094 RETURN 
  9096 LET Y=P(1)+P(2)+P(3)+P(4)+P(5)
  9098 RETURN 
  9100 PRINT USR SC,VAL "1"
  9200 LET P=1
  9300 GOSUB 8300
  9400 LET Q$=H$
  9410 IF Q$>"0" AND Q$<"4" THEN GOTO 9430
  9415 IF Q$>"9" AND Q$<"J" THEN GOSUB 9460

  9420 GOTO 9300
  9430 LET O=(2 AND Q$="1")+(3 AND Q$="2")+(6 AND Q$="3")
  9440 LET X=(1 AND Q$="1")+(2 AND Q$="2")+(5 AND Q$="3")
  9445 LET P=P+(7 AND P=9)
  9450 RETURN 
  9460 PRINT AT 20,5;M$;M$;M$;M$
  9470 LET P=CODE Q$-37
  9480 PRINT AT 20,5+(P*2);"¸"
  9490 RETURN
  9500 SAVE "BLACKJACKZ8021"
  9505 GOSUB 1300
  9510 RUN 

  9800 LET A=16
  9810 LET J=1
  9820 LET CD=G
  9830 LET S=H
  9840 LET T=G
  9850 GOSUB 2000
  9860 GOSUB YD+PI
  9870 RETURN 

  9900 PRINT AT 10,0;"WALLET EMPTY",
  9910 PRINT ,,,"PLAY AGAIN? Y/N"
  9920 GOSUB 8300

#  9930 IF H$="Y" THEN RUN
#  9950 IF H$="N" THEN GOTO 9999
#  9960 GOTO 9920

9930 RUN (9999 AND NOT H$="Y")

  9970 PRINT AT 10,0;"YOU BEAT THE HOUSE WINNING";TAB 12;"$";W
  9990 GOTO 9910
  9999 PRINT ,,"THANKS FOR PLAYING"
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: Z80-21 Yet Another "BlackJack"

Post by XavSnap »

Hi sanello,
blackjack2.JPG

Code: Select all

   360 LET W=W-B

Code: Select all

   718 IF W>B+BC THEN PRINT AT 10,13;"HIT,STAY OR DOUBLE?";TAB 14;M$;"H/S/D";M$;N$
   719 IF W<B+BC THEN PRINT AT 10,13;" HIT OR STAY? H/S"
This test is wrong.
The test must be tested on the full wallet: full walet is W+B !
(WALLET+BET)

If U=0 BC=B
"718 IF W>B+BC THEN" = "718 IF W>2*B THEN"

But W=W-B at the start.
It become : "718 IF W+B>?=?B+BC THEN" or "718 IF W>=BC THEN" to test the double bet.
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
sanello
Posts: 100
Joined: Sat Jul 23, 2022 9:26 pm

Re: Z80-21 Yet Another "BlackJack"

Post by sanello »

General question about programming and not specifically this game

4910 GOTO 90+(100 AND L>((P*52)*.25))

The AND is really confusing me. If I understand it correctly, would the following be the same thing albeit longer?

4910 IF L>((P*52)*.25) THEN GOTO 190
4911 IF L<((P*52)*.25) THEN GOTO 90
-sanello
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: Z80-21 Yet Another "BlackJack"

Post by XavSnap »

Yes sanello,
4910 IF L>((P*52)*.25) THEN GOTO 190
4911 IF L<=((P*52)*.25) THEN GOTO 90
=85 memory bytes used.
(Speed down= 2 conditions to read)
4910 GOTO 90+(100 AND L>((P*52)*.25))
=53 memory bytes used.
(Speed up= 1 condition to read, and no line return in the ROM)

32 bytes preserved in a single line...

true=1
false=0

LET L=1
PRINT L=1
1

LET L=0
PRINT L=1
0


Example:
IF L=1 THEN GOTO 1001
IF L=0 THEN GOTO 1000

equal
L=1
GOTO 1000+ L AND L=1
GOTO 1000+true
GOTO 100+1
GOTO 1001

L=0
GOTO 1000+ L AND L=1
GOTO 1000+false
GOTO 100+0
GOTO 1000

AND = "*" operator

GOTO 1000+ L * L=1
L=1
GOTO 1000+ L * true
GOTO 1000+L*1
GOTO 1000+1*1
GOTO 1000+1

L=0
GOTO 1000+ L * false
GOTO 1000+L*0
GOTO 1000+1*0
GOTO 1000+0

viewtopic.php?p=47764#p47764
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
1024MAK
Posts: 5102
Joined: Mon Sep 26, 2011 10:56 am
Location: Looking forward to summer in Somerset, UK...

Re: Z80-21 Yet Another "BlackJack"

Post by 1024MAK »

ZX81 AND logical operator
ZX81 AND logical operator
ZX81 AND logical operator
Mark
ZX81 Variations
ZX81 Chip Pin-outs
ZX81 Video Transistor Buffer Amp

:!: Standby alert :!:
There are four lights!
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb :!:
Looking forward to summer later in the year.
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: Z80-21 Yet Another "BlackJack"

Post by XavSnap »

HI,
Sanello, in case of insurance, you display the dealer score, but dont show the the card.
It only showed in case of Blackjack.
:shock:

Example:
AS+?
insurance
Z=17 (displayed)
Card hidden, but 17-11 = 6

Show me your stupid card ?!?!?
:?:
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
Post Reply