TETRIS最小構成選手権の100%PEN部門への応募作品です。26ブロック 多分これが一番短いと思います。 https://turbowarp.org/1296244256?turbo 重いので上のリンクから遊んでください。 また、ターボモード必須です。 ・操作方法 待機/ゲームオーバー時にzキーを押してスタート 左右矢印キー: 左右移動 下矢印キー: ソフトドロップ z/xキー: 回転 外枠が赤色になったらゲームオーバーです ・追加で実装したもの ソフトドロップ 7-bag ・説明 先駆者様方を参考に、自作の単一命令セットを実装しました。ただしこの処理系の1フレームの処理はチューリング完全ではないです(全体のループも含めればチューリング完全になると思います)。チューリング完全の重要な要素として「分岐」と「繰り返し」の二つがあります(必須というわけではない)が、この処理系では分岐しか使えません。1フレーム内で決まった回数しか処理ができないのは辛いですが、テトリスの1フレーム内での処理は高々有限回に収まるので、考えられる全ての操作を分岐で実行すれば実装できます。とはいえこの処理系そのままで膨大なコードを書くのは困難なので、まず人間にとってより読みやすい高級言語を作りました。 https://scratch.mit.edu/projects/1296245281/ そして高級言語でゴリゴリコードを書きつつ、リストの20万制限に達しないよう必死で頑張りました… ・ブロック省略のコツ、使ったテクニック一覧 定義で再描画するのではなくターボモードにして[set volume to () %]ブロックで1フレーム待機させることで1ブロック減らせる ペンの太さは初期値の1でも頑張れば描画できる [set pen size to ()]とその引数が不要になり2ブロック減らせる ペンは下げたままでいい 大きさがInfinityの状態でx,y座標いずれかがInfinityになるような移動をした際、その経路はペンで描画されない pen upを削って1ブロック減らせる (item () of [list v])は真偽値欄に直接はめることができる (item (any) of [list v])でリストのランダムな要素にアクセスでき、工夫すれば乱数を得られる project.jsonをzip圧縮しAPI経由で送ることでjsonの諸検閲を回避できる 大きさはInfinityになると保存されないが、これを使って大きさを1e+309程度にして送ると読み込み時に上限に達してInfinityになるため大きさ指定が不要になる これ若干ルール違反かもしれませんが、外部ツールについての項はブロックを隠すような操作に対しての禁止だと受け取ったため使いました。認められないようでしたら旗ブロックの下に[set size to (Infinity) %]を追加して27ブロックでのエントリーでお願いします。 ・クレジット 入出力と処理系の統合については@m3u8さんの https://scratch.mit.edu/projects/1286980356/ を参考にしました。ブロック削減のベースにもしています。