~ **************************************************************************** ~ ~ A W A R I ~ ~ Program: AWARI ~ ~ Programmer: Mouse-2002 version by: ~ Dr. David G. Simpson ~ Laurel, Maryland USA ~ Original version by Geoff Wyvill ~ ~ Date: May 8, 2002 ~ ~ Language: Mouse-02 ~ ~ Description: This program implements the game of Awari. ~ Originally published in "BASIC Computing Games", ~ David H. Ahl (ed.). Creative Computing, 1978. ~ ~ Rules: ~ ~ Program Notes: ~ ~ Array usage: ~ ~ B[14]: 0-13 ~ G[14]: 14-27 ~ F[51]: 28-78 ~ ~ **************************************************************************** ~ **************************************************************************** ~ Main program ~ **************************************************************************** 14 G: ~ define array G offset 28 F: ~ define array F offset " AWARI!" " CREATIVE COMPUTING MORRISTOWN, NEW JERSEY!" 3 S: ~ inital number of stones in each pit 0 N: ( "!!" 0 E: 0 I: ( I. 13 < ^ S. I. &STO ~ b[i]=s I. 1+ I: ) 0 C: 0 F. N. + &STO ~ f[n]=0 0 13 &STO ~ b[13]=0 0 6 &STO ~ b[6]=0 ( #C; "YOUR MOVE? " #A,1; E. 0= [ 0 ^ ] M. H. = [ #A,0; ] E. 0= [ 0 ^ ] "MY MOVE IS " #F; E. 0= [ 0 ^ ] M. H. = [ "," #F; ] E. 1 < [ 0 ^ ] ) "!GAME OVER!" 6 &RCL 13 &RCL - D: ~ d = b[6]-b[13] D. 0 < [ "I WIN BY " D._ ! " POINTS!" &CONT ~ continue; ] N. 1+ N: D. 0 = [ "DRAWN GAME!" &CONT ~ continue; ] "YOU WIN BY " D. ! " POINTS!" ) ~ **************************************************************************** ~ Macro A ~ **************************************************************************** $A 1% 1 = [ 1 f: | 0 f: ] ( f. 0 = [ "AGAIN? " | 0 f: ] ? M: M. 7 < M. 0 > * [ M. 1 - M: M. &RCL 0= 0= [ 6 H: #B; #C; @ ] ] "ILLEGAL MOVE!" ) @ ~ **************************************************************************** ~ Macro B ~ **************************************************************************** $B M. K: #E; 0 E: K. 6 > [ K. 7 - K: ] C. 1 + C: C. 9 < [ F. N. + &RCL 6 * K. + F. N. + &STO ] 0 I: ( I. 6 < ^ I. &RCL 0= 0= [ 7 J: ( J. 13 < ^ J. &RCL 0= 0= [ 1 E: @ ] J. 1+ J: ) @ ] I. 1+ I: ) @ ~ **************************************************************************** ~ Macro C ~ Prints the board. ~ **************************************************************************** $C "! " 12 I: ( I. 6 > ^ #D; I. 1- I: ) "!" 13 I: #D; " " 6 &RCL ! "! " 0 I: ( I. 6 < ^ #D; I. 1+ I: ) "!!" @ ~ **************************************************************************** ~ Macro D ~ **************************************************************************** $D I. &RCL 10 < [ " " ] I. &RCL ! @ ~ **************************************************************************** ~ Macro E ~ **************************************************************************** $E M. &RCL P: 0 M. &STO ( P. 0 > ^ M. 1 + M: M. 13 > [ M. 14 - M: ] M. &RCL 1 + M. &STO P. 1- P: ) ~ if (b[m]!=1 || m==6 || m==13 || b[12-m]==0) ~ return; M. &RCL 1 = 0= M. 6 = + M. 13 = + [ @ ] 12 M. - &RCL 0 = [ @ ] H. &RCL 12 M. - &RCL + 1 + H. &STO 0 M. &STO 0 12 M. - &STO @ ~ **************************************************************************** ~ Macro F ~ **************************************************************************** $F 99_ D: 13 H: 0 I: ( I. 14 < ^ I. &RCL G. I. + &STO I. 1+ I: ) 7 J: ( J. 13 < ^ J. &RCL 0 = [ J. 1+ J: &CONT ] J. M: #E; 0 I: ( I. 6 < ^ I. &RCL 0 = [ I. 1+ I: &CONT ] I. &RCL I. + L: 0 R: ( L. 13 > ^ L. 14 - L: 1 R: ) ~ if (b[l]==0 && l!=6 && l!=13) L. &RCL 0 = L. 6 = 0= * L. 13 = 0= * [ 12 L. - &RCL R. + R: ] R. Q. > [ R. Q: ] I. 1+ I: ) 13 &RCL 6 &RCL - Q. - Q: C. 9 < [ J. K: K. 6 > [ K. 7 - K: ] 0 I: ( I. N. < ^ ~ if (f[n]*6+k==(int)(f[i]/(pow(6,7-c))+0.1)) F. N. + &RCL 6 * K. + F. I. + &RCL 6 7 C. - &POW / 0.1 + &INT = [ Q. 2 - Q: ] I. 1+ I: ) ] 0 I: ( I. 14 < ^ G. I. + &RCL I. &STO I. 1+ I: ) Q. D. 1 - > [ J. A: Q. D: ] J. 1+ J: ) ~ next j A. M: M. 42 + !' #B; @