Casio Calculator Program Library

Program name: Colony (v. 1.0)  --(Back to Index)--

CTF file name: colony.ctf
Author: Tom Lynn
Date: 1995-1998
Models: 9700

Screenshot:

[screenshot]


Description:

   A two-player "board game".
   
   This program also works with 9750, 9850 or 9950 calculators, but for those
   models it is better to use "Colony 3".
              

* Rules *

   This game is played on a hexagonal grid.  Players take turns putting 'seeds'
   into hexagons.  Once a seed has been put into a hexagon, that hexagon is
   considered to have been 'colonised' by that player.  This means that their
   opponent can't put any seeds there.  The object of the game is to colonise
   the entire board by wiping out all of your opponent's colonies.
   
   Players can continue putting seeds into a hexgon until it contains the same
   number of seeds as it has neighbouring hexagons.  When this happens, the
   hexagon 'explodes', sending one seed into each neighbouring hexagon.  This
   leaves the exploded hexagon empty, at which point it can be colonised by
   either player again.
   
   If one of your hexagons explodes into one of your opponent's hexagons, all of
   the seeds in that hexagon are converted into your seeds.  If when an exploding
   hexagon adds a seed to a neighbouring hexagon the neighbouring hexagon becomes
   full (ie it has as many seeds as it has neighbours), that hexagon will also
   explode.  In this way, you can start 'chain reactions', which can annihilate
   your opponent at a stroke (if you're lucky).
              

* How To Play *

   To add a seed to a hexagon, click on it.  That's all there is to it.  If you
   forget whose turn it is, click outside the board.  You are advised to choose
   a small board size while you are learning the game.  To click in a hexagon,
   move the pointer to the hexagon with the arrow keys and press [EXE].
              

* Entering the Programs *

   Once you have entered the programs, you must define Matrix Y with the
   dimensions of the board you intend to play on (it must be square).  If you
   set the dimensions to 6x6 you will not need to change them again, but it
   will use more memory than a smaller board (it uses 10 bytes per hexagon).
   
   This program cannot be used with pre-9700 calcs, as it uses the matrix
   memories and is too large for tweaking to use the SD memories (I think).
   It may be necessary to tweak the graphics for non-widescreen calcs (fx9800),
   I don't know.  If it is and you need help, mail me at tom-calcs@mythic-beasts.com.
   
   If you are using a 9x50 calc, you will need to change the names of the progs.
   I have suggested appropriate changes in the comments.
              
Program source code:
Program "~COLONY" [Main routine]

   " \*\*\*\*\* COLONY \*\*\*\*\*"
   "1. New game"
   "2. Continue game"
   ?->X
   Lbl 0
   "Enter size (2(-)6):"  ; (-) means unary minus, but you can use - if you want
   ?->A
   Int A->A
   A<2=>Goto 0
   A>6=>Goto 0
   Range 1,127,0,1,63,0
   1->P
   X=2=>Goto 3
   0->L
   Prog 2  ; fx-9x50s: 0Mat Y->Mat Y  (That's a zero, not a letter O)
   Lbl 2
   Cls
   Prog "CODRAWBOARD"  ; fx-9x50s: Prog "CODRAWBD"
   Prog "COFILLBOARD"  ; fx-9x50s: Prog "COFILLBD"
   (-)P->P
   Lbl 1
   Prog O  ; fx-9x50s: Prog "COCHKWIN"
   Prog "COPLAY"
   Prog "CODRAWBOARD"  ; fx-9x50s: Prog "CODRAWBD"
   Prog "COFILLBOARD"  ; fx-9x50s: Prog "COFILLBD"
   Goto 1
   Lbl 3
   Prog P  ; fx-9x50s: Prog "COPLAYER"
   1->P
   Frac .5L=0=>Goto 2
   (-)P->P
   Goto 2
              
Program "COADDSEED" [fx-9x50s: "CO+SEED"]

   Isz L
   Prog M  ; fx-9x50s: Prog "COTRY"
   Prog "COCHK4BANG"  ; fx-9x50s: Prog "COCHKBNG"
              
Program "COCHK4BANG" [fx-9x50s: Prog "COCHKBNG"]

   Lbl 0
   A->R~S
   Lbl 1
   R->T
   S->U
   Prog 3  ; fx-9x50s: Prog "COBANG"
   Dsz S
   Goto 1
   A->S
   Dsz R
   Goto 1
              
Program "COCHOOSESEED" [fx-9x50s: "COCHOOSE"]

   Prog N  ; fx-9x50s: Prog "COPUT"
   0->I~J
   Lbl 0
   J>=0=>J<=1=>U-1<1=>Goto 1
   J>=1=>J<=2=>T+1>A=>Goto 1
   J>=3=>J<=4=>U+1>A=>Goto 1
   J>=4=>J<=5=>T-1<1=>Goto 1
   Isz I
   Lbl 1
   Isz J
   J<Abs V=>Goto 0
   Prog "CODRAWSEED"  ; fx-9x50s: Prog "CODRAWSD"
              
Program "CODRAWBOARD" [fx-9x50s: Prog "CODRAWBD"]

   A->B~C
   Lbl 0
   47+10(B+C-A->D
   33+5(B-C->E
   Plot D+5,E-5
   Plot D+10,E-5
   Line
   Plot D+15,E
   Line
   Plot D+10,E+5
   Line
   B<>A=>C<>1=>Goto 1
   Plot D+5,E+5
   Line
   C<>1=>Goto 1
   Plot D,E
   Line
   Lbl 1
   B<>1=>Goto 2
   Plot D,E
   Plot D+5,E-5
   Line
   Lbl 2
   Dsz C
   Goto 0
   A->C
   Dsz B
   Goto 0
              
Program "CODRAWSEED" [fx-9x50s: "CODRAWSD"]

   V=0=>Goto Z
   Plot 47+10(T+U-A,33+5(T-U
   Plot X+5,Y+5
   Line
   Plot X+5,Y
   Line
   Plot X+5,Y-5
   Line
   Plot X-5,Y-5
   Line
   Plot X-5,Y
   Line
   Plot X-5,Y+5
   Line
   Abs V<>V=>Goto 2
   1->W
   Lbl 1
   W=1=>Plot X+7,Y+3
   W=2=>Plot X+3,Y
   W=3=>Plot X,Y-2
   W=4=>Plot X-3,Y
   W=5=>Plot X-3,Y+2
   W=6=>Plot X,Y+4
   Plot X+1,Y
   Plot X,Y-1
   Plot X-1,Y
   Isz W
   V<W=>Goto Z
   Goto 1
   Goto Z
   Lbl 2
   1->W
   Lbl 3
   Plot 47+10(T+U-A,33+5(T-U
   W=1=>Plot X+9,Y+3
   W=2=>Plot X+11,Y
   W=3=>Plot X+9,Y-2
   W=4=>Plot X+6,Y-2
   W=5=>Plot X+3,Y
   W=6=>Plot X+6,Y+3
   Abs (2W-7->H
   H<>3=>Plot X,Y-1
   H=3=>Plot X+1,Y
   Isz W
   W<=Abs V=>Goto 3
   Lbl Z
   Plot 0,0
              
Program "COFILLBOARD" [fx-9x50s: "COFILLBD"]

   A->R~S
   Lbl 0
   R->T
   S->U
   Prog "COCHOOSESEED"  ; fx-9x50s: Prog "COCHOOSE"
   Dsz S
   Goto 0
   A->S
   Dsz R
   Goto 0
   Prog "COCHK4BANG"  ; fx-9x50s: Prog "COCHKBNG"
              
Program "COPLAY" [Main loop]

   (-)P->P
   0->K
   Lbl 0
   Plot 65,33
   Plot X,Y_
   Intg (.1(Y-28->T
   Intg (.2(X-67+10A->Q
   4Frac (Q/4->U
   U<>0=>Goto 1
   X-Y<=33+5Q-10(T+A=>Goto 5
   X+Y>=100+5Q+10(T-A=>Goto 6
   28+10T->Y
   57-10A+5Q->X
   Goto 4
   Lbl 5
   57-10A+5Q->X
   38+10T->Y
   Goto 4
   Lbl 6
   67-10A+5Q->X
   33+10T->Y
   Goto 4
   Lbl 1
   U<>1=>Goto 2
   33+10T->Y
   62-10A+5Q->X
   Goto 4
   Lbl 2
   U<>2=>Goto 3
   X-Y>=39+5Q-10(T+A=>Goto 7
   X+Y>=105+5Q+10(T-A=>Goto 8
   33+10T->Y
   57-10A+5Q->X
   Goto 4
   Lbl 7
   28+10T->Y
   67-10A+5Q->X
   Goto 4
   Lbl 8
   38+10T->Y
   67-10A+5Q->X
   Lbl 3
   U<>3=>Goto 4
   Y>=33+10T=>T+1->T
   28+10T->Y
   62-10A+5Q->X
   Lbl 4
   .5(.1X-4.7+A->D
   .1(Y-33->E
   D+E->T
   D-E->U
   T>=1=>T<=A=>U>=1=>U<=A=>Goto 9
   "  Current player is  "
   P<>1=>"          (-)"_
   P=1=>"          ."_
   Goto 0
   Lbl 9
   Prog "COADDSEED"  ; fx-9x50s: Prog "CO+SEED"
              
Program 2 (MATRIX) [fx-9x50s: Omit this prog]

   0Mat Y->Mat Y  ; That's a zero, not a letter O
              
Program 3 (MATRIX) [fx-9x50s: "COBANG"]

   Prog N  ; fx-9x50s: Prog "COPUT"
   6->E
   T=1=>E-2->E
   T=1=>U=A=>Isz E
   T=A=>U=1=>Isz E
   T=A=>E-2->E
   U=1=>E-2->E
   U=A=>E-2->E
   Abs V<E=>Goto 9
   'BANG!
   1->K
   A->R~S
   (V/Abs V)(Abs V-E->Mat Y[T,U]
   Cls
   U-1->U
   0->D
   Lbl 0
   T<1=>Goto 1
   T>A=>Goto 1
   U<1=>Goto 1
   U>A=>Goto 1
   Prog M  ; fx-9x50s: Prog "COTRY"
   Lbl 1
   Isz D
   D=1=>T+1->T
   D>=2=>D<=3=>U+1->U
   D>=3=>D<=4=>T-1->T
   D=5=>U-1->U
   D<=5=>Goto 0
   Lbl 9
              
Program M (MATRIX) [fx-9x50s: "COTRY"]

   Prog N  ; fx-9x50s: Prog "COPUT"
   K=0=>V/P<0=>Goto 0
   P(Abs V+1->Mat Y[T,U]
   Prog "COCHOOSESEED"  ; fx-9x50s: Prog "COCHOOSE"
   Goto 9
   Lbl 0
   "THIS HEX HAS ALREADY    BEEN COLONISED!"
   (-)P->P
   Dsz L
   Lbl 9
              
Program N (MATRIX) [fx-9x50s: "COPUT"]

   Mat Y[T,U]->V
              
Program O (MATRIX) [fx-9x50s: "COCHKWIN"]

   'COCHECK4WIN
   L<=2=>Goto 9
   A->B~C
   0->G
   Lbl 0
   G=0=>Mat Y[B,C]>0=>1->G
   G=0=>Mat Y[B,C]<0=>(-)1->G
   GMat Y[B,C]<0=>Goto 9
   Dsz B
   Goto 0
   A->B
   Dsz C
   Goto 0
   " ~~~~ GAME OVER ~~~~ "
   0->Q
   Lbl 3
   Isz Q
   \sigma(Mat Y[Q,P,1,6->P
   P=0=>Goto 3
   Abs P/P->P
   P=1=>"       . WINS!"
   P<>1=>"       (-) WINS!"
   Prog "CODRAWBOARD"  ; fx-9x50s: Prog "CODRAWBD"
   Prog "COFILLBOARD"  ; fx-9x50s: Prog "COFILLBD"
   Lbl 8
   Plot 0,0_
   Goto 8
   Lbl 9
              
Program P (MATRIX) [fx-9x50s: "COPLAYER"]

   'COPLAYCALC
   A->T
   0->L
   Lbl 0
   L+\sigma(Abs Mat Y[T,U,1,A->L
   Dsz T
   Goto 0
              


This page was created by Tom Lynn (tom-calcs@mythic-beasts.com).
This page last updated: Friday, 30 April, 1999

Written in notepad and compiled with WTA, for clean, consistent HTML.
Part of the Casio Graphical Calculator Encyclopaedia.

Best Viewed With Any Browser