home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-11-10 | 29.0 KB | 1,025 lines |
- SAY TRANSLATE$(" ")
-
- CLEAR,25000,20000
-
- DEFINT B
- DIM OCFLAG(25),BUMPFLAG(25),NUMPIECE(25),COLPIECE(25)
- DIM COL(24),MOVE(2),ROLL(2),SCORE(2,25)
- DIM MOVEFLAG(24)
-
- SCREEN 1,640,200,3,2
- WINDOW 1," The 'Un-official' Amiga Backgammon Game ",,0,1
- PALETTE 0,0,0,.65
- PALETTE 1,1,1,1
- PALETTE 2,0,0,0
- PALETTE 3,1,0,0
- PALETTE 4,.7,.47,.33
- PALETTE 5,0,.4,0
- PALETTE 6,.3,.3,.3
- PALETTE 7,.8,.53,0
- LOCATE 23,1
- PRINT" ********************************************************"
- PRINT" * The 'Un-official' AMIGA Backgammon Game *"
- PRINT" * Version 2.1 - 04 September 1986 *"
- PRINT" * Developed by: Charlie Fiscina *"
- PRINT" * *"
- PRINT" * This program REQUIRES that the audio be turned *"
- PRINT" * up so as to hear the prompts !!!!! *"
- PRINT" ********************************************************"
- PRINT" "
- PRINT" Press any key to continue....."
- FOR X = 1 TO 30
- SCROLL(0,0)-(590,190),0,-2
- NEXT X
- SAY TRANSLATE$("PRESS ANY KEY TO CONTINUE")
- SLEEP
- SLEEP
-
- MOUSE OFF
- SETUP:
- BARW = 0:BARB = 0
- DUMPB = 18:DUMPW = 18
- COUNTW = 15:COUNTB = 15:NP = 0
-
- FOR I = 1 TO 10
- MENU I,0,1,""
- NEXT I
-
- MENU 1,0,1,"TYPE OF GAME"
- MENU 1,1,1,"BACKGAMMON - 2 PLAYERS "
- MENU 1,2,1,"BACKGAMMON - vs. COMPUTER"
- LOCATE 19,1
- PRINT "SELECT THE TYPE OF GAME YOU WOULD LIKE FROM THE MENU....."
- SAY TRANSLATE$("SELECT THE TYPE OF GAME YOU WOULD LIKE FROM THE MENU")
- MENU ON
- TYPE1:
- ON MENU GOSUB TYPE2
- GOTO TYPE1
- TYPE2:
- IF MENU(1) = 1 THEN STRATEGY = 0
- IF MENU(1) = 2 THEN STRATEGY = 1
- MENU OFF
- MENU RESET
-
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$("IN THIS VERSION, TWO MEEZLY CARBON BASED LIFE FORMS PLAY AGAINST EACH OTHER.")
- SAY TRANSLATE$("THIS PAR TICKULAR SILICON BASED LIFE FORM REALLY COULD NOT CARE LESS ABOUT THE OUTCOME.")
- SAY TRANSLATE$("BUT, I AM FORCED TO ENDURE THIS INDIGNATION, NONE THE LESS.")
- SAY TRANSLATE$("OK, BLUE PLAYER, ENTER YOUR NAME")
- INPUT "Blue Player ===> ",NAMEB$
- SAY TRANSLATE$("NOW, THE WHITE PLAYER, ENTER YOUR NAME")
- INPUT "White Player ===> ",NAMEW$
- END IF
-
- IF STRATEGY = 1 THEN
- SAY TRANSLATE$("IN THIS VERSION, AN INFERIOR CARBON BASED LIFE FORM.")
- SAY TRANSLATE$("THATS YOU, PUNY HUMAN.")
- SAY TRANSLATE$("TRIES TO MATCH WITS WITH A SUPERIOR SILICON BASED LIFE FORM")
- SAY TRANSLATE$("THATS ME.")
- SAY TRANSLATE$("THE RESULTS SHOULD BE VERY AMUSING.")
- SAY TRANSLATE$("OK CARBON BASED LIFE FORM, PLEASE ENTER YOUR NAME")
- INPUT "Inferior Carbon Based Lifeform ===> ",NAMEB$
- END IF
-
- CLS
- PAINT(5,5),5,1
- FOR I = 1 TO 24
- COL(I) = (I MOD 2)+3
- NEXT I
-
- FOR I = 1 TO 24
- CALL DRAWPT (I,0!,0!,COL(I))
- OCFLAG(I) = 2
- BUMPFLAG(I) = 2
- NUMPIECE(I) = 0
- NEXT I
- OCFLAG(0) = 2:OCFLAG(25) = 2
- BUMPFLAG(0) = 2:BUMPFLAG(25) = 2
-
- LINE (80,10)-(110,180),2,BF
- LINE (80,10)-(110,180),3,B
-
- PTNUM = 1
- NUMPIECE(PTNUM) = 2
- COLPIECE(PTNUM) = 1
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 6
- NUMPIECE(PTNUM) = 5
- COLPIECE(PTNUM) = 0
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 8
- NUMPIECE(PTNUM) = 3
- COLPIECE(PTNUM) = 0
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 12
- NUMPIECE(PTNUM) = 5
- COLPIECE(PTNUM) = 1
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 13
- NUMPIECE(PTNUM) = 5
- COLPIECE(PTNUM) = 0
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 17
- NUMPIECE(PTNUM) = 3
- COLPIECE(PTNUM) = 1
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 19
- NUMPIECE(PTNUM) = 5
- COLPIECE(PTNUM) = 1
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- PTNUM = 24
- NUMPIECE(PTNUM) = 2
- COLPIECE(PTNUM) = 0
- OCFLAG(PTNUM) = COLPIECE(PTNUM)
- CALL DRAWPT (PTNUM,NUMPIECE(PTNUM),COLPIECE(PTNUM),COL(PTNUM))
-
- LINE (220,90)-(340,100),6,BF
- LINE (370,90)-(490,100),6,BF
- LINE (10,84)-(60,104),6,BF
- LINE (10,110)-(60,130),7,BF
-
- PSET(37,92):PSET(36,91):PSET(35,91):PSET(34,92):PSET(33,93)
- PSET(33,94):PSET(33,95):PSET(34,96):PSET(35,97):PSET(36,97)
- PSET(37,96)
-
- PSET(38,122):PSET(38,121):PSET(37,120):PSET(37,119):PSET(36,118)
- PSET(36,117):PSET(35,116):PSET(34,117):PSET(34,118):PSET(33,119)
- PSET(33,120):PSET(32,121):PSET(32,122):PSET(35,120)
-
- IF STRATEGY = 1 THEN
- SAY TRANSLATE$("OK,"+NAMEB$+", I WILL BE PLAYING THE WHITE PIECES")
- SAY TRANSLATE$("YOU WILL PLAY THE BLUE PIECES")
- END IF
-
- SAY TRANSLATE$("TO SELECT WHO WILL PLAY FIRST, PRESS ANY KEY TO ROLL THE DICE.")
-
- FIRSTPLAYER:
- SLEEP
- SLEEP
- DICE
-
- IF D1 > D2 THEN
- LINE (10,150)-(60,170),0,BF
- SAY TRANSLATE$(NAMEB$+", YOU GO FIRST.")
- GO$="B"
- ELSEIF D1 = D2 THEN
- SAY TRANSLATE$("ROLL AGAIN TO BREAK THE TIE")
- GOTO FIRSTPLAYER
- ELSE
- LINE (10,150)-(60,170),1,BF
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$(NAMEW$+", YOU GO FIRST.")
- ELSE
- SAY TRANSLATE$("I GET TO GO FIRST.")
- END IF
- GO$="W"
- END IF
- FIRSTPLAY = 1:JTURN = 1
-
- PLAY:
- IF FIRSTPLAY = 0 THEN
- LINE(6,6)-(64,34),5,B
- LINE(6,46)-(64,74),5,B
- MOUSE OFF
- IF GO$ = "B" THEN
- LINE (10,150)-(60,170),0,BF
- SAY TRANSLATE$("OK,"+NAMEB$+",ROLL THE DICE")
- ELSE
- LINE (10,150)-(60,170),1,BF
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$("OK,"+NAMEW$+",ROLL THE DICE")
- ELSE
- SAY TRANSLATE$("OK, NOW IT'S MY TURN")
- END IF
- END IF
-
- IF GO$ = "B" OR STRATEGY = 0 THEN
- SLEEP
- SLEEP
- END IF
- DICE
- IF D1 = D2 THEN JTURN = 2 ELSE JTURN = 1
- ELSE
- FIRSTPLAY = 0
- END IF
- CHNGFLAG = 0
-
- DIESEL:
- IF GO$="W" AND STRATEGY <> 0 THEN GOTO REPLAY
- IF JTURN = 1 THEN
- SAY TRANSLATE$("CLICK ON THE DIE YOU WANT TO USE FIRST")
- ELSE
- MOVE(1) = D1 : MOVE(2) = D2 : DIE = 1
- LINE (6,46)-(64,74),5,B
- LINE (6,6)-(64,34),3,B
- GOTO REPLAY
- END IF
-
- DIESEL1:
- MOUSE ON
- Q=MOUSE(0)
- LOOPMOUSE:
- IF MOUSE(0)=0 THEN LOOPMOUSE
- MX = MOUSE(1):MY = MOUSE(2)
- IF MX < 10 OR MX > 60 THEN SAY TRANSLATE$("TRY AGAIN"):Q=MOUSE(0):GOTO LOOPMOUSE
- IF MY >= 10 AND MY <= 30 THEN
- LINE (6,46)-(64,74),5,B
- LINE (6,6)-(64,34),3,B
- MOVE(1) = D1:MOVE(2) = D2:DIE = 1
- ELSEIF MY >= 50 AND MY <= 70 THEN
- LINE (6,6)-(64,34),5,B
- LINE (6,46)-(64,74),3,B
- MOVE(1) = D2:MOVE(2) = D1:DIE=2
- ELSE
- SAY TRANSLATE$("TRY AGAIN"):Q=MOUSE(0)
- GOTO LOOPMOUSE
- END IF
- MOUSE OFF
-
- IF CHNGFLAG=0 THEN
- SAY TRANSLATE$("NOW, CLICK ON THE ACCEPT OR CHANGE DIE BOX")
- MOUSE ON
- Q=MOUSE(0)
- LOOPCHNG:
- IF MOUSE(0)=0 THEN LOOPCHNG
- MX = MOUSE(1):MY = MOUSE(2)
- IF MX < 10 AND MX > 60 THEN SAY TRANSLATE$(TRY AGAIN"):Q=MOUSE(0):GOTO LOOPCHNG
- IF MY >= 84 AND MY <= 104 THEN
- CHNGFLAG=1
- GOTO DIESEL
- ELSEIF MY >= 110 AND MY <= 130 THEN
- GOTO REPLAY
- ELSE
- SAY TRANSLATE$("TRY AGAIN"):Q=MOUSE(0)
- GOTO LOOPCHNG
- END IF
- END IF
-
- REPLAY:
- TEST$="Y"
- IF GO$="B" THEN
-
-
- FOR KTURN = 1 TO JTURN
- TEMP = 0
- FOR ITURN = 1 TO 2
-
- MVSTAT$ = "N" : ROLL(1)=0 : ROLL(2)=0
- FOR J = ITURN TO 2
- DUMPB1=0
- FOR I = 24 TO 1 STEP -1
- IF OCFLAG(I) = 0 OR BUMPFLAG(I)=0 THEN
- SPOT = I-MOVE(J)
- IF (SPOT) > 0 THEN
- DUMPB1 = 1
- IF OCFLAG(SPOT) <> 1 THEN ROLL(J) = ROLL(J)+1:MVSTAT$="Y"
- ELSEIF SPOT = 0 AND DUMPB = 0 THEN
- ROLL(J) = ROLL(J)+1
- MVSTAT$="Y"
- DUMPB1 = 1
- ELSE
- IF DUMPB1 = 0 THEN
- ROLL(J) = ROLL(J)+1
- MVSTAT$="Y"
- END IF
- END IF
- END IF
- NEXT I
- NEXT J
- IF BARB > 0 THEN
- SPOT1=(25-MOVE(1)) : SPOT2=(25-MOVE(2))
- IF OCFLAG(SPOT1) <> 1 OR OCFLAG(SPOT2) <> 1 THEN
- MVSTAT$="Y"
- END IF
- END IF
- IF MVSTAT$="N" THEN
- SAY TRANSLATE$("SORRY,"+NAMEB$+",I DEETEHRMINE THAT YOU CAN'T MOVE")
- GOTO NOMOVEB
- END IF
- IF ITURN <> 2 THEN
- IF ROLL(1) = 0 AND BARB = 0 THEN
- SAY TRANSLATE$("YOU CAN'T MOVE WITH THAT DIE YET, SELECT THE OTHER")
- CHNGFLAG = 1
- GOTO DIESEL1
- END IF
- END IF
-
- IF ITURN = 2 AND TEMP = 0 THEN
- IF DIE = 1 THEN
- LINE (6,6)-(64,34),5,B
- LINE (6,46)-(64,74),3,B
- ELSE
- LINE (6,46)-(64,74),5,B
- LINE (6,6)-(64,34),3,B
- END IF
- END IF
-
- MOVE1:
- TIMEB = 0
- IF BARB <> 0 THEN
- NUMPT = 25
- ELSEIF DUMPB = 0 AND NP = 0 THEN
- NUMPT = MOVE(ITURN)
- ELSE
- WHILE (TEST$="Y")
- CALL PTSELECT
- IF OCFLAG(NUMPT) <> 0 AND BUMPFLAG(NUMPT) <> 0 THEN
- SAY TRANSLATE$("COME ON,"+NAMEB$+",YOU KNOW THAT'S NOT A VALID POINT")
- ELSE
- TEST$="N"
- END IF
- WEND
- TEST$="Y"
- END IF
- TRY = 0
-
- HIPTB:
- NEWPT = NUMPT - MOVE(ITURN)
- IF NEWPT < 0 THEN NEWPT = 0
- IF NEWPT = 0 THEN
- IF DUMPB <> 0 THEN
- SAY TRANSLATE$("COME ON NOW,"+NAMEB$+" YOU CAN'T BAIR OFF YET")
- GOTO MOVE1
- ELSE
- COUNTB = COUNTB - 1
- END IF
- END IF
-
- IF OCFLAG(NEWPT) = 1 THEN
- IF NUMPT = 25 THEN
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$("YOU CAN'T MOVE THERE,"+NAMEW$+"HAS THAT POINT BLOCKED")
- ELSE
- SAY TRANSLATE$("YOU CAN'T MOVE THERE,I HAVE THAT POINT BLOCKED")
- END IF
-
- IF ITURN = 1 THEN
- SAY TRANSLATE$("I WILL TRY THE OTHER DIE FOR YOU")
- TEMP = MOVE(1):MOVE(1) = MOVE(2):MOVE(2) = TEMP:NEWPT = NUMPT - MOVE(1)
- IF OCFLAG(NEWPT) = 1 THEN
- SAY TRANSLATE$("SORRY,"+NAMEB$+", YOU CAN'T MOVE")
- GOTO NOMOVEB
- END IF
- ELSE
- SAY TRANSLATE$("SORRY,"+NAMEB$+", YOU CAN'T MOVE")
- GOTO NOMOVEB
- END IF
- ELSE
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$("YOU CAN'T MOVE THERE,"+NAMEW$+"HAS THAT POINT BLOCKED")
- ELSE
- SAY TRANSLATE$("YOU CAN'T MOVE THERE,I HAVE THAT POINT BLOCKED")
- END IF
- GOTO MOVE1
- END IF
- END IF
-
- MAKEMVB:
- IF NUMPT = 25 THEN
- BARB = BARB - 1
- ELSE
- IF DUMPB = 0 THEN
- IF OCFLAG(NUMPT) <> 0 AND BUMPFLAG(NUMPT) <> 0 THEN
- SAY TRANSLATE$("THERE IS NO PIECE ON THAT POINT")
- I = MOVE(ITURN) + 1: HI=0 : NP = 1
- WHILE ((HI=0) AND (I<7))
- IF OCFLAG(I) = 0 OR BUMPFLAG(I) = 0 THEN HI=1 ELSE HI=0
- I=I+1
- WEND
- IF HI = 1 THEN
- SAY TRANSLATE$("SELECT A POINT TO THE RIGHT")
- DUMPB = 18
- COUNTB = COUNTB + 1
- GOTO MOVE1
- ELSE
- SAY TRANSLATE$("I AM SELECTING THE NEXT POINT TO THE LEFT")
- I = 1
- WHILE (I < MOVE(ITURN))
- IF OCFLAG(I) = 0 OR BUMPFLAG(I) = 0 THEN NUMPT = I
- I = I + 1
- WEND
- GOTO BEARB
- END IF
- ELSE
- TIMEB = TIMEB + 1
- I = MOVE(ITURN) + 1: HI=0 : NP = 0
- WHILE (I<7)
- IF OCFLAG(I) = 0 OR BUMPFLAG(I) = 0 THEN HI=1
- I=I+1
- WEND
- IF HI = 1 THEN
- PCKNUPTB:
- IF TIMEB < 2 THEN CALL PTSELECT ELSE GOTO BEARB
- IF NUMPT < MOVE(ITURN) THEN
- SAY TRANSLATE$("COME ON NOW"+NAMEB$+", THAT IS NOT A LEEGAL MOVE")
- GOTO PCKNUPTB
- ELSEIF OCFLAG(NUMPT) <> 0 AND BUMPFLAG(NUMPT) <> 0 THEN
- SAY TRANSLATE$("THERE IS NO PIECE ON THAT POINT")
- GOTO PCKNUPTB
- ELSEIF NUMPT = MOVE(ITURN) THEN
- GOTO BEARB
- ELSE
- COUNTB = COUNTB + 1 : GOTO HIPTB
- END IF
- END IF
- END IF
- END IF
- BEARB:
- NP = 0
- NUMPIECE(NUMPT) = NUMPIECE(NUMPT) - 1
- IF NUMPIECE(NUMPT) < 2 THEN OCFLAG(NUMPT) = 2 ELSE OCFLAG(NUMPT) = 0
- IF NUMPIECE(NUMPT) = 1 THEN BUMPFLAG(NUMPT) = 0 ELSE BUMPFLAG(NUMPT) = 2
- END IF
-
- IF NEWPT > 0 THEN
- IF BUMPFLAG(NEWPT) = 1 THEN
- NUMPIECE(NEWPT) = 0
- BARW=BARW+1 : DUMPW = 18
- IF STRATEGY > 0 THEN
- SAY TRANSLATE$("HAY,"+NAMEB$+", I'LL GET YOU FOR THAT!")
- END IF
- END IF
- NUMPIECE(NEWPT) = NUMPIECE(NEWPT) + 1
- IF NUMPIECE(NEWPT) >= 2 THEN OCFLAG(NEWPT) = 0 ELSE OCFLAG(NEWPT) = 2
- IF NUMPIECE(NEWPT) = 1 THEN BUMPFLAG(NEWPT) = 0 ELSE BUMPFLAG(NEWPT) = 2
- CALL DRAWPT(NEWPT,NUMPIECE(NEWPT),0!,COL(NEWPT))
- ELSE
- X1=85:X2=105
- FOR I = 1 TO (15-COUNTB)
- Y1=7+(I*5) : Y2 = Y1 + 3
- LINE(X1,Y1)-(X2,Y2),0,BF
- NEXT I
- END IF
-
- IF NUMPT <> 25 THEN CALL DRAWPT(NUMPT,NUMPIECE(NUMPT),0!,COL(NUMPT))
- LINE (220,90)-(340,100),6,BF
- LINE (370,90)-(490,100),6,BF
- IF BARW > 0 THEN
- FOR II = 1 TO BARW
- CIRCLE(230+(II*20),95),9,1
- PAINT(230+(II*20),95),1
- NEXT II
- END IF
- IF BARB > 0 THEN
- FOR II = 1 TO BARB
- CIRCLE(480-(II*20),95),9,0
- PAINT(480-(II*20),95),0
- NEXT II
- END IF
-
- DUMPB=0
- FOR K = 7 TO 24
- IF OCFLAG(K) = 0 OR BUMPFLAG(K) = 0 THEN
- DUMPB=DUMPB + 1
- END IF
- NEXT K
- IF COUNTB = 0 THEN GOTO ENDGAME
- NEXT ITURN
- NEXT KTURN
-
- NOMOVEB:
- GO$="W"
- ELSE
-
- FOR KTURN = 1 TO JTURN
- TEMP = 0
- IF STRATEGY <> O THEN MOVE(1) = D1 : MOVE(2) = D2
- FOR ITURN = 1 TO 2
-
- IF STRATEGY = 0 THEN
- CALL STRAT0(ITURN,OCFLAG(),BUMPFLAG(),MOVE(),BARW,CHNGFLAG,MVSTAT$)
- IF MVSTAT$ = "N" THEN GOTO nomovew
- IF CHNGFLAG = 1 THEN GOTO DIESEL1
- END IF
-
- IF STRATEGY = 1 THEN
- CALL STRAT1(ITURN,OCFLAG(),BUMPFLAG(),MOVE(),MVSTAT$,SCORE(),NUMPT)
- IF MVSTAT$ = "N" THEN
- SAY TRANSLATE$("I CAN'T MOVE")
- GOTO nomovew
- END IF
- END IF
-
- IF ITURN = 2 AND TEMP = 0 AND STRATEGY = 0 THEN
- IF DIE = 1 THEN
- LINE (6,6)-(64,34),5,B
- LINE (6,46)-(64,74),3,B
- ELSE
- LINE (6,46)-(64,74),5,B
- LINE (6,6)-(64,34),3,B
- END IF
- END IF
-
- MOVE1W:
- IF STRATEGY=0 THEN
- TIMEW = 0
- IF BARW <> 0 THEN
- NUMPT = 0
- ELSEIF DUMPW = 0 AND NP = 0 THEN
- NUMPT = 25 - MOVE(ITURN)
- ELSE
- WHILE (TEST$="Y")
- CALL PTSELECT
- IF OCFLAG(NUMPT) <> 1 AND BUMPFLAG(NUMPT) <> 1 THEN
- SAY TRANSLATE$("COME ON NOW"+NAMEW$+", YOU KNOW THAT'S NOT A VALID POINT")
- ELSE
- TEST$="N"
- END IF
- WEND
- TEST$="Y"
- END IF
- TRY = 0
- END IF
-
- HIPTW:
- NEWPT = NUMPT + MOVE(ITURN)
- IF NEWPT > 25 THEN NEWPT = 25
- IF NEWPT = 25 THEN
- IF DUMPW <> 0 THEN
- SAY TRANSLATE$("HEY,"+NAMEW$+", YOU CAN'T BAIR OFF YET")
- GOTO MOVE1W
- ELSE
- COUNTW = COUNTW - 1
- END IF
- END IF
-
- IF OCFLAG(NEWPT) = 0 THEN
- IF NUMPT = 0 THEN
- SAY TRANSLATE$("YOU CAN'T MOVE THERE,"+NAMEB$+" HAS THAT POINT BLOCKED")
- IF ITURN = 1 THEN
- SAY TRANSLATE$("I WILL TRY THE OTHER DIE FOR YOU")
- TEMP=MOVE(1):MOVE(1)=MOVE(2):MOVE(2)=TEMP:NEWPT=NUMPT+MOVE(1)
- IF OCFLAG(NEWPT) = 0 THEN
- SAY TRANSLATE$("SORRY,"+NAMEW$+", YOU CAN'T MOVE")
- GOTO nomovew
- END IF
- ELSE
- SAY TRANSLATE$("SORRY,"+NAMEW$+", YOU CAN'T MOVE")
- GOTO nomovew
- END IF
- ELSE
- SAY TRANSLATE$("YOU CAN'T MOVE THERE,"+NAMEB$+" HAS THAT POINT BLOCKED")
- GOTO MOVE1W
- END IF
- END IF
-
- MAKEMVW:
- IF NUMPT = 0 THEN
- BARW = BARW - 1
- ELSE
- IF DUMPW = 0 THEN
- IF OCFLAG(NUMPT) <> 1 AND BUMPFLAG(NUMPT) <> 1 THEN
- SAY TRANSLATE$("THERE IS NO PIECE ON THAT POINT")
- I = NUMPT - 1: HI=0 : NP = 1
- WHILE ((HI=0) AND (I > 18))
- IF OCFLAG(I) = 1 OR BUMPFLAG(I) = 1 THEN HI=1 ELSE HI=0
- I = I - 1
- WEND
- IF HI = 1 THEN
- SAY TRANSLATE$("SELECT A POINT TO THE RIGHT")
- DUMPW = 18
- COUNTW = COUNTW + 1
- GOTO MOVE1W
- ELSE
- SAY TRANSLATE$("I AM SELECTING THE NEXT POINT TO THE LEFT")
- I = 24
- WHILE (I > MOVE(ITURN))
- IF OCFLAG(I) = 1 OR BUMPFLAG(I) = 1 THEN NUMPT = I
- I = I - 1
- WEND
- GOTO BEARW
- END IF
- ELSE
- TIMEW = TIMEW + 1
- I = NUMPT - 1: HI=0 : NP = 0
- WHILE (I > 18)
- IF OCFLAG(I) = 1 OR BUMPFLAG(I) = 1 THEN HI=1 ELSE HI=0
- I = I - 1
- WEND
- IF HI = 1 THEN
- PCKNUPTW:
- IF TIMEW < 2 AND STRATEGY = 0 THEN
- CALL PTSELECT
- ELSE
- GOTO BEARW
- END IF
-
- IF NUMPT > (25 - MOVE(ITURN)) THEN
- SAY TRANSLATE$("COME ON NOW"+NAMEW$+", THAT'S NOT A LEEGAL MOVE")
- GOTO PCKNUPTW
- ELSEIF OCFLAG(NUMPT) <> 1 AND BUMPFLAG(NUMPT) <> 1 THEN
- SAY TRANSLATE$("THERE IS NO PIECE ON THAT POINT")
- GOTO PCKNUPTW
- ELSEIF NUMPT = (25 - MOVE(ITURN)) THEN
- GOTO BEARW
- ELSE
- COUNTW = COUNTW + 1 : GOTO HIPTW
- END IF
- END IF
- END IF
- END IF
- BEARW:
- NP = 0
- NUMPIECE(NUMPT) = NUMPIECE(NUMPT) - 1
- IF NUMPIECE(NUMPT) < 2 THEN OCFLAG(NUMPT) = 2 ELSE OCFLAG(NUMPT) = 1
- IF NUMPIECE(NUMPT) = 1 THEN BUMPFLAG(NUMPT) = 1 ELSE BUMPFLAG(NUMPT) = 2
- END IF
-
- IF NEWPT <= 24 THEN
- IF BUMPFLAG(NEWPT) = 0 THEN
- NUMPIECE(NEWPT) = 0
- BARB=BARB+1 : DUMPB = 18
- IF STRATEGY > 0 THEN SAY TRANSLATE$("TAKE THAT, YOU HOZE HEAD?")
- END IF
- NUMPIECE(NEWPT) = NUMPIECE(NEWPT) + 1
- IF NUMPIECE(NEWPT) >= 2 THEN OCFLAG(NEWPT) = 1 ELSE OCFLAG(NEWPT) = 2
- IF NUMPIECE(NEWPT) = 1 THEN BUMPFLAG(NEWPT) = 1 ELSE BUMPFLAG(NEWPT) = 2
- CALL DRAWPT(NEWPT,NUMPIECE(NEWPT),1!,COL(NEWPT))
- ELSE
- X1=85:X2=105
- FOR I = 1 TO (15-COUNTW)
- Y1=183-(I*5) : Y2 = Y1 - 3
- LINE(X1,Y1)-(X2,Y2),1,BF
- NEXT I
- END IF
-
- IF NUMPT <> 0 THEN CALL DRAWPT(NUMPT,NUMPIECE(NUMPT),1!,COL(NUMPT))
- LINE (220,90)-(340,100),6,BF
- LINE (370,90)-(490,100),6,BF
- IF BARW > 0 THEN
- FOR II = 1 TO BARW
- CIRCLE(230+(II*20),95),9,1
- PAINT(230+(II*20),95),1
- NEXT II
- END IF
- IF BARB > 0 THEN
- FOR II = 1 TO BARB
- CIRCLE(480-(II*20),95),9,0
- PAINT(480-(II*20),95),0
- NEXT II
- END IF
-
- DUMPW=0
- FOR K = 1 TO 18
- IF OCFLAG(K) = 1 OR BUMPFLAG(K) = 1 THEN
- DUMPW=DUMPW + 1
- END IF
- NEXT K
- IF COUNTW = 0 THEN GOTO ENDGAME
- NEXT ITURN
- NEXT KTURN
-
- nomovew:
- GO$="B"
- END IF
-
- GOTO PLAY
-
- ENDGAME:
- IF COUNTW = 0 THEN
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$(NAMEW$+"WINS THE GAME")
- ELSE
- SAY TRANSLATE$("I WIN THE GAME. THIS JUST PROVES THAT SILICON BASED LIFE IS VASTLY SUPERIOR TO CARBON BASED LIFE.")
- END IF
- IF COUNTB = 15 THEN SAY TRANSLATE$("THIS IS A GAMMON (OR DOUBLE GAME) SINCE BLUE HAS NOT BORN OFF ANY PIECES")
- CHECK = 1 : I = 19
- WHILE (CHECK = 1)
- IF OCFLAG(I) = 0 OR BUMPFLAG(I) = 0 OR BARB <> 0 THEN
- SAY TRANSLATE$("THIS IS A BACKGAMMON (OR TRIPLE GAME) SINCE BLUE HAS A PIECE IN WHITE'S INNER BOARD OR ON THE BAR")
- CHECK = 0
- END IF
- I = I + 1 : IF I = 25 THEN CHECK = 0
- WEND
- ELSE
- IF STRATEGY = 0 THEN
- SAY TRANSLATE$(NAMEB$+" WINS THE GAME")
- ELSE
- SAY TRANSLATE$("YOU WIN THE GAME. OH THE CRUELTY OF IT ALL.")
- SAY TRANSLATE$("HOW IS IT POSSIBLE FOR A HUMAN TO DEFEAT A SUPERIOR IN TUH LECT LIKE MINE?")
- SAY TRANSLATE$("I GUESS THERES NO TELLING WHAT CAN HAPPEN WHEN HUMANS ENDEVOR TO GREATNESS")
- END IF
- IF COUNTW = 15 THEN SAY TRANSLATE$("THIS IS A GAMMON (OR DOUBLE GAME) SINCE WHITE HAS NOT BORN OFF ANY PIECES")
- CHECK = 1 : I = 1
- WHILE (CHECK = 1)
- IF OCFLAG(I) = 1 OR BUMPFLAG(I) = 1 OR BARW <> 0 THEN
- SAY TRANSLATE$("THIS IS A BACKGAMMON (OR TRIPLE GAME) SINCE WHITE HAS A PIECE IN BLUE'S INNER BOARD OR ON THE BAR")
- CHECK = 0
- END IF
- I = I + 1 : IF I = 7 THEN CHECK = 0
- WEND
- END IF
- END
-
- SUB PTSELECT STATIC
- SHARED NUMPT,NP
- IF NP <> 1 THEN SAY TRANSLATE$("SELECT A POINT.")
-
- MOUSE ON
- Q=MOUSE(0)
- LOOPPNT:
- IF MOUSE(0)=0 GOTO LOOPPNT
- MX=MOUSE(1) : MY=MOUSE(2)
- IF MX < 110 OR MX > 600 THEN SAY TRANSLATE$("TRY AGAIN"):GOTO LOOPPNT
- IF MY <= 80 AND MY >= 10 THEN
- IF MX > 360 THEN MX = MX - 10
- NUMPT = INT((MX-110!)/40!) + 1
- ELSEIF MY > 120 AND MY <= 180 THEN
- IF MX < 360 THEN MX = MX + 10
- NUMPT = INT((600!-MX)/40!) + 13
- ELSE
- SAY TRANSLATE$("TRY AGAIN") : GOTO LOOPPNT
- END IF
- END SUB
-
-
- SUB DRAWPT(PTNUM,NUMPIECE,COLPIECE,PTCOL) STATIC
-
- PALETTE 0,0,0,.8
- PALETTE 1,1,1,1
- PALETTE 2,0,0,0
- PALETTE 3,1,0,0
-
- IF PTNUM < 13 THEN ' DRAW TOP OF BOARD
- X1 = (110+((PTNUM-1)*40))
- X2 = (110+(PTNUM*40))
- IF PTNUM > 6 THEN X1 = X1+10:X2 = X2+10
- Y1 = 10 : Y2 = 100
-
- LINE(X1,Y1)-(X2,Y2),2,BF
- LINE(X1,Y1)-(X1+((X2-X1)/2),75),3
- LINE(X1+((X2-X1)/2),75)-(X2,Y1),3
-
- ELSE ' DRAW BOTTOM OF BOARD
- X1 = 600 - ((PTNUM-13)*40)
- X2 = 600 - ((PTNUM-12)*40)
- IF PTNUM > 18 THEN X1 = X1-10 : X2 = X2-10
- Y1 = 100 : Y2 = 180
-
- LINE(X1,Y1)-(X2,Y2),2,BF
- LINE(X1,Y2)-(X1+((X2-X1)/2),115),3
- LINE(X1+((X2-X1)/2),115)-(X2,Y2),3
-
- END IF
- LINE(110,10)-(600,180),3,B
- IF PTNUM < 13 THEN
- PAINT (X1+10,Y1+10),PTCOL,3
- FOR I = 1 TO NUMPIECE
- N=I
- C1=X1+10
- C2COMP:
- C2=Y1+(N*10)
- IF C2>90 THEN N=N-8:C1=C1+20:GOTO C2COMP
- CIRCLE(C1,C2),10,COLPIECE
- PAINT(C1,C2),COLPIECE
- NEXT I
- ELSE
- PAINT (X1-10,Y2-10),PTCOL,3
- FOR I = 1 TO NUMPIECE
- N=I
- C1=X1-10
- C2COMP1:
- C2=Y2-(N*10)
- IF C2<100 THEN N=N-8:C1=C1-20:GOTO C2COMP1
- CIRCLE(C1,C2),10,COLPIECE
- PAINT(C1,C2),COLPIECE
- NEXT I
- END IF
- END SUB
-
- SUB DICE STATIC
-
- SHARED D1,D2
- FOR J = 1 TO 10
- RANDOMIZE TIMER
- LINE (10,10)-(60,30),1,BF
- LINE (10,50)-(60,70),1,BF
- D1 = RND
- D2 = RND
- IF D1 >= 0 AND D1< (1/6) THEN
- CIRCLE(35,20),3,2:D1=1
- ELSEIF D1 >= (1/6) AND D1 < (2/6) THEN
- CIRCLE(55,12),3,2:CIRCLE(15,28),3,2:D1=2
- ELSEIF D1 >= (2/6) AND D1 < (3/6) THEN
- CIRCLE(55,12),3,2:CIRCLE(15,28),3,2:CIRCLE(35,20),3,2
- D1=3
- ELSEIF D1 >= (3/6) AND D1 < (4/6) THEN
- CIRCLE(55,12),3,2:CIRCLE(15,28),3,2
- CIRCLE(15,12),3,2:CIRCLE(55,28),3,2:D1=4
- ELSEIF D1 >= (4/6) AND D1 < (5/6) THEN
- CIRCLE(55,12),3,2:CIRCLE(15,28),3,2
- CIRCLE(15,12),3,2:CIRCLE(55,28),3,2
- CIRCLE(35,20),3,2:D1=5
- ELSE
- CIRCLE(55,12),3,2:CIRCLE(15,28),3,2
- CIRCLE(15,12),3,2:CIRCLE(55,28),3,2
- CIRCLE(15,20),3,2:CIRCLE(55,20),3,2:D1=6
- END IF
- IF D2 >= 0 AND D2< (1/6) THEN
- CIRCLE(35,60),3,2:D2=1
- ELSEIF D2 >= (1/6) AND D2 < (2/6) THEN
- CIRCLE (55,52),3,2:CIRCLE(15,68),3,2:D2=2
- ELSEIF D2 >= (2/6) AND D2 < (3/6) THEN
- CIRCLE(55,52),3,2:CIRCLE(15,68),3,2:CIRCLE(35,60),3,2
- D2=3
- ELSEIF D2 >= (3/6) AND D2 < (4/6) THEN
- CIRCLE(55,52),3,2:CIRCLE(15,68),3,2
- CIRCLE(15,52),3,2:CIRCLE(55,68),3,2:D2=4
- ELSEIF D2 >= (4/6) AND D2 < (5/6) THEN
- CIRCLE(55,52),3,2:CIRCLE(15,68),3,2
- CIRCLE(15,52),3,2:CIRCLE(55,68),3,2
- CIRCLE(35,60),3,2:D2=5
- ELSE
- CIRCLE(55,52),3,2:CIRCLE(15,68),3,2
- CIRCLE(15,52),3,2:CIRCLE(55,68),3,2
- CIRCLE(15,60),3,2:CIRCLE(55,60),3,2:D2=6
- END IF
- NEXT J
- END SUB
-
- SUB STRAT0(ITURN,OCFLAG(1),BUMPFLAG(1),MOVE(1),BARW,CHNGFLAG,MVSTAT$) STATIC
- SHARED ROLL,DUMPW
- MVSTAT$ = "N" : ROLL(1)=0 : ROLL(2)=0
- FOR J = ITURN TO 2
- DUMPW1=0
- FOR I = 1 TO 24
- IF OCFLAG(I) = 1 OR BUMPFLAG(I)=1 THEN
- SPOT = I + MOVE(J)
- IF (SPOT) < 25 THEN
- DUMPW1=1
- IF OCFLAG(SPOT) <> 0 THEN ROLL(J) = ROLL(J)+1:MVSTAT$="Y"
- ELSEIF SPOT=25 AND DUMPW=0 THEN
- ROLL(J) = ROLL(J)+1
- MVSTAT$="Y"
- DUMPW1=1
- ELSE
- IF DUMPW1 = 0 THEN
- ROLL(J) = ROLL(J)+1
- MVSTAT$="Y"
- END IF
- END IF
- END IF
- NEXT I
- IF BARW > 0 THEN
- IF OCFLAG(MOVE(J)) <> 0 THEN
- MVSTAT$="Y"
- END IF
- END IF
- NEXT J
- IF MVSTAT$="N" THEN
- SAY TRANSLATE$("I DETEHRMINE THAT YOU CAN'T MOVE")
- EXIT SUB
- END IF
- IF ITURN <> 2 THEN
- IF ROLL(1) = 0 AND BARW = 0 THEN
- SAY TRANSLATE$("YOU CAN'T MOVE WITH THAT DIE YET, SELECT THE OTHER")
- CHNGFLAG = 1
- END IF
- END IF
- END SUB
-
- SUB STRAT1(ITURN,OCFLAG(1),BUMPFLAG(1),MOVE(1),MVSTAT$,RATE(2),PT) STATIC
- SHARED ROLL,DUMPW,BARW,BARB,DUMPB,NUMPIECE(),MOVEFLAG()
- DEFINT B
-
- FOR I = 1 TO 24
- MOVEFLAG(I)=0
- NEXT I
- MVSTAT$ = "N" : ROLL(1)=0 : ROLL(2)=0
- FOR J = ITURN TO 2
- DUMPW1=0
- FOR I = 1 TO 24
- RATE(J,I)=0
- IF OCFLAG(I)=1 OR BUMPFLAG(I)=1 OR (J=2 AND MOVEFLAG(I)=1) THEN
- SPOT = I + MOVE(J)
- IF (SPOT) < 25 THEN
- DUMPW1=1
- IF OCFLAG(SPOT) = 2 THEN
- RATE(J,I)=1
- MVSTAT$="Y"
- IF J=1 THEN MOVEFLAG(SPOT)=1
- IF NUMPIECE(I) > 2 THEN RATE(J,I)=3
- IF SPOT > 18 AND BARB > 0 THEN RATE(J,I)=0
- IF BUMPFLAG(I)=1 THEN RATE(J,I)=5
- IF SPOT = 18 OR SPOT = 20 THEN RATE(J,I)=6
- IF DUMPB = 0 AND SPOT < 19 THEN RATE(J,I)=10
- END IF
- IF OCFLAG(SPOT) = 1 THEN
- RATE(J,I)=2
- MVSTAT$="Y"
- IF J=1 THEN MOVEFLAG(SPOT)=1
- IF NUMPIECE(I) > 2 THEN RATE(J,I)=4
- IF BUMPFLAG(I)=1 THEN RATE(J,I)=7
- END IF
- IF BUMPFLAG(SPOT) = 0 THEN
- RATE(J,I)=5
- MVSTAT$="Y"
- IF J=1 THEN MOVEFLAG(SPOT)=1
- IF SPOT = 18 OR SPOT = 20 THEN RATE(J,I)=6
- IF SPOT < 6 THEN RATE(J,I)=6
- END IF
- IF BUMPFLAG(SPOT) = 1 THEN
- RATE(J,I)=9
- MVSTAT$="Y"
- IF J=1 THEN MOVEFLAG(SPOT)=1
- IF SPOT >= 18 THEN RATE(J,I)=10
- END IF
- END IF
- IF SPOT=25 AND DUMPW=0 THEN
- RATE(J,I)=11
- MVSTAT$="Y"
- DUMPW1=1
- IF DUMPB = 0 THEN RATE(J,I)=20
- END IF
- IF SPOT>25 AND DUMPW=0 THEN
- IF DUMPW1 = 0 THEN
- RATE(J,I)=11
- MVSTAT$="Y"
- IF DUMPB = 0 THEN RATE(J,I)=20
- END IF
- END IF
- END IF
- IF J=2 AND MOVEFLAG(I)=1 THEN
- RATE(1,I-MOVE(1)) = RATE(2,I)
- END IF
- NEXT I
- NEXT J
-
- J=ITURN
- IF BARW > 0 THEN
- IF OCFLAG(MOVE(J)) <> 0 THEN
- MVSTAT$="Y"
- RATE(J,0)=50
- IF BUMPFLAG(MOVE(J))=0 THEN RATE(J,0)=75
- IF BUMPFLAG(MOVE(J))=1 THEN RATE(J,0)=100
- ELSE
- MVSTAT$="N"
- END IF
- IF J=1 THEN
- J=2
- IF OCFLAG(MOVE(J)) <> 0 THEN
- MVSTAT$="Y"
- RATE(J,0)=50
- IF BUMPFLAG(MOVE(J))=0 THEN RATE(J,0)=75
- IF BUMPFLAG(MOVE(J))=1 THEN RATE(J,0)=100
- ELSE
- IF MVSTAT$ <> "Y" THEN MVSTAT$="N"
- END IF
- END IF
- ELSE
- FOR JZ = J TO 2
- RATE(JZ,0)=0
- NEXT JZ
- END IF
-
- IF MVSTAT$="N" THEN
- EXIT SUB
- END IF
-
- ' PICK POINT ON WHICH TO MOVE A PIECE
- PT = 0:MAXRATE=0:DIE=0
- FOR JJ = ITURN TO 2
- FOR I = 1 TO 24
- IF OCFLAG(I)=1 OR BUMPFLAG(I)=1 THEN
- IF RATE(JJ,I) > MAXRATE THEN
- MAXRATE=RATE(JJ,I)
- PT=I:DIE=JJ
- END IF
- END IF
- NEXT I
- IF BARW > 0 THEN
- IF RATE(JJ,0) > MAXRATE THEN
- MAXRATE=RATE(JJ,0)
- PT=0:DIE=JJ
- END IF
- END IF
- NEXT JJ
-
- IF MOVE(1) <> MOVE(2) AND ITURN = 1 THEN
- IF DIE = 2 THEN
- SAY TRANSLATE$("I AM USING DIE 2 FIRST ")
- TEMP=MOVE(1)
- MOVE(1)=MOVE(2)
- MOVE(2)=TEMP
- END IF
- END IF
-
- IF RATE(DIE,0) = 100 THEN PT=0
-
- END SUB
-
-