社畜ゲーマーの備忘録

しゃこぽめドットコム

Java

拾ったコードでJava勉強~シューティングゲーム編2~

更新日:

どうも、頭ぽめらにあんです!

今回からファイルの中身を見ていきます。

ではmainメソッドがある「Game.java」から見ていきましょう。冒頭の6行から↓

import java.awt.*;
import java.awt.event.*;
public class Game extends Frame{
public static void main(String args[]){
new Game();
}

まずは

import java.awt
import java.awt.event

について調べていきましよう。

はい。「一発合格Java認定試験」さんにお邪魔してきました。

「importを利用すると、特定の パッケージ内のクラスまたは インタフェースを、 完全限定名で指定しなくても呼び出せるようにできます。」とのこと。

どうやらJavaには標準でパッケージが用意されているらしく、それらを利用することでソースコードを簡単に書けるようになるみたいですね。

Javaの仕様を調べてみると、ユーザーインターフェースやイベント管理(○ボタンを押したら弾を撃つみたいな)を作成するためにこの2つのパッケージを使用しているみたいです。

パッケージをインポートするには、

import パッケージ名.クラス名;

の形式で宣言するようです。

次に「public class Game extends Frame」を見ていきましょう。

このextendsというのは継承を意味しており、継承することで継承元が持つメンバ(フィールド及びメソッド)を書かずとも有るものとして使えるようになります。(詳しくは一番かんたんなJava入門さんまで!)

継承元である「Frame」は「import java awt」をインポートすれば使用できるようです。

 

どんどんいきましょう。次は「public static void main(String args[])」を読み解いて行きます。

第一回で「プログラムの開始はすべてmainメソッドから開始される」と書きましたが、正確にはmainメソッドは、

① メソッド名が main② 引数が String 型の配列(可変長引数)③ static 修飾子が付与されているメソッドでなければいけません。

mainメソッドについてはTASK NOTESさんが詳しく書いているので一読するのをオススメします。理解がまだ及ばない私レベルの方は「mainメソッドはこうやって書く」と覚えておきましょう。

 

さて、次は「new Game();」部分です。でました、new演算子です。

解説サイトをを見て周りましたが、「クラスは設計書でインスタンスは設計書を基に作られた実体である」みたいな記述がたくさんあります。

全然わからんがな

と思いつつ、調べていくとnewというのはインスタンスコンストラクタが深く関係しているようです。順番に考えていきましょう。

インスタンスについてわかりやすく書いてる投稿がありました。こちらを熟読しましょう。

コンストラクタについてはこちら。

読みましたか?まとめると...

インスタンスとはクラスで宣言されているメンバ変数を所持したオブジェクトを作成する。

コンストラクタとは作成したインスタンスに初期値を与える。

といったイメージで大丈夫そうです。では今回のソースを見ていきます。

public class Game extends Frame{
public static void main(String args[]){
new Game();
}
Game(){
super("Shooting Game");
}
[Frameクラス]を継承した[Gameクラス]をnewでインスタンス化しています。

その後にsuper()でウィンドウタイトルを付けてますね。super()...??

 

はい、またまた一番かんたんなJava入門さんに助けられました。super()とは...

・記述するのはコンストラクタの一行目のみ。
・super()は一世代上の親クラスのコンストラクタを指す。
・super()が活躍するのは親クラスのコンストラクタに引数を渡したい時

とのこと。今回のソースコードだと、

[Gameクラス]の一世代上親クラスは[Frameクラス]です。

つまりsuper()で「Shooting Game」を引数に渡すことで、「Shooting Game」というタイトルが付いたウィンドウ(Frame)が作られることになります。

「元々のFrameはどうなってんだよ」という方はOracle Docsで詳細を確認していきましょう。

 

次は作成したウィンドウを、☓ボタンで閉じていく処理です。

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});

ここに関しては定型文というか、プログラミングでよくあるおまじないとして暗記するのが良いみたいです。
まぁそれも気持ち悪いので調べてみました。 すみません。ちょっとよく解りませんでした。

ここはちょっとスルーして復習しておきます。(すみません...)

次で最後です。コードの最後を見てみましょう。

setSize(500, 500);

MyCanvas mc = new MyCanvas();
add(mc);
setVisible(true);
mc.init();
mc.initThread();

「setSize」はFrameクラスの親クラスであるWindowクラスで定義されているメソッドです。

コイツを指定してあげるとゲーム画面の大きさを変えられます。

「MyCanvas」というのは「MyCanvas.java」から参照しています。「Game.java」のソース内には記載されてませんよ!

「Mycanvas」から「mc」という名前でインスタンスを生成し、「add」でFrameクラスに「mc」を追加してあげます。

「setVisible」もFrameクラスの親クラスであるWindowクラスで定義されているメソッドです。

コイツはフレームを表示するメソッドで、デフォルトでは非表示なのでtrueに設定して表示するようにしてあげます。(非表示にするにはfalseに設定します)

「init」というのは「initialize」の略で初期化意味しています。「MyCanvas.java」のinitメソッドとinitThreadメソッドという初期化メソッドを呼び出しているみたいですね。

初期化がなぜ必要か調べてみました。暗黙の初期値を使用すると思わぬエラーが発生する危険があるようですね。

初期化の詳細な内容は「MyCanvas.java」の内容に触れる時に読み解きましょう。

 

以上が「Game.java」の内容でした。

new演算子やパッケージのことがざっくりと理解できたでしょうか?

他クラスを参照していたりでわかりにくかったかもしれませんが、Javaの仕組みを理解するきっかけになればと思います。

次回は「MyCanvas.java」を見ていこうかな?とりあえず今回はここまで。

 

-Java

Copyright© しゃこぽめドットコム , 2018 All Rights Reserved Powered by STINGER.