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 件のコメント:
コメントを投稿