Program name: Colony
(v. 1.0)
|
|
CTF file name:
|
colony.ctf
|
Author:
|
Tom Lynn
|
Date:
|
1995-1998
|
Models:
|
9700
|
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.
|