progloaderで「ライフゲーム」をダウンロードすると、
LigeGame.bas
が追加されます。
RUNするとまずは編集モードになるので、画面内にセルを配置してください。
セルは、任意の座標を直接タッチすることで配置または除去できます。
開始をタップすると実行されます。
途中で再編集も出来ます。
Wikipediaにあるようなサンプルも実行できますが、フィールドがあまり広くないことと、上下左右がつながってないので結果はちょっと違ってきます。その辺りは適当に改良してください。
このプログラムのオリジナルはOh!X1988年6月号のS-OS上のSLANG用ですが、元ネタはWikipediaにもある通り、別のところにあります。
以下のリストはオリジナルのもの。動作確認はしてないので打ち込み間違いがあるかも。
// ライフゲーム
// Oh!X 1988-6
//
// 宣言
//WORK $9888; (≪ for MZ-88/1268 ≫)
CONST XX=40-1, YY=25-1,
X =XX-1, Y =YY-1;
ARRAY BYTE A[YY][XX],
BYTE B[YY][XX];
VAR GEN;
//
// メイン処理
//
MAIN()
BEGIN
WIDTH(48);
intset(); // 初期画面SET
PRINT("\C"); // 画面を消す
FOR GEN=0 TO 100 [
HYOUJ(); // 画面表示
COPY(); // 配列コピー
KOUTAI(); // 世代交代
KEY(); // キー入力
]
END;
//
// 画面表示
//
HYOUJ()
VAR I,J;
BEGIN
LOCATE(0,0);
PRINT("GEN:",DECI$(GEN));
FOR I=1 TO Y [
LOCATE(1,I);
FOR J=1 TO X [
IF A[I][J]==FALSE [
PRINT(" ");
]
ELSE [
PRINT("*");
]
]
]
END;
//
// 配列コピー
//
COPY()
VAR I,J;
BEGIN
FOR I=1 TO Y [
FOR J=1 TO X [
B[I][J]=A[I][J];
]
]
END;
//
// 世代交代
//
KOUTAI()
VAR I,J;
BEGIN
FOR I=1 TO Y [
FOR J=1 TO X [
CASE JOUTAI(I,J) [
0,1 : A[I][J]=FALSE;
2 : []
3 : A[I][J]=TRUE;
OTHERS: A[I][J]=FALSE;
]
]
]
END;
//
// 状態
//
JOUTAI(I,J)
BEGIN
END(
B[I-1][J-1]+B[I-1][J]+B[I-1][J+1]
+B[I ][J-1] +B[I ][J+1]
+B[I+1][J-1]+B[I+1][J]+B[I+1][J+1]
) ;
//
// 初期画面SET
//
INTSET()
VAR I,J,KEY;
CONST MSG= [
"START-[CR] RESET-[SPC] SET-[S]",0
];
BEGIN
PRINT( "\C" );
LOCATE( 8, 8); PRINT( MSX$(MSG) );
LOCATE(16,13);
WHILE TRUE [
CASE (KEY=INKEY(1)) [
$1B: STOP()
$0D: EXIT;
$21 TO $FF: PRINT("*");
OTHERS: PRINT(CHR$(KEY));
]
1
FOR I=0 TO YY [
FOR J=0 TO XX [
A[I][J]=FALSE;
]
]
FOR I=1 TO Y [
FOR J=1 TO X [
IF SCREEN(J,I)=='*' [
A[I][J]=TRUE;
]
]
]
END;
//
// キー入力
//
KEY()
BEGIN
WHILE TRUE [
CASE INKEY(0) [
// $00 : EXIT;
$1B : STOP();
: [
BEEP();
WHILE INKEY(1)==' ' []
]
OTHERS: EXIT;
]
]
END;
//
//END


0 件のコメント:
コメントを投稿