なんじゃこりゃあ!!

自然科学全般をこよなく愛するブログです。OCNブログ人から引っ越してきています。

F-basicでライフゲーム

2017年12月27日 | アート・文化

皆さんこんにちはtatuakicadoです(´・ω・`)

皆さん今年最後の水曜日です、いかがお過ごしでしょうか?TVも年末番組ばかりでようつべ行っても面白い物も少なくガッカリしていました(;・∀・)

仕事が終わった後はスマートスピーカーのスポテファイと言うサービスで音楽を聴いています。OKグーグルとか言っても変人扱いしてくれる人が少なくなりましたね、きっと認知されてきたのでしょう。

さて、前の記事に今ライフゲームを作っていると書いていましたが、昨日長年の謎が解け昨日F-basicV6.3で完成しました。

F-basicV6.3は昔富士通が出していたプログラムソフトです。今はサポートされていませんがXPとWin7でギリギリ動くそうです(富士通から出ているプログラムパッチをインストールする必要があります)

ライフゲームとはその昔考え出されたゲームと言うかシュミレーションなんですが、いくつかの決まりに沿い動いています。

マス目があります、何もない所は死んだマスです。何かあると生きたマスになります、又今回はテキストで絵がいています。

F-basicはこんなソフトです(右下のセキュリティバルーンはこのXPパソコンはネットで繋がないで動かしているためセキュリティソフトがインストールされていないからです)

ライフゲームは次の世代と言う概念がありどんどんとターンが切り替わっていきます。

ライフゲームの手順は、

生きているマスの周り(3×3の範囲です以下省略)に生きているマスが1つ以下の場合そのマスは次のターンで死滅します。

死んでいるマスの周りに3つ生きているマスがあれば次のターンでそこに生きているマスが誕生します。

生きているマスの周りに生きているマスが4つ以上であるならばそのマスは次のターンで死滅します。

生きているマスの周りに2か3個生きたマスがあれば次のターンも生き残ります。

今回作ったものは端の処理をしていないので(あいまいなので)そこらへんは気を付けてください(;・∀・)オイオイ!!!

コンパイルして動かすと”O"の文字のカーソルが、横には座標が表示されます。

カーソルキーでカーソルが動きます。

スペースキーでそこに生きた生命を置きます、再び生きた生命のある場所でスペースキーを押すと消えてしまいます。

生きたマスは"*"で表しています。

リターンキーで世代が動きます、再びリターンキーを押すと世代が止まります(動く時間と思った方が良いです)

動かしてみるとこんな事になります。

WiKiでも検索すると有名なパターン配置があります、ぜひ試してみて下さい。

私の場合なんで時間がかかったのかと言うと、上から下までマスの状態を調べる時に下の生きたマス目にも影響を与えると言う事がまずいと言う事がようやくわかったのでその処理をしたのを怠った事が分かったので慌てて加えたのです(;^ω^)

ここからはソースコードです、前のN88BASICよりはカット&ペーストで簡単にできます。

勿論簡単なプログラムなので移植も用意に可能です、是非やってみて下さい。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

'Life Game by.tatuakcado(2017) f-basic 6.3
cls:GG=0:MAS=0:XX=1:YY=1:defint A-Z:dim M(2,3*10,3*7)
gosub *PRI
'main
*MAIN
A$=inkey$
locate 33,3:print xx,yy
if GG=1 then gosub *RUP
gosub *FRI
goto *MAIN
*RUP
gosub *SYORI
gosub *PRI
locate 33,2:print " rund=";RU
RU=RU+1
if RU=>999999 then locate 5,5:print "-game over-":end
return
*PRI
for Y=1 to 3*7
for X=1 to 3*10
if M(0,X,Y)=1 then locate X,Y:print "*" else locate X,Y:print " "
next X
next Y
return
*FRI
if A$=chr$(&H0D) and GG=0 then GG=1:return
if A$=chr$(&H0D) and GG=1 then GG=0:return
if A$="" then return
locate XX,YY:print " "
if A$=chr$(&h1C) then XX=XX+1
if A$=chr$(&h1D) then XX=XX-1
if A$=chr$(&h1E) then YY=YY-1
if A$=chr$(&H1F) then YY=YY+1
if A$=chr$(&H20) then if M(0,XX,YY)=1 then M(0,XX,YY)=0 else if M(0,XX,YY)=0 then M(0,XX,YY)=1
gosub *AB:gosub *PRI:locate XX,YY:print"O"
return
*AB
if XX=>(3*10) then XX=(3*10)
if XX=<1 then XX=1
if YY=>(3*7) then YY=(3*7)
if YY=<1 then YY=1
return
*SYORI
gosub *SYORIB
return
*SYORIB
MAS=0:MASA=0:XOI=0:YOI=0
for YYI=0 to (3*7)-3
YOI=YOI+1
for XXI=0 to (3*10)-3
XOI=XOI+1
if M(0,XOI,YOI)=0 then goto *3CUNT
for YYY=-1 to 1
for XXX=-1 to 1
if XXX=0 and YYY=0 then MAS=MAS else if M(0,XOI+XXX,YOI+YYY)=1 then MAS=MAS+1
*YOBI1
next XXX
next YYY
*YOBI2
if MAS=<1 then M(1,XOI,YOI)=0 '過疎による死滅
if MAS=2 then M(1,XOI,YOI)=1 '生存
if MAS=3 then M(1,XOI,YOI)=1 '生存
if MASA=3 then M(1,XOI,YOI)=1 '誕生
if MAS=>4 then M(1,XOI,YOI)=0 '過密による死滅
MAS=0:MASA=0
next XXI
XOI=0
next YYI
for YYYY=0 to 3*7
for XXXX=0 to 3*10
M(0,XXXX,YYYY)=M(1,XXXX,YYYY)
next XXXX
next YYYY
for YYYYY=0 to 3*7
for XXXXX=0 to 3*10
M(1,XXXXX,YYYYY)=0
next XXXXX
next YYYYY
return
*3CUNT
for YYY3=-1 to 1
for XXX3=-1 to 1
if XXX3=0 and YYY3=0 then MASA=MASA else if M(0,XOI+XXX3,YOI+YYY3)=1 then MASA=MASA+1
next XXX3
next YYY3
goto *YOBI2

---------------------------------------------------------------------------------------------------------------------------------------------------------------

以上が内容です。あ、完全に著作権フリーですが、そのまま改造もせずに自分で作ったとか言って何処かで発表しないでくださいね(;'∀')

プログラムに詳しい人から見たら何ていい加減な処理をしているのか?と怒られそうなコードですがまあ、分かりやすい分皆さんでうまくまとめてください・・・と言うか最初から貴方の納得のいくように作り直した方が早いかもしれません(;´・ω・)

最初完成したときはそれはもう嬉しい物でした、アルゴリズムを読んで自分なりに実装化した作業は大変な難関でしたね(;・∀・)

今はBASICは習う人はいないと思いますが、無用の長物とは私は思わないです。むしろプログラム入門で若い人に使いこなしてほしいと思いますね('ω')ノ

BASICの後にC言語をお勧めします。

あの天才プログラマーの前の任天堂社長岩田氏はこのゲームを実装するとしたらどんなコードを書くんでしょうか?存命の時に会えたら聞いてみたかったです。

まあ、C言語でチャチャっと作っちゃいそうですね。そこが凡才の僕と天才プログラマーの違いでしょう( *´艸`)

さて、これで今年のサイエンス系と工作系や旅行系の記事は終わりにしたいと思います。

また31日に書きたいと思います、それでは明日は今年最後の木曜日!

頑張りましょうね、

そりでは<(_ _)>

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする