Go言語 ポートフォリオ

【第1回】Go言語(ゲームエンジン:engo)でゲームを作成してみた

【第1回】Go言語でゲーム作成してみた

こんにちは!近年、多くのプログラミング言語の中で「稼げる言語」として人気が爆発しているのは、Googleが開発したGo言語です。
 
 
そんなGo言語でゲームを作成できるって知っていましたか?
 


 
本記事では、2Dゲームエンジンのengoを使用してゲームを作成していきます。プログラミング初心者の方でも分かりやすいように、ソースコードの説明もしっかり行いたいと思います。


どんなゲームを作るの?

大人気ゲーム「スーパーマリオブラザーズ」を参考に、こんな感じのゲームを作成していきます。

開発の準備を始めよう

ソースコード作成の前に、まずは、開発環境の準備をしましょう。
 
 
以下の手順で準備を進めていきます。

  • 開発環境の確認
  • Goのインストール
  • 環境変数の設定
  • srcディレクトリの作成
  • engoのインストール

開発環境の確認

まずは、開発PCがengoに対応しているかを、確認してください。対応OSは以下の通りです。詳しくはこちら

engo対応OS

・Linux
・Windows(gccコンパイラが必要)
・OSX

Goインストール

次にGoのインストールを行います。この記事ではインストール作業は省略します。詳しくはこちらの記事を参考にしてください。


 
 
インストールが完了したら、環境変数の確認を行ってください。基本的にGoは「$GOROOT$」と「$GOPATH$」の2つを設定すればOKです。
 
 
「$GOROOT$」はGoをインストールする場所です。基本的には何もせず、デフォルト設定のままでいいです。
 
 
「$GOPATH$」は任意で指定してください。これから作成するプロジェクトは全て「$GOPATH$」の直下に作成していきます。

srcディレクトリの作成

次に、$GOPATH$の直下にsrcディレクトリを作成します。
 
 
srcという名前のディレクトリを作成するのは、Go言語の決まりだと思って大丈夫です。srcはsource codeの略で、開発は全てsrc直下で行います。

engoをインストール

engoとは2Dのゲームエンジンで、デスクトップで動作するゲームアプリを作成することができます。今回はこのengoを使用してゲームを作成していきます。
 
 
ターミナルもしくはコマンドラインで、srcフォルダに「cd」コマンドで移動した後、以下のコマンドを実行し、engoのインストールを行います。

 
go getコマンドを実行すると、$GOPATH$の指定フォルダにengoがインストールされます。

実行してみよう

最後に、プロジェクトディレクトリを作成しましょう。ディレクトリ構成は、$GOPATH$/src/github.com/githubユーザ名/プロジェクト名とするのが推奨されています。

 
 
ディレクトリを作成したら、engo直下にまずはmain.goを作成し、以下のコードを記述します。

参考:Engoチュートリアル第1章
 
 
コンパイルして実行すると、「Hello World」というタイトルで、400×400の黒い画面が現れます。これで準備OKです。

engo Hello World

基本設定

リソースファイルの準備

ゲームを作成する上で必要不可欠なのは、背景画像や、キャラクター画像、効果音などのリソースファイルです。今回は、背景とプレイヤーの画像ファイルを使用します。
 
 
2Dゲームの背景はタイルマップという方法で構築するのが主流です。その名の通り、タイル(画像)をマッピングしていくイメージです。自作だと時間がかかるので、こちらのサイトで取得します。プレイヤーも動きを加えたいので、同じサイトから取得します。
 
 
engo直下にassetsディレクトリを作成し、ダウンロードしたリソースファイルは全てassets直下で管理します。

 
 
リソースファイルを使用するには、あらかじめ、Preload()でファイルのロードを行う必要があります。引数にカレントディレクトリからのファイルパスを指定して、以下のように記述します。

 
 
この手順を踏まないと、読み込みエラーになってしまうので、必ずリソースを使用する際は、Preload()で設定を行ってください。

キーボードの設定

プレイヤーの移動にキーボード入力が必要なので、使用するキーボードの設定を行います。
 
 
キーボードの設定は、Setup()で行い、第1引数にキーボード名(任意)、第2引数にはキーボードの種類を指定します。以下のように、同じ名前で複数のキーボード指定が可能です。

キーボードの一覧はこちらを参照してください。

Systemの追加

engoの考え方として、ゲームは複数のSceneを切り替えて動作しています。そしてSceneには1つのWorldが存在します。Sceneはメイン画面やロード画面、Worldはステージ1、ステージ2みたいなイメージです。
 
 
また、Sceneには3つの要素が含まれています。

3要素

・Entity
・Component(RenderComponentとSpaceComponent)
・System

 
Entity
=オブジェクトのことで、Sceneには複数のEntityが存在します。プレイヤー、敵キャラクター1、敵キャラクター2、背景、表示テキスト、のように、それぞれがEntityとして定義されます。
 
 
Entityは2つのコンポーネントを持っていて、RenderComponentは、何をレンダリングするかの見た目の要素、SpaceComponentは、Entityの位置情報を保持します。
 
 
Systemとは、簡単に言うとEntityを扱うインターフェスのようなもので、このSystemをWorldに追加することで、Entityの操作が可能になります。それぞれのSystemは独自のタスクで動作し、毎フレーム呼び出されます。
engoイメージ

Gopher参考:Renée French
 
 
SceneにSystemを追加する手順はこちらです。今回は、PlayerSystem、TileSystem、RenderSystemの3つを追加します。RenderSystemとは、engoに元から備わっているSystemで、Entityのレンダリングを行います。

main.goの完成

これでmain.goの記述は完成です。背景色は「image/color」パッケージを使用して、空色にしました。(23行目)

ディレクトリ構成はこちらです。

お疲れ様でした!いよいよこの後は本格的な実装に入ります。
 
 
続きは第2回の記事で説明したいと思います。ではまた!


 
 
参考:
engo公式ドキュメント
Go言語で作るマリオ風2Dゲーム
dotstudio

-Go言語, ポートフォリオ
-,

© 2022 まいふぁんず