狠狠撸

狠狠撸Share a Scribd company logo
veri2048
veri2048??
? Verilog + 2048
? 2048??数年前にブームとなった(?)単
純なパズルゲーム
←2048本家のスクショ
主に実装したこと
? マスのデザインを書く(easy)
? マスの移動、マージ(medium)
? マスの移動のアニメーション(hard)
? 飛行機(medium)
? Other
? マスのランダム出現、終了判定、…
マスのデザインを書く
? 数字を表示するのが大変。
? けどやっぱり手書き感のある文字がいい
? 方針
?ペイントで文字を手書きする
?Pythonで読み込んでその文字を表示するVerilog
コードを生成する
?大量のif文が生成される
マスの移動、マージ
? 二つの方針
?複数クロックを使って比較的スマートに書く
?1クロックでできるだけ全部処理する
? 後者を選択
?クロックずらすのが直感的じゃない
?1クロックのほうが高速だしカッコイイ
?後で後悔
マスの移動、マージ
? 1クロックで全部やるとは
?一時変数は使えない
?勿論for文的な処理もできない
?全列挙
? 盤面の状態を全て列挙して移動後の状態を求める
?列、行は独立であることなどを利用して工夫す
る
?手書き+コピペで全て書いた(暴挙)
マス移動のアニメーション
? 本家を見ると動かした方向に実際にマスが動いて
いる
?実装したくなる
? 難しい点
?移動する数字の描画
?移動する距離によって速度が違う
?各マスの移動方向?距離が必要
?マスのマージ時にしかわからない
?マージの書き直し(絶望)
飛行機
? オプション
? ただのギミック
? 気の向くままに書いたもの
? 2048本体よりも好き
苦労話
? マスの移動を実装したけどボタンを押したときの
挙動が変
? Debug(二日目午後から三日目午前)
? TAの方々に物理的な問題かもとアドバイスをもら
う
? 与えられたコードではチャタリング除去部が切り
離されていた(なぜ…)
?本体にチャタリング除去を加える
?直った!
苦労話
? 作業が遅れている
?家でコードを書こう!
?家にはコンパイル環境すらない
?GitHubでなけなしのバージョン管理
? マス移動のシミュレーション
?全部家で書いた(数千行の追加、削除)
?次の日大学でコンパイル
?当然エラー大量発生
?数時間かけて動くようにした
ちゃたりんぐ?
? ボタンを押しているときにオンオフが切り替わっ
てしまうこと
?入力を40MHzで読み取るので感度が超高い
?人間にはこんな感度必要ない
? チャタリング除去アルゴリズム
1. ボタンが押されたらフラグを立てる
2. ボタンが一定時間離されたらフラグを降ろす
?簡単だけどとても効果的
おまけ
? ソースコード量 ?? 約6000行
↑飛行機描画部(約
1000行)
↑セルのマージ処理部
(2500行)
おわりに
? 計画性は大事
? もうちょっと頭のいいことをするべきだった
?他の人はモジュールとかクロックをうまく使っ
ていた
?僕は一つのモジュールに大量にifを詰め込んだ
? いい経験をすることができた
? 楽しかった
? TAの方々が質問に丁寧に答えてくれて神だった

More Related Content

Veri2048