LoginSignup
0
0

More than 5 years have passed since last update.

【TIC-80】map 命令の remap と一画面ライフゲーム

Last updated at Posted at 2018-10-16

作ったもの。

1scrLifeGame.gif

map命令のremap

前回の記事では
map ([x=0, y=0], [w=30, h=17], [sx=0, sy=0], [colorkey=-1], [scale=1], [remap=nil])
remapに関して「remap は‥‥こおるばっく関数??(便利らしいのですがサンプルも見つけられず使い方が分かりませんでした)」と書いてしまいましたが(なんとなく)わかりました。

ありがとう TIC-80 wiki!(および回答者様)
ありがとう google翻訳!

要は 引数に(tileid [,x,y])mget(x,y)で取得できるタイル番号 tileid 」を取って、
返り値tile [,flip [,rotate] ] ] を返すような関数をセットしておけば、
mapデータはそのままで表示のみ返り値の tile のタイルを表示してくれるということでした
(いやそう書いてあったのですが理解力がなくて情けない)

なるほど、これを使えば(タイムなどのグローバル変数を参照して)タイルをアニメーションさせたりmget(x,y)と合わせて近傍のセルをチェックして(リアルタイムではないが)オートタイルっぽいこともできると。

境界線付きデータもわざわざデータに書き込む必要はないということです。

remap(命令に渡す関数)を使ってみよう

オートタイルもどきに使ってみようかなと思ったのですが、データを書き換えずに表示のみ変更って
他の何かに使えないかな?と考えたとき、「ライフゲーム」を思い出しました。

昔からありますし、世間でもQiita内でもときどき記事があがっているようですね。(今色々読んでます)

適当に実装してみた後、自分は確かMSXに打ち込んで試したのが最初だったかな?と思って検索したら、
なんと作者様のページが!!

うおー感動だー。プログラムリストも載ってるー。しかも一画面プログラムだ!
(まあ当時記憶媒体もないので1画面プログラムぐらいしか入力できなかった)
1988年‥‥自分も年を取るはずだぁ

プログラムを読んだ感想ですが、リスト内の「そそりだくAAOOEE」が印象的でした。
あ、いや濁点「 ゛」ではなくてチルダ「~」かな、それと「く」ではなくて不等号「<」かな?

‥‥いやほんと分からないんです、マシン語をかなり使ってるので。
BASIC部分はまだそうでもないのですが(かなり怪しいですが)、マシン語部分はさっぱりです。

と、とりあえず TIC-80 のエディタの一画面(40x17文字)でできるかやってみようと書いたのが
冒頭のプログラムです。

以下改行やインデントを入れて載せます。

1scrLifeGame.lua
X,Y,W,H,SF,SP,num=0,0,240,136,60,4,1
ng={}
for r=1,H do
    ng[r]={}
end

function rm(t,x,y)
    local n=0
    for ox=-1,1 do
        for oy=-1,1 do
            n=n+mget(x+ox,y+oy)
        end
    end
    if t==0 then
        t=(n==3)and 1 or 0
    else
        t=(n==3 or n==4)and 1 or 0
    end
    ng[y-Y+1][x-X+1]=t
    return t
end

ct,sx,sy=SF,-720,-408
map(X,Y,W,H,sx,sy)

function TIC()
    if ct==SP then
        map(X,Y,W,H,sx,sy,-1,1,rm)
    end
    ct=ct-1
    if ct==SP//2 then
        print(num)
        for r=1,H do
            for c=1,W do 
                mset(X+c-1,Y+r-1,ng[r][c])
            end
        end
    end
    sy=sy+(btn(0)and 4 or btn(1)and -4 or 0)
    sx=sx+(btn(2)and 4 or btn(3)and -4 or 0)
    if ct==0 then
        ct=SP
        num=num+1
    end
end

コード圧縮技術(?)は特に使っていません(知識も技術もない)が普通に一画面に収まりました。
変数名を短くしたり、後は論理演算子を用いた三項演算子っぽい書き方を利用したくらいですかね。

後で少し調べてみましたが、コード圧縮の技術も色々あるようです。
「なるほどー」と思うものや「何いってだこいつ(理解できない)」など様々です。

まあ、タイルデータや配置処理、さらに音まである(!)元プログラムとは比ぶべくもないのですが。

横8ドットで2色という制限のなかできれいに見えるセルはすごいなあと本当に感心してしまいます。
(geocitiesが近々終了するらしいですが残ってほしいです)

qiita.gif

「Qiita」もなかなか生き残るな(笑

このような感じで自分でドットをポチポチ打って、ペタペタ配置して
さっと実行できて1ボタンでgif動画にもできる(しかも無料)「TIC-80」は
すばらしいと思うのですが皆様もいかがでしょうか!
(日本語の情報が少ないのです、助けてください)

※ 追記
理解できる範囲でコードを縮めて、全体表示、一時停止、データ反映追加。
二丁拳銃.gif

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0