友人に教える予定だったライフゲームのソースです
/*
「#const」は定数を定める命令です
#constで定められた定数は今後一切変更することは出来ません
定数を定めると仕様を変更するときに楽になります
*/
#const cl 6 /*セルの一辺の長さ*/
#const cmw 50 /*セルの列数*/
#const cmh 40 /*セルの行数*/
screen 0,cmw*cl,cmh*cl /*ウィンドウのサイズ*/
title "ライフゲーム" /*ウィンドウのタイトル*/
/*
「dim」は配列変数を確保する命令です
下の場合2次元配列を確保していることになります
変数を参照するときは「cell(x,y)」と書きます
*/
dim cell,cmw,cmh /*セルの配列変数*/
/*
「*main」はラベルです
ラベルを指定しておくと「goto」や「gosub」で処理をラベルの位置に持っていくことができます
*/
*main /*メインループ*/
redraw 0 /*裏描画開始*/
color:boxf /*白色で画面クリア*/
/*
「getkey」は一つの入力を監視する命令です
「stick」と違い、ずっと検出します
*/
getkey ml,1 /*左クリック監視*/
/*
「stick」はある程度の入力を監視する命令です
「getkey」と違い、一瞬しか検出しません
*/
stick ent /*入力監視*/
if startf=1{dim cell2,cmw,cmh /*セル2配列変数*/}
rx=0:ry=0
repeat cmh
repeat cmw
if cell(rx,ry)=1{
color 0,255,0 /*緑色を指定*/
boxf rx*cl,ry*cl,rx*cl+cl,ry*cl+cl /*四角形の描画*/
}
if startf=1{
f=0
repeat 8
if cnt=0{vx=-1 :vy=0} /*左*/
if cnt=1{vx=-1 :vy=-1} /*左下*/
if cnt=2{vx=0 :vy=-1} /*上*/
if cnt=3{vx=1 :vy=-1} /*右上*/
if cnt=4{vx=1 :vy=0} /*右*/
if cnt=5{vx=1 :vy=1} /*右下*/
if cnt=6{vx=0 :vy=1} /*下*/
if cnt=7{vx=-1 :vy=1} /*左下*/
if rx>0 & ry>0 & rx<cmw-1 & ry<cmh-1{
if cell(rx+vx,ry+vy)=1{f++} /*セルの密度測定*/
}
loop
if cell(rx,ry)=0{ /*セルが空白だったら*/
if f=3{cell2(rx,ry)=1} /*誕生*/
}
if cell(rx,ry)=1{ /*セルが埋まっていたら*/
if f=2 | f=3{cell2(rx,ry)=cell(rx,ry)} /*生存*/
if f<=1{cell2(rx,ry)=0} /*過疎*/
if f>=4{cell2(rx,ry)=0} /*過密*/
}
}
rx++
loop
rx=0:ry++
loop
mx=mousex/cl:my=mousey/cl /*マウスポインタ*/
if ml=1{ /*左クリック判定*/
cell(mx,my)=1
}
if startf=1{
rx=0:ry=0
repeat cmh
repeat cmw
cell(rx,ry)=cell2(rx,ry) /*セル2をセルに代入*/
rx++
loop
rx=0:ry++
loop
}
if ent&32{ /*エンターキー判定*/
if startf=0{startf=1}else{startf=0} /*スタートフラグ*/
}
await /*処理の一時停止*/
redraw 1 /*裏描画を表示*/
/*
「goto」はラベルの位置へ処理を持って行きます
「gosub」と違い、処理を持っていった後自動でgotoまで戻ってきません
*/
goto *main /*「*main」へ*/
なんか処理が重い気がするのはRHOクオリティだからなのです