nimu.akhの日記: 関数電卓でライフゲーム 2
CASIO の fx-5800p でライフゲームを作った。1次元配列が1個だけとか、変数に入れれるのは数値のみとか、関数を作れないという環境だったけどなんとかできた。しかし、4x4のフィールドの1ステップに3秒くらいかかるという遅さでせいぜい4x16の表示が限界。なんとかならんかなぁ。
File:LIFEGAME
"NEW GAME"?→A
If A:Then
Prog "NEWGAME"
IfEnd
X+3→A:(X+2)(Y+1)→Z
{-X-3,-X-2,-X-1,-1,1,X+1,X+2,X+3}→List X
Do
Prog "PRINTMAP"
Prog "NEXTGEN"
LpWhile Getkey=0
File:NEWGAME
フィールドの外にあたる部分は0、死んでるセルは-1、生きてるセルは1という決まり。1にセットするのはCOMPモードという手抜き。
?X:?Y
0→DimZ:(X+2)(Y+2)→DimZ
For 1→J To Y
For 1→I To X
-1→Z[J(X+2)+I+1]
Next
Next
File:NEXTGEN
For A→I To Z
If Z[I]>0:Then
For 1→j To 8
I+List X[J]:2Z[Ans]→Z[Ans]
Next
IfEnd
Next
For A→I To Z
Z[I]→N
If N:Then
If N=4 Or Abs(N)=8:Then 1:Else -1:IfEnd
Ans→Z[I]
IfEnd
Next
File:PRINTMAP
Cls
For 1→J To Y
For 1→I To X
If Z[J(X+2)+I+1]>0:Then
Locate I,J,"O"
IfEnd
Next
Next
動きました (スコア:2)
fx-5800Pを2007年に買って自分の使うのプログラムを入れて、それ以来プログラムは触っていなかったので思い出すのに一苦労しました。
Listを座標計算にあの様に使うんですね。Listは知りませんでした。
は、
I-List X[J]:2Z[Ans]→Z[Ans]
ですね。"-"が、なかなか分からなかった。
も、"Locate"になんとかたどり着いた。
世代表示と全部死滅した場合停止するのを追加しました。
分からなくて少し触ったので左端に移動するとどこかのループから戻ってこないみたい。
Re:動きました (スコア:1)
は、 I-List X[J]:2Z[Ans]→Z[Ans] ですね。"-"が、なかなか分からなかった。
も、"Locate"になんとかたどり着いた。
今、自分の電卓の中に入っている方を見ると+になってました。(+-どっちでも動きますが)直しておきます。localeもlocateに直しておきます。指摘ありがとうございます。