データベースとは?|初心者でもわかるプログラミング学習入門
GEEK JOB編集部
今回は、前回の記事で作ったお絵かきソフトの延長線として、簡単なシューティングゲームを作成することで、プログラミングにおいて重要な「オブジェクト指向」の理解を深めていこうと思います。
ただ、「オブジェクト指向」は理解するのに少々時間がかかる概念ではあるので、プログラマーを目指そうとしている方であれば、メンターの指導を無料で受けながらプログラマーとしての就職までサポートしてもらえる当社の『GEEK JOB プログラミングキャンプ』に参加するといいかもしれません。
Javaでゲームを作るには、Slick2Dなど専用のライブラリがありますが、本記事の目的は、ゲームを作ることそのものではなく、ゲームを作ることを通じてプログラミングについての理解を深めてもらうことなので、あえて専用のライブラリは用いないことにします。
まず前回と同様、以下のようなGUIを作成してください。
コードは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package simpleshooting; import java.awt.Color; import java.awt.Graphics; import javax.swing.*; public class SimpleShooting { public static void main(String[] args) { JFrame frame = new JFrame("SimpleShooting"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setLocationRelativeTo(null); Field field = new Field(); frame.add(field); frame.setVisible(true); } } class Field extends JPanel { public Field() { setSize(600, 400); setBackground(Color.white); } @Override public void paintComponent(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); g.setColor(Color.red); g.fillOval(100, 100, 50, 50); } } |
前回と違って背景色を設定していますが、それ以外はほとんど同じものです。
今回作るのは、お絵かきソフトではなくゲームなので、JPanelを継承したクラスの名前をCanvasからFieldに変更しています。本質的な違いはありません。
本記事では、前回の記事の内容を引き継ぎつつ、以下のアウトラインに沿って進めていきます。
前回やらなかったKeyListenerとActionListenerを使い、キーボードの入力に応じて移動する自機と、時間経過で移動する弾を作る。
Fieldクラスに入れていた自機や弾を別のクラスに抽出する。
同時に、ファイルも分割してコード全体を見やすくする。
敵をListで管理する。foreach文を理解する。
Player、Bullet、Enemyに、共通のクラスGameObjectを継承させることで、描画や更新を一元的に行う。
オブジェクト指向の華とも言える、ポリモーフィズムについて説明する。
Enemyを継承して敵のバリエーションを作り、それらをField側から単一の関数で動かす。
わりと感動するポイントです。
当たり判定作成の為に、Player、Bullet、Enemyにそれぞれ味方属性、敵属性を付ける。
単純な数字で管理したときとの違いを明確化する。