ゲームを開発してみよう

この課題では、複雑でどこから取り組んだらよいか分からないような課題に取り組み、自分でプロジェクトを完成までガイドしていく方法を習得するのが目的です。

特に、以下のような考え方を学びます。

分割統治法
大きな一つの問題を、より単純な複数の問題に分割し、ひとつづつの問題を解決していくことで、全体の問題を解決するという考え方です。
Minimum Viable Product
最小限使うことのできるプログラムをまず作成し、実際に使ってみてから、新しい機能を追加していくという考え方です。実際には不要な機能の実装にかかる時間を減らし、実際に使う上で重要な部分を速く見つけられるメリットがあります。
チケット駆動開発
開発の目標を「チケット」と呼ぶ細かい単位に分割し、ひとつひとつ達成していくことでソフトウェアが改良されていくという考え方です。
自動テスト
プログラムが正しい動作をしていくかチェックするためのプログラムを書き、バグを発見するとともに、プログラミングの目標を明確化します。

ゲームの分析と目標設定

  1. ポケモンというゲームは何かについて、構成する要素にもとづいて短く説明してください。例えば、バトルシステムやキャラクター育成、ストーリーなど、どのような観点でゲームを分けることができるかの分類方法を自分で考えて、それぞれの内容を短く要約して説明してください。
  2. ポケモンを構成する要素の中で、本質的な要素は何だと思いますか?言い換えると、ポケモンを他のゲームや遊びとは異なり、魅力あるゲームにしているのは、どのような面白い要素があったからだとあなたは感じましたか?ポケモンを遊んだことのない人でも「面白い場面」が再現できるように、ゲームのルールを論理的、具体的に説明してください。
  3. その他の要素は、2.で説明した面白さを引きだすのに、どのようにかかわっていますか?
  4. 問題2で説明したポケモンの面白さをより面白くするためのアイデアをいくつか創作してください。そして、そのアイデアが問題2で説明した面白さをどのように引き立たせ、強化するかを説明してください。
    1. 面白い要素を複雑化したり、派手にしたりする方法で、より面白くする案を考えてください。
    2. 面白い要素とは別な脇役を用意することで、面白い要素を引き立てるような案を考えてください。

Minimum Viable Productの作成

ゲームの分析と目標設定でみつけた最も重要な要素を実装し、その部分だけ遊べるゲームを作成してください。

チケットの作成

このゲームに付け加えたい機能をひとつづつ挙げ、チケットを作成してください。

チケットの内容は、機能の追加だけではなく、ゲーム内に表示すべき「何か」を表す変数を定義するというチケットも必要な場合は作成してください。

どの順番でチケットを完了させることができるか、考えてください。

スプリント・マイルストーンの作成

作成されたチケットのうち、実現すれば達成感のあるようなひとまとまりの機能のかたまりをリストアップします。これをマイルストーン(一里塚)と呼びます。

スプリントとは、短距離のダッシュをあらわします。どこかに急いでいくときに、息切れするまでは走り、疲れたら歩くというのを繰り返すと思いますが、この「息切れするまで走る」ことの一回一回をスプリントと呼びます。

スプリント作業中はこの機能の実現に集中し、作業中に見つけた今回のマイルストーンとは関連の薄い不具合やアイデアは、新しくチケットを作るだけにします。

テストの作成

プログラミングで実装する関数や変数をイメージし、どのように使うのかを先に決めてしまいます。

正常に動くとどうなるかを記載します。trueになるはずの式をassertで表現します。また、異常な入力や例外的な入力(例えば対戦相手のモンスターのHPが最初から0であった場合など)に対しても、どのような対応をするのかを決めて置き、想定する動作をテストプログラムに書いておきます。

機能の実装とバージョン管理システムへのコミット

チケットに書かれた内容をこなし、一通りの実装作業が終わったら、講師は作業結果をバージョン管理システムへ登録します。バージョン管理システムを利用することで、どのような目的でコードが編集されたのか一目瞭然になり、問題がおきたときに見直しやすくなります。

スプリントの間、プログラムの更新とバージョン管理システムへの登録を繰り返し、マイルストーンが達成されたらスプリントは終了となります。

スプリントの間達成が困難だと判断したチケットは、先送りにすることもできます。

繰り返し

マイルストーンの作成し、スプリントで機能を実装していく流れを繰り返します。