Javaでアプリケーションを開発する際、テトリスやオセロといったゲームを作成してみたいと考えたことがある方も多いのではないでしょうか。
本記事では、インターネット上に公開されているテトリスの設計方針からJavaのシステム開発を行う際の工程についてご紹介していきたいと思います。
目次
Javaでのテトリス設計サンプル
Javaでテトリスの設計を学習するにはテトリスを題材にしたオブジェクト指向解説のPDFが非常に参考になります。
今回はこちらの資料を参考にJava開発で必要な工程についてご紹介していきます。
サンプルコード
Javaでテトリスを作成するサンプルコードは「Java テトリス」などで検索すると様々なページでコードが公開されています。
一例を下記にリンクさせてもらいます。
Javaのテトリス設計から開発工程を学ぶ
では実際に上述したPDFファイルを参考にテトリスを作成する上でどのような開発工程が必要なのかを紐解いていきましょう。
要求仕様
プログラム開発を始める際、どのような要求を満たす必要があるのか仕様をきちんと決めておく必要があります。
この要求仕様で漏れがあると、後続工程で発覚しにくく手戻りが大きくなってしまうため非常に重要な工程です。
PDFの記載(97p)では10個要求仕様が提示されています。
- ブロックが落とし穴の上部から落ちてきて,順番に積み重なる. (2)
- 落とし穴は縦22個,横10個の正方形のマスで構成されている.
- ブロックは7種類あり,それぞれ4つの(マスと同じ大きさの)タイルで構成されている.
- ゲームのプレーヤーは,レバーで落下中のブロックを左右に移動させることができる.
また,ボタンを押すことでそのブロックを回転させることもできる..(1)- タイルは横一列に揃うと消去され,その列より上部のタイルが消えた列の数だけ下がる.(2)
- ブロックが落とし穴の最上部まで積み重なるとゲームが終了となる.(3)
- タイルを消去すると得点が加算される.複数の列のタイルを同時に消去すると,
それだけ高得点となる.(2)- 消去したタイルの数に応じてゲームのレベルが上がり,ブロックの落下速度が速くなる.(2)
- 次に落ちてくるブロックは落とし穴の横に表示される.
- ブロックが落とし穴の上部から落ちてきて,順番に積み重なる.
ここではテトリスで利用するブロックの定義やブロックの操作に関するルール、ステータスの計算方法や表示方法などが定義されています。
システム設計
システム設計では、実際にJavaでテトリスプログラムを動かすために必要なハードウェアやソフトウェアを定義します。
実務では要件定義工程や基本設計が始まる前の段階で実施される設計作業です。
PDFの記載(118p)では6つの定義が掲載されています。
- アーキテクチャの全体構造の設計(C/S,3-tier,DB)
- ハードウェア環境(制約や条件)の決定
- ソフトウェア環境(実装言語,ライブラリ,フレームワーク)の決定
- サブシステム分割とインターフェースの定義
- GUI(UI)の設計
- DBのスキーマの設計,データの正規化
詳細設計
詳細設計では実際にプログラムを実装する上で必要なクラス情報などがまとめて定義されます。
また処理の流れに関してもシーケンス図などを用いてより詳細に定義されます。
- システムそのものを指すクラス
- 実体クラス
- インタフェースクラス
- 制御クラス
その他設計工程
設計工程はプロジェクトにより分割単位が異なりますが、一般的には「要件定義」→「基本設計」→「詳細設計」→「プログラム設計」→「実装」→「テスト」の流れで開発が進められます。
今回の資料でいうと要求仕様が要件定義工程、システム設計が基本設計、詳細設計は同じですがプロジェクトにより呼び名や担当範囲も変わります。
テトリス設計で作成されているJava設計書の役割
各資料には実務経験者でないと馴染みのないシーケンス図やクラス図といった成果物となるような資料が記載されています。
これらの役割がどういったものになるのかについても確認しておきましょう。
シーケンス図
シーケンス図では、処理の流れに関して具体的に記載し、データの流れや概要を掴みやすくするための設計書です。
クラスやオブジェクト間でのやりとりを時間軸に沿って表現します。
シーケンス図はUMLと呼ばれる統一モデリング言語の1つで表現され、相互作用図の1種として定義されています。
テトリスゲームの例では「要求仕様」と「詳細設計」の2箇所でシーケンス図が記載されており、記載の粒度が異なります。
画面上部の正方形の箱がオブジェクトを示し、通常左から右に流れるように矢印線で処理の制御を記述します。
クラス図
クラス図に関しても統一モデリング言語(UML)で記述された、システム内に存在する構成要素を図で表した構造図の一種です。
クラス図では一般的に3段構成で記載され、一番上がクラスの名前、中段がクラスに含まれる属性、下段にはクラスのメソッドや振る舞いが記載されます。
テトリスの例では「タイル」がクラス名、「位置」「色」が属性、「位置の安定」「位置の取得」「配置の検査」がメソッドに該当します。
また各属性やメソッドのアクセス修飾子やクラス間の相互作用も表現されるため、システム構成要素の概略を掴むのに役立ちます。
状態機械図
状態機械図では、UMLによりオブジェクトの状態遷移を表現するための図で、状態遷移が実施される条件などが記載されます。
クラス「ブロック」の例では、ゲーム実行中でかつブロックが落下中に関しては「移動」「回転」などの処理が可能ですが、ゲーム中断中は配置処理が不可能で、再度ゲーム実行中に戻ってきた場合には中断前の状態から再スタートするような内容が記載されています。
ライブラリ
ライブラリは既に動作することが保証された再利用可能な部品を集めたもののことを指しています。
Javaを含むオブジェクト指向のプログラミングでは部品の疎結合により再利用することを重要視しているため、こういったライブラリをいかに有効活用するのかが開発時間の短縮に大きな影響を与えます。
例えばテトリスのようなゲームをGUIで作成したい場合には、 Javaでは「Swing」や「awt」などのライブラリを利用して描画処理を行います。
こういった外部ライブラリを使っている場合、どのライブラリを呼び出しているか設計書として記載していないと内部で作成したコードなのか分からなくなってしまう可能性もあるため管理を行う上でも重要です。
さいごに: Javaでテトリスを作成してプログラミング技術を向上させよう
本記事では、テトリスを作成するためのオブジェクト指向設計資料からJava開発に必要な工程や設計の役割についてご紹介してきました。
正直全くの初心者がテトリスを0からいきなり作成しようと思うとハードルが高すぎて挫折してしまいかねません。
今回ご紹介したような設計資料とサンプルコードを確認しながら、実施に自分の環境で動かしてみて、少しずつ改造しながらどのような仕組みでテトリスが構成されているのか学習してみてください。
テトリスを作成するためのコードに正解はありませんので、上記サンプルコードを参考にしながらご自身でもオリジナルのプログラムを作成してみましょう。
一度手元で実際に動かしながら少しずつ機能変更や追加をして、役割を理解していく方法がおすすめです。