すごろくゲームが出来ました!
というわけで、先日からコツコツと作っていたすごろくゲームが完成しました!
完成と言っても最初に想定していた機能を実装しているだけで、いま思い付くだけでもいろいろと不足している部分はあるのですが、とにかく完成です!
上記のgithubで公開していますので、コンソール上でrubyを動かせる方は、ぜひ遊んでみてほしいと思います!
苦労した点
ランキングの実装
このゲームは毎ターンサイコロを振って、一番先に20マス進んだ人が勝ちというゲームです。
で、ターン毎のランキングを表示しようとしていたのですが、どのようにすればランキングのアルゴリズムを実装できるかがわかりませんでした。
「順位付け アルゴリズム」で検索すると、参考になるアルゴリズムは出てくるのですが、今度はそれをどのようにこのゲームに当てはめればいいのかに迷う・・・。
「どのクラスに処理を持てばいいのか?」「どういうメソッドを使えば楽に実装できるのか?」「変数名、メソッド名は?」etc...
アルゴリズムがわからないだけでなく、OPPに慣れていないこともあって、どのように実装すればいいのかにだいぶ悩みました。
OPPでの設計
自分はソフトウェア開発の仕事をしていますが、オブジェクト指向プログラミングの経験はありません。
今回はRubyでの自作プログラム挑戦だったため、OPPにも挑戦しよう! と思ったのですが、書いてみても普段のプログラミングとあまり変わらない出来のソースに……。
とりあえず作ってみたクラスは、意味的に近い変数をまとめただけのクラスで、メソッドは全部外部に実装して処理……仕事ではC言語での構造体をよく使っていたため、クラスも同じ感じで設計してしまっていたのです。最初は「クラスにメソッドを定義する」という感覚が全然掴めずに、まったくOPPになっていませんでした。というか「クラスにメソッドを定義できていない」ということすらよくわかっていませんでした。
その後、web上のOPPについての解説記事や本を読んで、「メソッドをクラスに定義してないじゃん! 全然OPPじゃないじゃん!」ということにやっと気付いて、設計の方針を転換。それからもクラスをどういう風に分ければいいのかわからないまま、手探りで進めること数日……やっと完成に至りました。
まとめ
今回苦労したことの原因は、総じてコーディング経験が浅すぎることに起因するような気がします。
アルゴリズムがわからないにしても、検索の仕方が下手で時間がかかったり、参考にするにしてもどのように応用すればいいのかわからなかったり、そもそもOPP自体がよくわかっていなかったりと。
今回のプログラム完成を通じて、得られた経験値は小さくないと思っているのですが、「具体的に何が得られたの?」と聞かれると、うまく言葉に出来ません……アウトプットの練習のために作ったブログなのに、こんなんじゃダメですね。
このプログラムももうちょっといじるかもしれませんが、とりあえずはこれで一区切りついたかなと思っています。
完成した嬉しさのままにはちゃめちゃな文章を書いてしまったので、また改めて「何を得られたのか?」を整理したエントリをアップするかもしれません。
すごろくプログラムが完成しても、勉強はまだまだ続きます。
これからも頑張ります!