%EXTERNALROUTINE BACKGAMMOM (%STRING(255) ST) %OWNINTEGER BBOFF,WBOFF,DICE1,DICE2,BARFL,BRDVAL,BSTVAL,COMPVAL %OWNINTEGER M1,M2,M3,M4,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,I,J,K,RUNNING %OWNINTEGER NOMOV,BARPT1,BARPT2,PT1,PT2,L,M,N,TEMP,BSTMOV1,BSTMOV2 %OWNINTEGER BSTPT1,BSTPT2,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10 %OWNINTEGER SECOND,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 %CONSTINTEGERARRAY ODDS(1:12)=35,38,44,47,47,53,18,21,15,12,6,9 %RECORDFORMAT F(%INTEGER WS,BS) %OWNRECORDARRAY BOARD(0:25)(F) %OWNINTEGER G,H,PT3,PT4,DICE3,DICE4,BSTPT3,BSTPT4,BARPT3,BARPT4 %INTEGERFN HOMEB %INTEGER NO,I NO=BBOFF %CYCLE I=1,1,6 NO=NO+BOARD(I)_BS %REPEAT %IF NO=15 %THENRESULT = 1 %ELSERESULT = 0 %END %ROUTINE DOBLACK %INTEGER PT,NO,M,D1,D2,D3,D4,TOT PROMPT ("Point:") %CYCLE READ(D1); READ(D2) %IF D1>6 %OR D2>6 %THEN PRINTSTRING("No way") %AND NEWLINE %ELSEEXIT %REPEAT %IF D1=D2 %THEN D3=D1 %AND D4=D2 %ELSE D3=0 %AND D4=0 PRINTSTRING("Your throw was") WRITE(D1,2); WRITE(D2,2) NEWLINE %IF BOARD(25)_BS>0 %THENSTART %IF BOARD(25-D1)_WS>1 %AND BOARD(25-D2)_WS>1 %C %THEN PRINTSTRING("You cannot move") %AND NEWLINE %ANDRETURN %IF BOARD(25)_BS#1 %THENSTART %IF D1#D2 %THENSTART %IF BOARD(25-D1)_WS>1 %THENSTART BOARD(25-D2)_BS=BOARD(25-D2)_BS+1 BOARD(25)_BS=BOARD(25)_BS-1 BOARD(25-D2)_WS=0 BOARD(0)_WS=BOARD(0)_WS+1 PRINTSTRING("I have made your move") NEWLINE %RETURN %FINISH %IF BOARD(25-D2)_WS>1 %THENSTART BOARD(25-D1)_BS=BOARD(25-D1)_BS+1 BOARD(25)_BS=BOARD(25)_BS-1 BOARD(25-D1)_WS=0 BOARD(0)_WS=BOARD(0)_WS+1 PRINTSTRING("I have made your move") NEWLINE %RETURN %FINISH %FINISH %FINISH %FINISH PRINTSTRING("Make your move"); NEWLINE %CYCLE M=1,1,4 AGN: TOT=D1+D2+D3+D4 %IF TOT=0 %THENRETURN READ(PT); %IF PT=100 %THENRETURN; READ(NO) %IF BOARD(PT)_BS=0 %THEN PRINTSTRING("No blacks on point") %C %AND NEWLINE %AND ->AGN %IF BOARD(25)_BS#0 %AND PT#25 %THEN %C PRINTSTRING("You have pieces on the bar") %AND NEWLINE %AND ->AGN %IF PT-NO<=0 %THENSTART %IF HOMEB=0 %THEN PRINTSTRING("Not all home") %AND %C NEWLINE %AND ->AGN; ->LEGMOV %FINISH %IF BOARD(PT-NO)_WS>1 %THEN PRINTSTRING("White has point") %C %AND NEWLINE %AND ->AGN LEGMOV: %IF NO=D1 %THEN D1=0 %ELSESTART %IF NO=D2 %THEN D2=0 %ELSESTART %IF NO=D3 %THEN D3=0 %ELSESTART %IF NO=D4 %THEN D4=0 %ELSESTART PRINTSTRING("Illegal move"); NEWLINE; ->AGN %FINISH %FINISH %FINISH %FINISH %IF PT-NO <=0 %THEN ->BBEARO BOARD(PT)_BS=BOARD(PT)_BS-1 BOARD(PT-NO)_BS=BOARD(PT-NO)_BS+1 %IF BOARD(PT-NO)_WS=1 %THEN BOARD(PT-NO)_WS=0 %C %AND BOARD(0)_WS=BOARD(0)_WS+1 ->SKP BBEARO: BBOFF=BBOFF+1 BOARD(PT)_BS=BOARD(PT)_BS-1 %IF BBOFF=15 %THENRETURN SKP: %REPEAT %END %ROUTINE INITIALIZE WBOFF=0 BBOFF=0 BOARD(1)_WS=2 BOARD(6)_BS=5 BOARD(8)_BS=3 BOARD(12)_WS=5 BOARD(13)_BS=5 BOARD(17)_WS=3 BOARD(19)_WS=5 BOARD(24)_BS=2 %END %ROUTINE PRINTSTATE %INTEGER I,J,K,M NEWLINES(2) PRINTSTRING(" 12 11 10 9 8 7 6 5 4 3 2 1") NEWLINE PRINTSTRING("___________________________________________________") %CYCLE I=0,1,6 NEWLINE SPACES(2) %CYCLE J=12,-1,1 %IF BOARD(J)_WS>I %THEN PRINTSYMBOL('W') %AND ->RPT %IF BOARD(J)_BS>I %THEN PRINTSYMBOL('B') %AND ->RPT SPACE RPT: %IF J=7 %THEN PRINTSTRING(" ** ") %ELSE SPACES(3) %REPEAT %REPEAT %CYCLE K=6,-1,0 NEWLINE SPACES(2) %CYCLE M=13,1,24 %IF BOARD(M)_WS>K %THEN PRINTSYMBOL('W') %AND ->RPT2 %IF BOARD(M)_BS>K %THEN PRINTSYMBOL('B') %AND ->RPT2 SPACE RPT2: %IF M=18 %THEN PRINTSTRING(" ** ") %ELSE SPACES(3) %REPEAT %REPEAT NEWLINE PRINTSTRING("____________________________________________________") NEWLINE PRINTSTRING(" 13 14 15 16 17 18 19 20 21 22 23 24") NEWLINE %IF BOARD(0)_WS>0 %THENSTART NEWLINE PRINTSTRING("There are") WRITE(BOARD(0)_WS,2) PRINTSTRING(" whites on the bar") %FINISH %IF BOARD(25)_BS>0 %THENSTART NEWLINE PRINTSTRING("there are") WRITE(BOARD(25)_BS,2) PRINTSTRING(" blacks on the bar") %FINISH %IF WBOFF>0 %THENSTART NEWLINE PRINTSTRING("white has born off") WRITE(WBOFF,3) %FINISH %IF BBOFF>0 %THENSTART NEWLINE PRINTSTRING("black has born off") WRITE(BBOFF,3) %FINISH NEWLINE %END %INTEGERFN BBAR %RESULT = BOARD(25)_BS %END %INTEGERFN WBAR %RESULT = BOARD(0)_WS %END %INTEGERFN BSIN %INTEGER I,J; J=0 %CYCLE I=1,1,25 %IF BOARD(I)_BS=1 %THEN J=J+1 %REPEAT %RESULT = J %END %INTEGERFN WSIN %INTEGER I,J; J=0 %CYCLE I=0,1,24 %IF BOARD(I)_WS=1 %THEN J=J+1 %REPEAT %RESULT = J %END %INTEGERFN BSINCL %INTEGER I,J,K,SUM; SUM=0 %CYCLE I=25,-1,1 %IF BOARD(I)_BS=1 %THENSTART %IF I-12<0 %THEN J=0 %ELSE J=I-12 %CYCLE K=I-1,-1,J %IF BOARD(K)_WS>0 %THEN SUM=SUM+ODDS(I-K) %REPEAT %FINISH %REPEAT %RESULT = SUM %END %INTEGERFN WSINCL %INTEGER I,J,K,SUM; SUM=0 %CYCLE I=0,1,24 %IF BOARD(I)_WS=1 %THENSTART %IF I+12>25 %THEN J=25 %ELSE J=I+12 %CYCLE K=I+1,1,J %IF BOARD(K)_BS>0 %THEN SUM=SUM+ODDS(K-I) %REPEAT %FINISH %REPEAT %RESULT = SUM %END %INTEGERFN WPTSHOME %INTEGER I,J; J=0 %CYCLE I=19,1,24 %IF BOARD(I)_WS>1 %THEN J=J+1 %REPEAT %RESULT = J %END %INTEGERFN BPTSHOME %INTEGER I,J; J=0 %CYCLE I=1,1,6 %IF BOARD(I)_BS>1 %THEN J=J+1 %REPEAT %RESULT = J %END %INTEGERFN WPTS %INTEGER I,J; J=0 %CYCLE I=1,1,24 %IF BOARD(I)_WS>1 %THEN J=J+1 %REPEAT %RESULT = J %END %INTEGERFN BPTS %INTEGER I,J;J=0 %CYCLE I=1,1,24 %IF BOARD(K)_BS>1 %THEN J=J+1 %REPEAT %RESULT = J %END %INTEGERFN WPTSSUCC %INTEGER I,J,K; K=0 %CYCLE J=1,1,22 %IF BOARD(J)_BS>0 %THENSTART %CYCLE I=J+1,1,23 %IF BOARD(I)_WS>1 %THENSTART %IF BOARD(I+1)_WS>1 %THEN K=K+1 %FINISH %REPEAT %EXIT %FINISH %REPEAT %RESULT = K %END %INTEGERFN BPTSSUCC %INTEGER I,J,K; K=0 %CYCLE J=24,-1,3 %IF BOARD(J)_WS>0 %THENSTART %CYCLE I=J-1,-1,2 %IF BOARD(I)_BS>1 %THENSTART %IF BOARD(I-1)_BS>1 %THEN K=K+1 %FINISH %REPEAT %EXIT %FINISH %REPEAT %RESULT = K %END %INTEGERFN BFST3 %INTEGER I,J; J=0 %CYCLE I=22,1,25 J=J+BOARD(I)_BS %REPEAT %RESULT = J %END %INTEGERFN WFST3 %INTEGER I,J; J=0 %CYCLE I=0,1,3 J=J+BOARD(I)_WS %REPEAT %RESULT = J %END %INTEGERFN BFST6 %INTEGER I,J; J=0 %CYCLE I=19,1,25 J=J+BOARD(I)_BS %REPEAT %RESULT = J %END %INTEGERFN WFST6 %INTEGER I,J; J=0 %CYCLE I=0,1,6 J=J+BOARD(I)_WS %REPEAT %RESULT = J %END %INTEGERFN BFST12 %INTEGER I,J J=BFST6 %CYCLE I=13,1,18 J=J+BOARD(I)_BS %REPEAT %RESULT = J %END %INTEGERFN WFST12 %INTEGER I,J J=WFST6 %CYCLE I=7,1,12 J=BOARD(I)_WS+J %REPEAT %RESULT = J %END %INTEGERFN WHOME %INTEGER I,J; J=0 %CYCLE I=19,1,24 J=J+BOARD(I)_WS %REPEAT %RESULT = J %END %INTEGERFN BHOME %INTEGER I,J; J=0 %CYCLE I=1,1,6 J=J+BOARD(I)_BS %REPEAT %RESULT = J %END %INTEGERFN WTOGO %INTEGER I,J,K,SUM; SUM=0 %CYCLE I=0,1,18 J=BOARD(I)_WS %IF J>0 %THENSTART %CYCLE K=1,1,J SUM=SUM+19-I %REPEAT %FINISH %REPEAT %RESULT = SUM %END %INTEGERFN BTOGO %INTEGER I,J,K,SUM; SUM=0 %CYCLE I=7,1,25 J=BOARD(I)_BS %IF J>0 %THENSTART %CYCLE K=1,1,J SUM=SUM+I-6 %REPEAT %FINISH %REPEAT %RESULT = SUM %END %ROUTINE GBRDVAL V1=W1*(BBAR-WBAR) V2=W2*(BSIN-WSIN) V3=W3*(BSINCL-WSINCL)//10 V4=W4*(WPTSHOME-BPTSHOME) V5=W5*(WPTS-BPTS) V6=W6*(WPTSSUCC-BPTSSUCC) V7=W7*(BFST6-WFST6) V8=W8*(BTOGO//6-WTOGO//6) V9=W9*(BFST3-WFST3) V10=W10*(WHOME-BHOME) BRDVAL=V1+V2+V3+V4+V5+V6+V7+V8+V9+V10 %END %ROUTINE GBRD V1=W1*(BBAR) V2=W2*(-WSIN) V3=W3*(-WSINCL)//10 V4=W4*(WPTSHOME) V5=W5*(WPTS) V6=W6*(WPTSSUCC) V7=W7*(-WFST6) V8=W8*(-WTOGO)//6 V9=W9*(-WFST3) V10=W10*(WHOME) BRDVAL=V1+V2+V3+V4+V5+V6+V7+V8+V9+V10 %IF BRDVAL>BSTVAL %THENSTART BV1=V1; BV2=V2; BV3=V3; BV4=V4; BV5=V5; BV6=V6; BV7=V7; BV8=V8 BV9=V9; BV10=V10; BSTVAL=BRDVAL; BSTMOV1=DICE1; BSTPT1=PT1 BSTMOV2=DICE2; BSTPT2=PT2; BSTPT3=PT3; BSTPT4=PT4 %FINISH %END %ROUTINE MTSTMOV (%INTEGER P,D,%INTEGERNAME BP) BOARD(P)_WS=BOARD(P)_WS-1 BOARD(P+D)_WS=BOARD(P+D)_WS+1 %IF BOARD(P+D)_BS=1 %THEN BOARD(P+D)_BS=0 %C %AND BOARD(25)_BS=BOARD(25)_BS+1 %AND BP=1 %END %ROUTINE CLTSTMOV (%INTEGER P,D,%INTEGERNAME BP) BOARD(P)_WS=BOARD(P)_WS+1 BOARD(P+D)_WS=BOARD(P+D)_WS-1 %IF BP=1 %THEN BOARD(P+D)_BS=1 %AND BOARD(25)_BS=BOARD(25)_BS-1 %C %AND BP=0 %END %ROUTINE MMOVE (%INTEGER P,D) BOARD(P)_WS=BOARD(P)_WS-1 BOARD(P+D)_WS=BOARD(P+D)_WS+1 BOARD(25)_BS=BOARD(25)_BS+BOARD(P+D)_BS BOARD(P+D)_BS=0 %END %ROUTINE GOOD (%INTEGERNAME S,WT) %IF S=0 %THENRETURN %IF S<0 %THEN WT=WT-1 %ELSE WT=WT+1 %END %ROUTINE BAD (%INTEGERNAME S,WT) %IF S=0 %THENRETURN %IF S>0 %THEN WT=WT-1 %ELSE WT=WT+1 %END %ROUTINE LOADWTS W1 = 19 W2 = 117 W3 = 102 W4 = 15 W5 = 15 W6 = 12 W7 = 64 W8 = 43 W9 = 62 W10 = 15 %END %ROUTINE DUMPWTS SELECTOUTPUT(2) NEWLINES(3); WRITE(W1,1); NEWLINE; WRITE(W2,1) NEWLINE; WRITE(W3,1); NEWLINE; WRITE(W4,1) NEWLINE; WRITE(W5,1); NEWLINE; WRITE(W6,1) NEWLINE; WRITE(W7,1); NEWLINE; WRITE(W8,1) NEWLINE; WRITE(W9,1); NEWLINE; WRITE(W10,1) %END %INTEGERFN WBEARO %INTEGER I,J; J=WBOFF %CYCLE I=19,1,24 J=J+BOARD(I)_WS %REPEAT %RESULT = J %END %ROUTINE DOBEST(%INTEGER D) %IF D#0 %THENSTART %IF BOARD(25-D)_WS>0 %THENSTART BOARD(25-D)_WS=BOARD(25-D)_WS-1 WBOFF=WBOFF+1 %FINISHELSESTART %IF BOARD(25-D+1)_WS>0 %THENSTART BOARD(25-D+1)_WS=BOARD(25-D+1)_WS-1 WBOFF=WBOFF+1 %FINISHELSESTART %CYCLE M=19,1,25-D %IF WBOFF<8 %THENSTART %IF BOARD(M)_WS>2 %THEN MMOVE(M,D) %ANDRETURN %FINISHELSESTART %IF BOARD(M)_WS>1 %THEN MMOVE(M,D) %ANDRETURN %FINISH %REPEAT %CYCLE M=19,1,24 %IF DICE2+M<25 %THENSTART %IF BOARD(M)_WS>0 %THEN MMOVE(M,DICE2) %ANDRETURN %FINISHELSESTART %IF BOARD(M)_WS>0 %THENSTART BOARD(M)_WS=BOARD(M)_WS-1 WBOFF=WBOFF+1; %RETURN %FINISH %FINISH %REPEAT %FINISH %FINISH %FINISH %END %ROUTINE MTSTBOFF(%INTEGER NUM,DIE) %IF NUM+DIE<25 %THENSTART %IF BOARD(NUM+DIE)_BS=0 %THEN MMOVE(NUM,DIE) %ELSE NOMOV=1 %FINISHELSESTART BOARD(NUM)_WS=BOARD(NUM)_WS-1 WBOFF=WBOFF+1 %FINISH %END %ROUTINE CLTSTBOFF(%INTEGER NUM,DIE) TEMP=0 %IF NUM+DIE<25 %THEN CLTSTMOV(NUM,DIE,TEMP) %ELSESTART BOARD(NUM)_WS=BOARD(NUM)_WS+1 WBOFF=WBOFF-1 %FINISH %END ! ! ! LOADWTS SELECTINPUT(0) CLOSESTREAM(1) INITIALIZE PRINTSTATE STRT: %CYCLE READ(DICE1); READ(DICE2); BSTVAL=X'80000000' %IF DICE1=DICE2 %THEN DICE3=DICE1 %AND DICE4=DICE2 %C %ELSE DICE3=0 %AND DICE4=0 RUNNING=0 %IF WBEARO=15 %THEN -> BEAROFF TEMP=BBOFF %CYCLE L=0,1,24 %IF BOARD(L)_WS>0 %THENEXIT TEMP=TEMP+BOARD(L)_BS %REPEAT %IF TEMP=15 %THEN RUNNING=1 %AND -> RUN M1=0;M2=0;M3=0;M4=0;BARFL=0 %IF WBAR>0 %THENSTART %IF WBAR>1 %THENSTART %IF BOARD(DICE1)_BS<2 %THEN MMOVE(0,DICE1) %IF BOARD(DICE2)_BS<2 %THEN MMOVE(0,DICE2) -> DONE %FINISH %IF BOARD(DICE1)_BS>1 %AND BOARD(DICE2)_BS>1 %THEN -> DONE BARFL=1 %FINISH %CYCLE K=1,1,2 %IF K=1 %THEN SECOND=0 %ELSESTART TEMP=DICE1; DICE1=DICE2; DICE2=TEMP; SECOND=1 %FINISH %CYCLE I=0,1,23 %IF BOARD(I)_WS>0 %THEN PT1=I %ELSE -> CYC1 %IF PT1+DICE1<25 %AND BOARD(PT1+DICE1)_BS<2 %THENSTART MTSTMOV(PT1,DICE1,BARPT1); M1=1 %IF WBEARO=15 %THEN DICE1=0 %AND -> BEAROFF %IF SECOND=1 %THEN N=I+1 %ELSE N=I %CYCLE J=N,1,24 %IF BOARD(J)_WS>0 %THEN PT2=J %ELSE -> CYC2 %IF PT2+DICE2<25 %AND BOARD(PT2+DICE2)_BS<2 %THENSTART MTSTMOV(PT2,DICE2,BARPT2); M2=1 %IF DICE1=DICE2 %THENSTART %IF WBEARO=15 %THEN DICE2=0 %AND DICE1=0 %AND -> BEAROFF %CYCLE G=J,1,23 %IF BOARD(G)_WS>0 %THEN PT3=G %ELSE -> CYC3 %IF PT3+DICE1<25 %AND BOARD(PT3+DICE1)_BS<2 %C %THENSTART MTSTMOV(PT3,DICE1,BARPT3); M3=1 %IF WBEARO=15 %THEN DICE1=0 %AND DICE2=0 %C %AND DICE3=0 %AND -> BEAROFF %CYCLE H=G,1,23 %IF BOARD(H)_WS>0 %THEN PT4=H %ELSE -> CYC4 %IF PT4+DICE2<25 %AND BOARD(PT4+DICE2)_BS<2 %C %THENSTART MTSTMOV(PT4,DICE2,BARPT4); M4=1 GBRD CLTSTMOV(PT4,DICE2,BARPT4) %FINISH CYC4: %REPEAT %IF M4=0 %THEN GBRD %AND BSTVAL=X'80000000' CLTSTMOV(PT3,DICE1,BARPT3) %FINISH CYC3: %REPEAT %IF M3=0 %THEN GBRD %AND BSTVAL=X'80000000' %FINISHELSE GBRD CLTSTMOV(PT2,DICE2,BARPT2) %FINISH CYC2: %REPEAT %IF M2=0 %THEN GBRD %AND BSTVAL=X'80000000' CLTSTMOV(PT1,DICE1,BARPT1) %FINISH %EXITIF BARFL=1 CYC1: %REPEAT %EXITIF DICE1=DICE2 %REPEAT %IF M1=1 %THEN MMOVE(BSTPT1,BSTMOV1) %IF M2=1 %THEN MMOVE(BSTPT2,BSTMOV2) %IF DICE1=DICE2 %THENSTART %IF M3=1 %THEN MMOVE(BSTPT3,BSTMOV1) %IF M4=1 %THEN MMOVE(BSTPT4,BSTMOV2) %FINISH DONE: %IF WBOFF=15 %THEN PRINTSTRING("yeah") %AND NEWLINE %ANDEXIT PRINTSTATE; DOBLACK %IF BBOFF=15 %THEN PRINTSTRING("pity") %AND NEWLINE %ANDEXIT %IF RUNNING=1 %THEN -> STRT GBRDVAL %IF BRDVAL=COMPVAL %THEN -> STRT %IF COMPVAL STRT RUN: %IF DICE2>DICE1 %THENSTART TEMP=DICE2; DICE2=DICE1; DICE1=TEMP %FINISH TEMP=0 %CYCLE I=1,1,18 %IF BOARD(I)_WS>0 %THENSTART MMOVE(I,DICE1); TEMP=1 %CYCLE J=I,1,18 %IF BOARD(J)_WS>0 %THENSTART %IF DICE1#DICE2 %THEN MMOVE(J,DICE2) %C %ELSE MMOVE(J,DICE1); TEMP=2 %IF DICE1=DICE2 %THENSTART %CYCLE G=J,1,18 %IF BOARD(G)_WS>0 %THENSTART MMOVE(G,DICE1); TEMP=3 %CYCLE H=G,1,18 %IF BOARD(H)_WS>0 %THENSTART MMOVE(H,DICE2); TEMP=4 %EXIT %FINISH %REPEAT %EXIT %FINISH %REPEAT %FINISH %EXIT %FINISH %REPEAT %EXIT %FINISH %REPEAT %IF DICE1=DICE2 %AND TEMP=4 %THEN -> DONE %IF DICE1#DICE2 %AND TEMP=2 %THEN -> DONE %IF DICE1#DICE2 %THEN DICE1=0 %AND -> BEAROFF DICE1=0 %IF TEMP>1 %THEN DICE2=0 %IF TEMP>2 %THEN DICE3=0 BEAROFF: RUNNING=1 TEMP=WBOFF %CYCLE M=24,-1,19 %IF BOARD(M)_BS>0 %THEN -> SAFETY TEMP=TEMP+BOARD(M)_WS %IF TEMP=15 %THENEXIT %REPEAT %IF DICE1>DICE2 %THENSTART TEMP=DICE2; DICE2=DICE1; DICE1=TEMP %FINISH %IF DICE1#0 %THENSTART %IF BOARD(25-DICE1)_WS>0 %THENSTART BOARD(25-DICE1)_WS=BOARD(25-DICE1)_WS-1 WBOFF=WBOFF+1 %FINISHELSESTART %IF BOARD(25-DICE1+1)_WS>0 %THENSTART BOARD(25-DICE1+1)_WS=BOARD(25-DICE1+1)_WS-1 WBOFF=WBOFF+1 %FINISHELSESTART %CYCLE M=19,1,25-DICE1 %IF WBOFF<8 %THENSTART %IF BOARD(M)_WS>2 %THEN MMOVE(M,DICE1) %AND -> SEC %FINISHELSESTART %IF BOARD(M)_WS>1 %THEN MMOVE(M,DICE1) %AND -> SEC %FINISH %REPEAT %CYCLE M=19,1,24 %IF DICE2+M<25 %THENSTART %IF BOARD(M)_WS>0 %THEN MMOVE(M,DICE1) %ANDEXIT %FINISH %IF M+DICE2=25 %THENSTART %IF BOARD(M)_WS>1 %THEN MMOVE(M,DICE1) %ANDEXIT %FINISH %IF DICE2+M>25 %THENSTART %IF BOARD(M)_WS>0 %THENSTART %IF M+DICE1<25 %THEN MMOVE(M,DICE1) %ELSE %C WBOFF=WBOFF+1 %AND BOARD(M)_WS=BOARD(M)_WS-1 %EXIT %FINISH %FINISH %REPEAT %FINISH %FINISH %FINISH SEC: DOBEST(DICE2) %IF DICE4=0 %THEN ->DONE DOBEST(DICE3) DOBEST(DICE4) ->DONE SAFETY: %IF DICE4#0 %THENSTART %IF DICE3=0 %THEN DICE1=DICE4 %AND DICE4=0 %ELSESTART %IF DICE2=0 %THENSTART DICE1=DICE4; DICE4=0; DICE2=DICE3; DICE3=0 %FINISHELSESTART %IF DICE1=0 %THEN DICE1=DICE4 %AND DICE4=0 %FINISH %FINISH %FINISHELSESTART %IF DICE1=0 %THEN DICE1=DICE2 %AND DICE2=0 %FINISH %IF DICE10 %THENSTART NOMOV=0; MTSTBOFF(I,DICE1) %IF NOMOV=1 %THEN ->REP1 %IF DICE2=0 %THENSTART %IF WSINCLDONE %FINISHELSESTART %CYCLE J=19,1,24 %IF BOARD(J)_WS>0 %THENSTART NOMOV=0; MTSTBOFF(J,DICE2) %IF NOMOV=1 %THEN ->REP2 %IF DICE3=0 %THENSTART %IF WSINCLDONE %FINISHELSESTART %CYCLE G=19,1,24 %IF BOARD(G)_WS>0 %THENSTART NOMOV=0; MTSTBOFF(G,DICE3) %IF NOMOV=1 %THEN ->REP3 %IF DICE4=0 %THENSTART %IF WSINCLDONE %FINISHELSESTART %CYCLE H=19,1,24 %IF BOARD(H)_WS>0 %THENSTART NOMOV=0; MTSTBOFF(H,DICE4) %IF NOMOV=1 %THEN ->REP4 %IF WSINCLDONE CLTSTBOFF(H,DICE4) %FINISH REP4: %REPEAT %FINISH CLTSTBOFF(G,DICE3) %FINISH REP3: %REPEAT %FINISH CLTSTBOFF(J,DICE2) %FINISH REP2: %REPEAT %FINISH CLTSTBOFF(I,DICE1) %FINISH REP1: %REPEAT %REPEAT %REPEAT DUMPWTS %END %ENDOFFILE