思い立ったが吉日スマートフォン用の表示で見る思い立ったが吉日プロフィールプログラミングゲームデザインTwitterPortfolioこの広告は、90日以上更新していないブログに表示しています。トップバッター&言い出しっぺとして責任は重いなあ...というわけで当日に頑張って書いてます。この講座を開催するにあたってどういう目標を持ってどういう構成で開いたのかということと、自分なりにリーダブルに書くTipsをまとめて、最後に反省点を洗い出してみます。講座の中で深く触れなかったことについても掘り下げます。今後の予定おまけ参考文献リーダブルコードについてリーダブルコードとは読みやすいソースコードのことで、オライリーの「リーダブルコード」は相当売れた技術書の一つです。この本はコードをいかに読みやすくするかという方法がひたすら論述されています。私はHICHAINの開発をしたり、誰かのコードを読んだり、グループワークをする上で、可読性、拡張性の高いコードがいかに開発効率を高められるか実感しました。この感動を分かち合いたいのでこの講座を開いたというわけです。このように毎回私は定期的になにかブームが来て布教したいという一心で講座を開いています。可読性を高める拡張性を高める全学年を対象としたかったので、3回に分けて全学年向けと2年生以上向けx2に分けました。1年生はまだクラスを習っていなかったので、初回はクラスを使わず可読性を高めることを重視しました。講座の構成アンリーダブルなババ抜きを可読性・拡張性を高めていき、それを元に大富豪を作る扱うゲームはそれを元に別のゲームに派生できてルールが簡単なババ抜きにしました。Processing授業で学ぶ言語なのでこれにしました。(2年生以上向け)リーダブルババ抜きを元にリーダブル大富豪を作るいくつか条件を指定して各自大富豪を作ってもらうまた参考にしたかったので普段みんなが書いているコードを集めました。概要スライド友人に汚いババ抜きのコードを書いてもらいました。最初にアンリーダブルババ抜きを配布し、可読性を高める方法を学んだ後、各自コードの掃除をするという感じです。掃除の工程は5段階に分けて、自分で掃除したコードをサンプルとして載せました。インデントやスペースを空けるなど表面上の改善をしたコードから始めることにしました。pはやりすぎProcessingのIDEは貧弱なのであまり当てはまりませんが、長い名前が悪という訳ではありません。だいたいのIDEは補完機能が優れているので、意味を理解する上で必要なら長くても問題ないと思います。ババ抜きならトランプ、プレイヤー(手札)、捨て場のことです。トランプは53枚使用し、ハートやダイヤなどのマークと、A~Kの数字、そして表裏の画像で構成されています。このようにゲームで使われているものを列挙して各要素に分解することが、後々クラスわけをするときに役立ちます。コードを書きながら分解するより、最初に分解しておくことが理想です。初期状態とはゲームを開始する前の状態のことです。終了条件と勝利条件は混同しやすいですが、必ず終了条件の後に勝利条件を判定します。ババ抜きではプレイヤーの1人を除いた全員の手札がなくなることでゲームが終了し、手札にジョーカーがないプレイヤーが勝利します。ゲーム中のフェーズを明確に分けることも必要です。アルゴリズム問題ゲームを作る上で切っても切り離せないのがアルゴリズムです。ババ抜きではトランプをシャッフルしてプレイヤーに配るときや、ペアを捨てるときに当たります。アンリーダブルババ抜きではトランプを配分するときこうやってました。(ジョーカー以外)そのカードをそのプレイヤーに既に配ってなければ配る次に配るプレイヤーを選ぶ2~4を全て配り終わるまで繰り返すジョーカーをどちらかのプレイヤーに配る私はこうやります。全てのカードをシャッフルする交互にプレイヤーに配る明らかに工程が減り単純になりました。後者のアルゴリズムは現実でする行動を書いただけのことです。これはこういうメソッドがあるということを知らなければ使えませんが、別に一から実装しても問題ありません。一行で済まそうが数行使おうが、カードをシャッフルすると一言コメントを書いてあれば理解する上で同じです。「こういう便利なメソッドがありそうだな」と気づくこともリーダブルにする第一歩だと思います。現実の行動に即したアルゴリズムは直感的で分かりやすくなります。よいアルゴリズムという訳でもありません。アルゴリズムの効率と可読性はトレードオフになることがあるので、そこまで速度を必要としない場合は可読性を取ってもいいと思います。読者がアルゴリズムを理解できなくても、何をやっているかが分かれば中身を見る必要がありません。アルゴリズムの全てをコメントで解説することはしばし冗長になります。深い部分は読まないことも時には必要です。概要スライド初級編である程度リーダブルにしたババ抜きを、クラスを用いて拡張性の向上を図ります。クラスを使わない掃除では多くのグローバル変数が残り、箱に詰めただけの状態です。先ほどの構成要素を元に一からクラス構築し、それに初級編で掃除したコードを入れていきます。概要ババ抜きを元にリーダブル大富豪を作ります。コードの結合性を下げることで再利用が可能になります。上級編はまだ開講していないので、今回はここまでです。初級編からもう1度開催する予定です。人のコードを読む工程で苦戦するので、もっと簡単なゲームにするなど何か対策する必要がありそうです。Pagesを利用しました。一度環境構築をしてしまえば、Markdownでスライドが作れるので非常に便利です。CSSでデザインをいじれるのでカスタマイズ性に優れています。