Javaは Webシステム開発、ioTデバイス開発、さらにAndroidアプリ開発などでも使われており、幅広い用途で使われる汎用言語です。
この記事では、Javaでゲーム制作をするための方法や開発環境について解説していきます。
Javaでゲーム開発はできるのか?
プログラミングを始めた動機が、ゲーム開発をしてみたいという理由の人もいるでしょう。
では、Javaでゲーム開発はできるのでしょうか?
結論から言えば Javaでゲーム開発は可能です。しかし、本格的な3Dゲームのようなアプリを制作が出来るのかと言えば難しいと言えます。
とはいえ簡単なゲームであれば、問題なくJavaで開発することができ、初心者プログラマーにおすすめです。
Javaでゲーム開発をしながら学ぶメリットには、自分で書いたプログラムがゲームとして動作するので、目に見えてやりがいを感じられるます。また、最初はボタンを1回押すだけの簡単なゲームであったとしても、アクションを増やして少しずつステップアップされることで、楽しくプログラミングの学習ができます。
Javaで開発されたゲーム
Javaで開発されたゲームで有名なのが「Minecraft」です。ブロックを組み合わせて自由に物を作れるゲームは、子供から大人まで多くの人に人気のゲームで、2019年2月には、Minecraft販売本数が1億7600万本を突破し、あの誰もが知っているテトリスを超え「世界一売れたゲーム」になりまた。
Minecraftは PC以外にもスマホアプリ、Nintendo Switchなどでも動作し、すべてがJavaで制作されているわけではありませんが、Javaで制作された「Minecraft Java Edition」は、Windows、Linux、MacOSのクロスプラットフォームで動作します。
ゲーム開発に必要な知識
Javaでゲームを開発するために必要な知識には、次のものが挙げられます。
プログラミングスキル
当然ですが、Javaでゲームを開発をするためには、Java言語に関するプログラミングスキルが必要です。もちろん知識がなくても、ゲームを作りながらJavaの言語知識を深めていくのもよいでしょう。
ハードウェア・ネットワークに関するスキル
プログラミング学習のために作るゲームであれば、深く意識する必要はありませんが、ユーザーがどのようなハードウェアを使用するのかを想定して、ゲームの設計やプログラムを作っていくのかはゲームプログラマーにとって必要な知識です。
特にスマホゲームであれば、ハードウェアのスペックや画面のサイズなどが多岐に渡り、さらにタッチ操作を前提としたゲーム画面の設計を考える必要があります。
数字・物理のスキル
アクションゲームなどでは、リアルな現実の世界の動きを再現するため、物理計算の知識が必要とされます。具体的には三角関数やベクトル、加速度の計算など、数学や物理の知識はゲームプログラミングの多くのシーンで使用します。
論理的思考力
ゲーム開発に限らず、プログラミングには論理的思考力が求められます。
物事を順序立てて考えて、関係性を整理して最適な結果を導き出し、シンプルかつ拡張性が高いプログラムを記述できれば、あなたも優秀なプログラマーと呼ばれるでしょう。
プログラム初心者はもちろん、優秀のプログラマーでも、初めから完璧なプログラムを組むことは難しいと言われています。一度完成したコードを何度も見返し、リファクタリングしてよりよいコードにしていくのもプログラマーとして求められるスキルです。
簡単な図形描画を試してみる
最後に、ゲーム開発の基本である線や矩形などの図形を描画する処理に触れてみましょう。
Javaには線や矩形、円などの図形を描画する機能が既に用意されています。今回は、Swingを使ったGUIアプリケーションを作成して、ゲーム開発の基本でもある図形描画について解説します。
開発環境の準備
Javaの統合開発環境(IDE)でもっともメジャーな「Eclipse」を使って画面を開発していきます。「Eclipse」はオープンソフトウェア(OSS)として公開されており、Javaの開発を効率化させて生産性を高めてくれるツールで、多くのJava開発プロジェクトで採用されているIDEです。
この「Eclipse」のインストール方法などは、次の記事で紹介していますので、こちらを参考にインストールしましょう。
【関連記事】
▶エクリプス(Eclipse)でJava開発に挑戦しよう【初心者向け】
プロジェクトの作成
「Eclipse」のインストールがてぎたら、新しいプロジェクトを作成します。
画面の作成
図形を描画するためには、線を引いたり、色を塗るための紙となる画面が必要です。
Swingでは、JFrame内に図形を描画するためのJPanelコンポーネントなどを用意して描画を行います。
次のコードを使用して、JPanelを中に配置したJFrameオブジェクトを作成します。
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test{
public static void main(String[] args) {
GameWindow gw = new GameWindow("テストウィンドウ",400,300);
gw.add(new DrawCanvas());//描画領域の追加
gw.setVisible(true);
}
}
//ウィンドウクラス
class GameWindow extends JFrame{
public GameWindow(String title, int width, int height) {
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(width,height);
setLocationRelativeTo(null);
setResizable(false);
}
}
//描画する紙を表すクラス
class DrawCanvas extends JPanel{
}
paintComponentのオーバーライド
コンポーネントに図形などを描画するには、JPanelのpaintComponentメソッドをオーバーライドします。paintComponentは画面描画が必要なタイミングでJava側から呼び出されます。
画面への描画を行う上で重要なのが、引数のGraphicsオブジェクトです。基本的には、この引数のGraphicsクラスのAPIを使って描画処理を実装します。
また、ファイル上部にimport java.awt.Graphics;を宣言しておきます。
線を引いてみる
それでは、Graphicsオブジェクトで線を引いてみます。
線を描画する場合はdrawLineメソッドを使用します。引数には、始点のX座標、Y座標、終点のX座標、Y座標の順に指定します。
class DrawCanvas extends JPanel{
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(100,100,200,200);
}
}
矩形(四角形)を描画
矩形を描画する場合はdrawRectメソッドを使用します。引数は X座標、Y座標、横幅、高さの順に指定します。
class DrawCanvas extends JPanel{
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(100,100,50,50);
}
}
矩形の中身を塗りつぶしたい場合はfillRectメソッドを呼び出します。
g.fillRect(200,100,50,50);
まとめ
このまでの内容の通り、Javaは汎用言語であるため本格的なゲーム制作には向きませんが、簡単なゲームであれば、Javaでも制作が可能です。
Web開発などのゲーム以外の開発者を目在している場合も、ゲームを作りながら Javaの勉強を進めていくことで、楽しく学習が進められます。
一度ゲーム制作を試してみてはいかがでしょうか。
Javaはゲーム専用に開発する専用言語ではなく、さまざまなジャンルのアブリが作れる汎用的な言語であるため、物理法則の計算などを伴う複雑な処理などはJavaで開発するのは不向きで、そういったゲーム開発を目指しているのであれば、Unityなどのゲーム専用の開発環境を学習するほうがよいでしょう。