Java で作るアクションゲームと オブジェクト指向プログラミングの利点の

Java で作るアクションゲームと
オブジェクト指向プログラミングの利点の考察
経営情報学部経営情報学科
5111152
西尾侑也
目次
第 1 章 始めに…….………………………………………………………………………………p.3
第 2 章 関連研究……………………………………………………………………..….……… p.5
第1節
Java について………………………………………………………………..…...…p.5
第 2 節 コンパイルについて…………………………………………………………………p.5
第 3 節 プログラミング言語の開発環境の無償・有償…………………………..……….p.6
第 3 章 作成物の紹介….………………………………………………………………….……..p.8
第 1 節 アクションゲームの概要…………………………………………………….…..…p.8
第 2 節 プログラムの概要…………………………………………………………….……..p.9
第 3 節 ゲームの詳細………...……………………………………………………………..p.10
第4章 作成物の追加機能について………………………………………………………….p.13
第 1 節 追加機能の概要…………………………………………………………….……….p.13
第 2 節 自機の追加による 2 機同時操……………………………………………………...p.13
第 5 章 考察……………………………………………………………………………………..p.16
第1節 継承の効果 …………………………………………………………………………p.16
第2節 継承前と継承後のプログラム比較……………………………………………….p.16
第3節 新機能を追加した場合の変更量の差について……………………………….…p.17
第 6 章 まとめ…………….…………………………………………………………………….p.20
参考文献………………………………………………………………………………………….p.20
謝辞……………………………………………………………………………………………….p.20
第 1 章 はじめに
近年、技術の発展により様々な形でゲームが生み出されてきた。昔はTVに繋いでする
据え置き型のテレビゲームが一般的だったが、最近はインターネット環境が整ってきて、
一家に 1 台パソコンがあるような時代である。スマートフォンなどでも出来るソーシャル
ゲームや、パソコンを介してのオンラインゲームなどが、人気を博している。しかし、そ
の裏で PS4 などの据え置き型のゲーム機器の売り上げが悪くなっている。ゲーム機器の売
り上げが上がらない理由は、3DS などの携帯用ゲーム機のシェアを上昇してきたこともあ
るが、スマートフォンなどの非ゲーム専用機の台頭も理由に挙げられる。他にも据え置き
型のゲーム機のゲームソフトで、近年ミリオンセラーでは、100 万本以上の売り上げを挙げ
たソフトがほんの一部にすぎないのである。その一部とは 2010 年に発売された、New ス
ーパーマリオブラザーズ WII で 150 万本、それから現在、2014 年に至るまで据え置き型の
ゲーム機のミリオンセラー作品は存在していない。3DS などは、2014 年では妖怪ウォッチ
元祖/本家や、モンスターハンター4Gなど、携帯型ゲーム機では優に 200 万本を超える。
一昔前に発売されたファミコンのソフト、スーパーマリオブラザーズでは日本国内におい
ては約 681 万本、世界ではおよそ 4024 万本とギネス認定を受けるほどの売り上げを誇る。
今回私はプログラミング言語のひとつ、Java 言語を用いて簡単なフリーゲームを作成し
た。なぜプログラミング言語の中で Java 言語を選んだのかを述べると、Java 言語は他の
プログラミング言語には標準機能としていない機能も実装されており、パソコンだけでな
く、スマートフォンなどでも使用できることなどから非常に高い汎用性があることが証明
されている。もちろんプログラミング言語には向き不向きがそれぞれ存在する。ゲーム開
発には Java 言語よりも C 言語や C++言語のほうがゲーム作りに関しては重要とされてい
るが、Java 言語にはそのアドバンンテージを補うように様々な OS やスマートフォンなど
で対応している汎用性がある。
TIOBE
SOFTWARE という、サイトで調べてみた結果[1]、
世界的に Java 言語がゲームアプリにどれくらいの割合で作られているのかと言えば図 1 の
通りである。Java 言語は世界に 2 位の評価だ。グラフを見てわかる通り 1 位の C 言語と 2
位の Java 言語は 3 位との差を大きく開いている。
C
PHP
C++
Objective-C
JAVA
3.04%
17.47%
6.10%
9.06%
14.39%
0.00% 図 1 TIOBEindex
5.00% によるプログラミング言語の世界統計
10.00%
15.00%
他にも国内での企業統計でいうならば下の図 2 のような結果になった[2]。
20.00%
VB.NET
29.00%
C++
16.00%
C
15.00%
JAVA
0.00%
41.50%
10.00%
20.00%
30.00%
40.00%
50.00%
図 2 ITR による国内企業統計
図 2 から、Java 言語は国内で最も利用されている言語でありおよそ、4 割以上の企業が
Java を利用しているということである。Java 言語を使用して製作された Android 用のス
マートフォンなど、アプリ製作が特に人気が高く社会的にも認知度が上昇している。この
ように Java 言語にはゲームだけでなく、他にも応用の利く使い勝手の良い言語であり、社
会的にも重要視されていることに注目し、Java 言語を用いて製作することにした。本論文
の目的はこの Java 言語を使いゲームをオブジェクト指向プログラミングで作成することの
利点を明確にすることを目標とする。
今回、製作したゲームは横から流れてくる敵をキーボードで、自機を動かし避け続ける
回避ゲームである。敵キャラに 1 度でも当たるとゲームオーバーである。ゲームオーバー
すると数秒後に再開、3 回ゲームオーバーすると自動でゲームが終了する仕様になっている。
これらに自分が考えたアイディアを付け加えて新しいゲームにする。
第 2 章では Java 言語やフリーゲームに関しての関連研究について述べ、第 3 章では作成
物の紹介を行い、第 4 章では作成物の追加機能の紹介、第 5 章では考察を述べる。
第2章
第1節
関連研究
Java について
Java 言語は、1995 年に Sun Microsystems 社によって開発された、オブジェクト指向の
プログラミング言語である。Java 言語の特徴としては、まずバイトコード(Byte code)と
呼ばれる形式に変換されるため、特定のプラットフォームに依存しない。つまりどのよう
なハードウェア、OS でも仮想マシンを使えば、さまざまな環境でコンパイルの必要もなく
高速で実行できるということであるが、そもそも、Java 仮想マシンとは、Java Virtual
Machine(JVM)ともいい、バイトコードを実行するための環境提供するための、ソフト
ウェアである。実際にあるマシンではないので、仮想マシンという呼ばれ方をしているの
である。Java 言語の有名な特徴の 1 つとしては、1 度書けばどこでも実行できるというこ
とだが下の図 3 では、windows 用、Linux 用そして、Mac OS 用とそれぞれの、OS ごとに
用意することによって、OS 間の差異を Java 仮想マシンで通すことで、ソースコードを一
度書いてしまえば、修正を施すことなくあらゆるコンピュータ上で実行可能である。短所
は他の言語に比べて実行時間がやや遅くなってしまうことである。
図 3 Java 仮想マシン
第2節
コンパイルについて
実行する形式に変換するソフトウェアとしてコンパイラというものがある。これはプロ
グラミング言語で書かれたプログラムのソースコードを、バイトコードなどの中間言語に
翻訳するプログラムである。コンパイラによる翻訳する工程をコンパイルと呼んでいる。
プログラミング言語で書かれた言葉をコンピュータが、しっかりと理解するために翻訳す
る機能としてコンパイルが必要である。こういった機能を持ったプログラムは初期のイギ
リスのコンピュータのひとつでもある EDSAC においてもすでに存在していた。
従来のプログラミング言語には、大きく分けてコンパイル方式とインタープリタ方式が
ある。コンパイル方式では、実行に先だって 1 度だけ、プログラムを一括して機械語に変
換し、高速で実行が可能というのが特徴的である。一方、ソースコードの修正から実行ま
でのコンパイルの時間が必要なために開発時など、修正と動作を繰り返す場合の作業効率
が悪い。だが、近年では分割コンパイルなど、ひとつのプログラムの全てのソースコード
をコンパイルするのではなく、モジュール毎に分けてコンパイルし、ライブラリなどのあ
らかじめコンパイルされているものと合わせ、実行するというものも存在する。
インタープリタ方式ではプログラムを実行するたびに、機械語に変換しながら実行を進
めるものでプログラムを 1 行ずつ解釈し、CPU に命令して実行するタイプの方式である。
プログラムの未完の部分やミスがある場合にも任意のところまで実行、途中中断すること
も容易である。しかしプログラムを逐次解釈しながら実行する方式なので、実行速度が遅
いという欠点がある。長所は対話性にすぐれておりプログラムの開発効率が良い点にある。
Java は仮想マシンという特別な実行環境を使うので,中間コードだけの生成で終了するが、
コンパイラはコンパイル後,バイナリーコードになり、それをリンクすることで,実行フ
ァイルになる。Java 言語で作成することが出来るプログラムには、アプリケーションとア
プレットとサーブレットの 3 種類がある。アプリケーションとは Java 仮想マシンによって
単独で実行することが出来る。アプレットは Java 対応の Web ブラウザで実行する Java プ
ログラムのことである。サーブレットとは Web サーバーの中でサーバーの要求に応じて実
行する Java プログラムのことである。
第3節
プログラミング言語の開発環境の無償・有償
表 1 プログラミング言語の無償・有償の一覧表
オープンソース
Java
無償
有償
オープンソース
C-C++
Python
無償
有償
オープンソース
無償
有償
Anjuta ・ BlueJ ・ Eclipse ・ IntelliJ IDEA(Community Edition) ·Kawa ·・
KDevelop ・ NetBeans
Compilr ・Geany ・JBuilder ・ JDeveloper ··
Sun Java Studio (superseded by NetBeans)
IntelliJ IDEA ・ Servoy ・VisualAge ・Visual J++
Anjuta ・ Code::Blocks ·Dev-C++ ・Eclipse ・Geany ・KDevelop
·Visual Studio Express ・Xcode
C++ Builder ・CodeWarrior ・VisualAge ・Visual Studio
PyCharm (Community Edition
PyCharm (Community Edition)
総合開発環境は IDE (Integrated Development Environment)ともいい、コンパイラや
テキストエディタ、デバッガとあらゆる機能を 1 つにまとめ利用できるようにしたもので
ある。そして、上の表 1 は世界で最も人気のあるプログラミン言語の中から、3 つ選んで表
にしたものである。オープンソースというのはインターネットなどを通じて無償、フリー
で公開、誰でもそのソフトウェアを改良や再配布などが行えるものである。業界でも高い
人気を誇る Java 言語 C/C++言語は IDE の数も多い。Python のオープンソースとシェア
ソフトに同じ名前があるのは、これがデュアルライセンス、またはマルチライセンスとい
う形態であるからである。これは利用または再配布するために、どちらかのライセンスを
選べるというものである。
ここで、表 1 の IDE のひとつで今回のゲーム製作にも使用されたツール、Eclipse につ
いて詳しく説明する。
Eclipse はアメリカの IBM 社によって開発された総合開発環境
(IDE)のひとつ、高性能でオープンソースであり、Eclipse 自体は Java 言語で記述され
てはいるが Java 言語以外にも、複数の言語に対応している。元々Eclipse とは 1990 年代
後半、IBM 社が開発を進めていたツールをソフトウェア化して、2001 年 11 月に IBM 社は
複数の企業と共に Eclipse Board of Stewards を設立して、オープンソース化したものであ
る。その後、2004 年に非営利組織 Eclipse Foundation に Eclipse の全てを移管している。
共通プラットフォームと呼ばれる開発ツールで、Eclipse の機能のひとつとして、総合環境
に後からプラグインとして、様々な機能を追加することが出来るよう設計されている。ち
なみにプラグインとは、アプリケーションソフトウェアの機能を拡張するため、追加され
るプログラムのひとつである。拡張性は非常に高く Java 開発の環境自体が標準的に装備さ
れている。プラグイン次第で Perl や C++、C#、JavaScript など、様々な言語が対応可能
となっているのである。Eclipse には初心者にも扱いやすいように、入力を支援する機能が
多数装備されており、全体的にプログラマーの負担を軽減してくれる。実際に初心者に始
めてすぐに役立つ機能は以下のいくつかである。
・自動的にコンパイルしてくれる。
・描いたプログラムの実行が簡単にできる。
・ソースコードのエラーしている箇所を教えてくれる。
・変数やメソッドなどの名前を変更しやすい。
Eclipse は 2006 年から毎年最新バージョンがリリースされている。Eclipse3.2 では 10 の
オープンソースプロジェクトに合わせたリリースを行っている。毎年のリリースで Eclipse
には下の表 2 に示す通り、毎回コードネームが付けられている[3]。
表 2 Eclipse のコードネーム名
バージョン
3.2
3.3
3.4
3.5
3.6
3.7
4.2
4.3
4.4
リリース日
2006/06/30
2007/06/29
2008/06/25
2009/06/24
2010/06/23
2011/06/22
2012/06/27
2013/06/26
2014/06/25
コードネーム
Callisto
Europa
Ganymade
Galileo
Helios
Indigo
Juno
Kepler
Luna
由来
木星の第4衛星カリスト
木星の第2衛星エウロパ
木星の第3衛星ガニメデ
ガリレオ衛生の発見者ガリレオガリレイ
ギリシャ神話の太陽神ヘーリオス
藍色
6月を意味する June の由来
ドイツの天文学者ヨハネス・ケプラー
月
このように Eclipse にはコードネームが名づけられている。3.4 までは全てガリレオ衛星の
衛星名が名付けられている。バージョンについては 3.8 以降からは存在しているらしいが、
すでに 4.2 のリリースが決定していたことから Web 上では公開されないということである。
第 3 章 作成物の紹介
第1節
アクションゲームの概要
作成したゲームはジャンルで言えば、横スクロール型回避アクションゲームである。こ
のゲームには「撃つ」という動作がないため、一見下の図 4 を見ればシューティングゲー
ムに見られてしまうがそうではない。第 1 章で述べたとおり、自機のロケットをキーボー
ドで操作して、敵である隕石に 1 度でも当たればゲームオーバーして、3 回繰り返すとゲー
ムが終了する仕様である。
図 4 ゲーム画面
(1) ステージとキャラクターについて
まず、ステージはこの 1 面のみである。自機はキーボードを使い上下左右に移動するこ
とが出来るが、何もしなければゆっくりと下方へと降りていく。図 4 の左側の矢印で示さ
れているのがプレイヤーの動かす自機のロケットで、自機の操作はキーボードで行い、ス
テージの上下左右がある限り移動することが出来る。ゲームオーバーになるのは敵の隕石
に当たった場合のみである。基本このゲームにクリアの要素はないため、敵隕石をどれだ
け回避できるかがゲームの目的である。アイディアとしてはもう 1 機追加してどちらが長
く敵に当たらずにいられるかの 2 人対戦の形式にしても良かったのだが、今回は 1 人用に
して、別のアイディアを第 4 章で紹介する。
(2) ゲームオーバー画面について
図 5 ゲームオーバー画面
自機が隕石に当たるとゲームオーバーである。ゲームオーバーになると図 5 にある通り
ゲームオーバーの文字とタイムが表示される。このタイムはゲームが始まってから、ゲー
ムオーバーになるまでのもので、3 回の繰り返し終了するまで毎回表示される。
第2節
プログラムの概要
この、アクションゲームの main メソッドに指定しているクラスは、kaihigamemain ク
ラスであり、このクラスは Thread クラスを継承していて、カウント関数を用いてゲームオ
ーバーが、3 回カウントされたらシステムが終了するようになっている。このカウント関数
がなければ、ゲームオーバーしても終了せず無限ループしてしまう。そしてこのクラスの
中でステージや自機、自機を実際に動かすために扱うキーなども、設定している最も重要
なクラスである。他にも敵の絵柄によって inseki クラス、inseki02 クラスと分けており、
これらは敵隕石の当たり判定や、出現位置などをチェックしている。それらの動きをチェ
ックしている dousa クラスがある。
図 6 アクションゲームのクラス図
第3節
ゲームの詳細
本節においてはプログラムの一部について説明する。説明するのは kaihigamemain クラ
ス、そして敵キャラクターである inseki クラス、そして dousa にクラスついて紹介する。
inseki02 クラスについては inseki クラスと同じ説明なので省略する。
(1) kaihigamemain クラス
図 7 フローチャート
このクラスは、main メソッドを持っているクラスである。図 7 のフローチャートは
kaihigamemain ゲームのクラスのもので、ゲームが開始してから初期化を行い、ゲームオ
ーバー画面時に表示されるタイマー機能が作動して自機のロケット、敵機の隕石の動作処
理、それから、ステージや自機や敵の描画処理を行い、ゲームオーバーを 3 回したかどう
かを条件式に最初にループする。要するに、このクラスは、ゲームの根幹部分を担ってい
るクラスである。バッファリングやキーアダプターなど、この中では様々な処理が行われ
ている、最も重要なクラスである。主にゲームに使用される画像のチェック、自機や敵の
描写、自機の動き、ゲームオーバー機能などを管理している。
図 8 kaihigamemain クラス
例えば、図 8 のコードはゲームオーバー機能について書かれたものである。このゲーム
にゲームクリアという機能は付いていないので、事実、このゲームオーバー機能が、この
ゲームの終点になる。順にコードの上から 3 行目のゲームオーバーの文字、7 行目は次の自
機の開始位置、9 行目からの for 文は敵隕石が自機と当たった時の条件式、そして 14 行目
の long finish というコードだが、これはゲームが開始された直後から、ゲームオーバー
するまでのタイムである。正確には 17 行目で最後に出た数字から、最初の 0 を引いて分か
りやすく「秒」に直して表示させている。このタイマー機能は、単に自分がどれだけ回避
し続けられたかを測るもので、便宜的にタイマー機能と呼んでいるが、スコア機能でもか
まわない。
(2) inseki クラス
図 9 inseki クラス
このクラスは、敵隕石について書かれたソースコードであり、inseki02 クラスとほぼ同
じことが記述されており dousa クラスを継承しているサブクラスとなっている。このクラ
スでは主にランダム関数を用いて敵隕石の出現位置について、自機のロケットと当たった
場合の当たり判定の領域などを指定する。図 9 の上から順に 2 行目から隕石の画像を呼び
出しており、3 行目や 4 行目で、出現位置がランダム関数を用いて設定している。そして
12 行目からの文は、自機との当たり判定について書かれており、if 文を用いて指定してい
るのである。これは自機のロケットと敵の隕石の画像の接触する範囲を設定しているのだ
が自機や敵の画像がおよそ 40×40 と幅広いステージに対して、とても小さく設定してある。
そして 12 行から下の行の rokeruto_x などの x の意味は、y は上下で x は左右の値を示して
おり、自機と敵の間を&&という「~かつ~」という記号で挟み、左右両方とも正しいなら
ば if 文に続く命令を実行するというものである。つまり、自機と敵が接触した場合を正し
いとされ、次の処理であるゲームオーバー機能が実行される。
(3) dousa クラス
図 10 dousa クラス
このクラスでは、敵の隕石などの動きについて書かれているソースコードである。この
ゲームの敵の隕石は単純に横から一直線に流れてくるだけなのだが、敵の隕石が反対方向
へ流れていってしまうなど、正しく動いてくれないというバグが簡単に発生してしまうク
ラスなのである。
このゲームは縦に短く横に長いと広いステージに設定してあり横 1200×縦 650 である。
そのままの数値で設定してしまうと自機ロケットが画面外にはみ出てしまうので横 1180×
縦 640 など少し抑えた数値に設定してある。敵隕石の出現はこの高い数値の外に設定して
あるので、実際は目に見えないところまで敵隕石は拡散して出現している。
第4章
第1節
作成物の追加機能について
追加機能の概要について
今回、新しく自機の追加をした。この追加は機数を追加したという意味ではなく、動か
す自機を 2 機に増やしたという意味である。この機能を追加するために、図 11 の赤丸で示
した kaihigamemain クラスを変更し、jiki クラスと jiki02 クラスを追加した。追加したア
イディアの説明については、以下の節にて詳しく説明する。
集約関係がおかしい.
いらない線に←マークをつけておきます.
間違い,上の集約の図にしてください.
修正してください.
削除
図 11 変更したクラス図
第2節
自機の追加による 2 機同時操作
本節では新しい機能として自機の追加を行った。まずこのゲームは自機をキーボードで
動かし、右側から迫る敵の隕石を避けるゲームである。そこで、1 つのアイディアとして、
自機を 1 機ではなく 2 機に増やし同時に左右両手で操作することにした。自機については
新たに jiki クラスと jiki02 クラスを作成した。
新しい自機について書かれているのが jiki02
クラスである。jiki クラスについては jiki02 クラスのスーパークラスである。
図 12
jiki02 クラス
この jiki02 クラスは extends を使い、
jiki クラスに継承されてサブクラスとなっている。
jiki クラスと同じ処理や、改めて宣言しなくてよい変数などは、スーパークラスである jiki
クラスに書いてあるため、違う動きやキーについて書かれている。新しい自機がゆっくり
と上方に動いていく処理の kaihi_sd という処理、move メソッドから、for 文でゲームオー
バーになる処理や、図 12 のコメントにある通り if 文でキーボードが押された場合、cy が上
下で cx が左右にどれだけ移動するかという処理、そして自機の活動範囲についてである。
このゲームではキーを 8 個も用いるため、jiki クラスで下の図 13 にあるようにメソッド
で キ ー を押 し た 場合 に呼 び 出 す keyPressed や 、 キ ーを 離 し た場 合に 呼 び 出さ れ る
keyReleased でキーをそれぞれのクラスで指定している。
図 13
jiki クラスの keyadapter クラス
そして、図 14 は、jiki クラスに書いてある。jiki02 クラスで改めて宣言しなくてもよ
い変数などを書いてある。jiki クラスの親クラス、またはスーパークラスとしてもってい
るコードである。継承をしているので jiki02 クラス自身でも定義しているような動作に
なるのである。
図 14 jiki クラス
図 15 新しい自機の画像
元の自機は矢印通りの動きに合わせて、放置しているとゆっくりと下方へ降りていく仕
様になっているのに対し、図 15 の赤丸で囲んである新しい自機は、上下左右がすべて反転
しており、上方にゆっくりと登っていく仕様になっている。つまり、左右で全く違う動き
を制御しなければならないということである。右手で丸を書き左手で三角を書くのと同じ
行為である。このように自機を追加し、また個別の操作が可能にすることによって自機の
追加で新しい機能の作成とした。
第 5 章 考察
第1節 継承の効果
継承とは、オブジェクト指向の要素のひとつで、あるオブジェクトが他のオブジェクト
の特性を引き継ぐ場合のことである。つまり既存のクラスの構造をベースに新しいクラス
を定義する。クラスの再利用の仕組みである。1 つのクラスをベースにできる仕組みを単一
継承、複数のクラスをベースにできるのが多重継承と呼ぶ。元になるクラスを親クラス(ス
ーパークラス)
、新しく定義されるクラスを子クラス(サブクラス)と呼び、継承すること
によって、サブクラスは変数の定義やメソッドなどを引き継ぐことができる。継承するこ
とのメリットは、すでに書いてあるソースコードを再利用しながら、そこに新しく機能を
実装することができるというものである。この効果で繰り返し同じコードを書く必要がな
くなり、作業効率も上がる。
第2節 継承前と継承後のプログラム比較
本論文では、Java 言語を用いてアクションゲームを作成した。そして、新しい自機の追
加とともに、jiki クラスを 2 つ新たに発生させ、このゲームの設計自体を変更した。この際
の重要な変更点は jiki クラスを jiki02 クラスに継承させたことである。
図 16 継承前コード
図 17 継承後コード
上の図 16 の 2 列のコードは継承を行わずに、jiki02 クラスを作成したものである。そし
て、図 17 はすでに紹介した図 12 と同じもので、継承した場合のコードである。図 16 の赤
線で示した部分、変数、ゲームオーバー機能、キーアダプタークラスなど、継承後にスー
パークラスである jiki クラスでまとめて書かれている部分である。図 16 の 12 行目と図 17
の 2 行目が同じ、自機がゆっくり上に上っていく処理で、元の自機とは違う動きのため、
jiki02 クラスで書かれている。次に、図 17 の 12 行目では move メソッドが新たに書かれ
ており、そこでは図 16 の 15 行目からの for 文での当たり判定、28 行目のキーが押された
場合の処理、33 行目の自機の活動範囲まで、新しい自機を動かすのに必要な処理が書かれ
ている。赤線で示した箇所が、継承で引き継ぐ処理で、番号で説明した箇所が元の jiki ク
ラスとは違う処理である。
第3節
新機能を追加した場合の変更量の差について
(1)3 機目の自機を追加した時の変更量
3 機目を追加した時の変更量は、継承しない場合は第 5 章 2 節の図 16 ような長いコード
など、図 18 のように jiki クラスの 3 倍のソースコードを書く必要がある。自機を動かすの
に必要な変数の定義やゲームオーバーの処理やキーアダプタークラスなど、例え共通の処
理だったとしても、同じコードを 3 回書かなくてはならない。継承する場合は、jiki クラス
と、前節の図 17 のような短いソースコードを図 18 の通り、2 機分で済む。継承すること
によって、継承しない場合に書いていた、本来書かなくてはならないような処理でも、共
通の処理ならば、jiki クラスで書いてコードを再利用、変数やメソッドを引き継ぎ、処理を
書いていなくても、同じ動きをすることができるようになる。継承することの利点は、他
に機能拡張する場合にもサブクラスに加えたりしてやりやすくなり、拡張後の管理も簡単
であること、クラスの記述が図 18 を見てわかる通り、簡略化されることである。
(2)自機の攻撃機能を付けた時の変更量
図 18 3 機目を追加した場合のイメージ図
攻撃機能を付けた時の変更は、クラスの中に攻撃機能用のメソッドを作成するのだが、
継承しない場合は、jiki クラスに kougeki()メソッドを書く。例え同じ内容の攻撃機能だっ
たとしても、下の図 19 のように、自機が 3 機ある場合、それぞれの jiki クラスに書かなく
てはならない。結果、3 機分のメソッドを書かなくてはならなくなる。継承する場合は、
kougeki()メソッドを 1 回書くだけで済む。jiki クラスに書いておけば、サブクラスとして、
jiki02 クラスなどはメソッドを引き継ぐことができ、メソッドを書かなくても、攻撃機能を
持たせることができるのである。そうすれば開発の効率も上昇する。共通の動きはまとめ
て管理するため、複数のクラスをまとめて取り扱う記述を行うことも可能である。
図 19 攻撃機能を追加した場合のイメージ図
(3)変更量のまとめ
上記の(1)
、
(2)の結果、継承しない場合と継承した場合の変更量の差は大きいことが
分かった。
(1)の 3 機目の追加も(2)の攻撃機能の追加の処理も共通しているのは、継承
しない場合は、それぞれにあるクラス分だけ処理を書かなくてはならないということであ
る。今回のケースでは、jiki クラスは 3 つあったため、それぞれ 3 回も同じ記述をしなけれ
ばならなかった。そして継承した場合は、jiki クラスに 1 回だけ記述すれば良い。あとの 2
つの jiki クラスはサブクラスであるため、スーパークラスである jiki クラスと同じ動きを
することができる。3 回書かなければいけないのと、1 回書くだけで良いのとで、継承をす
るのとしないのとでは、変更量の差が大きい。そして変更する際に変更量が少ないのは、
明らかに継承した場合の方であるともわかる。このことから継承すれば 2 回分のコードを
書かなくて済み、その分時間が短縮され、記述も簡略化、ゲームに新しい機能を追加した
い際の管理も簡単である。要するに、ゲーム制作に Java のオブジェクト指向の継承を用い
るのは非常に効果的である。
第6章
まとめ
本論文では参考書を参考にして Java 言語を用いてアクションゲームを作成した。内容と
しては単純な回避ゲームで、自機の画像や敵の隕石の描画処理などを行い作成した。k
aihigamemain クラスから新たにオブェクト指向の継承を利用して、jiki クラスと jiki02 ク
ラスを新たに発生させ、jiki クラスをスーパークラスとして継承させて、jiki クラスと jiki02
クラスそれぞれ操作の違う自機を 2 機作成した。これによって、継承を利用すれば、例え
違う内容の動きを持った自機でも、本来書かなくては動かないような処理も、2 機目からは
簡略化することが可能、3 機目を作ろうとしても同じようにサブクラスにすれば jiki02 クラ
スのような短いコードで済むことがわかった
今後の課題として、今回作成したオリジナル機能を実装したアクションゲームは自分で
考えたオリジナル機能が少ない点にある。今後は、シューティングゲームなど、第 5 章 3
節で書いた、攻撃機能を実装するなど、パソコン上だけでなく違うデバイスでも動くプロ
グラムを Java 言語で作成していきたい。
参考文献
[1]TIOBE SOFTWARE:TIOBE Index for January 2015.
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
[2] 株式会社アイ・ティ・アール: ITR 企業の IT 戦略アドバイザー、2013.
http://www.itr.co.jp/company_outline/press_release/130919PR/
[3]システム技術者向上委員会:-Improvement Committee for System
Engineers-、2013.
https://www.facebook.com/permalink.php?id=341862829264034&story_fbid=403077079809275
[4] 長久勝、第 2 版 Java ゲームプログラミング アルゴリズムとフレームワーク;ソフ
トバンククリエイティブ、2007.
謝辞
花川ゼミを共に歩んできたゼミ生の皆様に感謝します。いつも陰ながら支えてくれた両
親に感謝します。本論文の添削やアドバイス等数々のご指導をしてくださった花川典子教
授に深く感謝します。