home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
010.lzh
/
bckgmn
< prev
next >
Wrap
Text File
|
1986-11-10
|
30KB
|
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