見出し画像

【Ebitengine】Go言語に触ってみる

なんかたまに仕事でも趣味でも使ったことのないプログラミング言語に触ってみたくなるのですが、今回はGo言語でした。理由は何となく。

今後きちんと勉強が続くかは置いておいて、プログラミング学習ではどこでも言われることがあります。

「何かつくって勉強しなさい」「好きなものを作りなさい」
まぁそうなると僕はゲームになってしまいます。ゲーム大好き。

Go言語のゲームエンジンを見てみると、目に入ったのが「Ebitengine」。海老天+エンジンです。
作られたゲームには商用ゲームもあります。おっ、「メグとばけもの」、これは知ってますね。ただああいう泣いちゃいそうなゲームはしない主義なのでやってません。

さてさて、ではひとまず「Hello World」までやってみようと思います。
環境はWindows11。VS Codeで開発します。

まずはWindowsにGo言語をインストールします。
https://golang.org/dl/からWindows用のインストーラーをダウンロードし、ウィザードに沿ってインストールします。
Windows本体側の準備はこれだけでOK。

次はVS Code側の準備をします。
拡張機能から「Go」(Go Team at Google)をインストール。
その後、コマンドパレットから「go update」と入力し、「Install/Update Tools」を選択。「gocode」・「gopkgs」をインストールします。

さて、それではEbitengineの基本構成を試してみましょう。
コードは以下の形です。

package main

import (
	"log"

	"github.com/hajimehoshi/ebiten/v2"
	"github.com/hajimehoshi/ebiten/v2/ebitenutil"
)

type Game struct{}

func (g *Game) Update() error {
	return nil
}

func (g *Game) Draw(screen *ebiten.Image) {
	ebitenutil.DebugPrint(screen, "Hello, World!")
}

func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
	return 320, 240
}

func main() {
	ebiten.SetWindowSize(640, 480)
	ebiten.SetWindowTitle("Hello, World!")
	if err := ebiten.RunGame(&Game{}); err != nil {
		log.Fatal(err)
	}
}

まだまだ分からない部分が多いのですが、ざっくり見ると
・importの部分でライブラリを入れている
・type Gameという何か(クラス的な?)の中にUpdate、Layout、Draw、mainのファンクションがある。
という感じですね。updateしてdrawみたいなのは見たことある流れです。

さて、これを実行する前にやることがあります。Go言語ではモジュールをインポートした際にgo.modというファイルを作らなくてはいけないみたいです。VS Codeのターミナルから以下のコマンドを入れます。

go mod init mymod

これでmymodというモジュールができ、go.modファイルが生成されます。
次はメインのソースに書かれているパッケージから依存関係なんかをいい感じにしてもらうために以下のコマンドを実行。

go mod tidy

これでパッケージ周りは大丈夫です。これやらないと肝心のEbitengineが見つからずにこけてしまいます。

ではいよいよプログラムを実行してみます。ターミナルに実行コマンドをいれます。

go run main.go

すると、

▲表示されました!

簡素なものですが最初の一歩としては上々。動いただけで万々歳です。
さて、ここからどうするかというところですね。のんびりと続けていこうと思います。

今回はここまで。
読んでいただきありがとうございました。

ここまで読んでいただきありがとうございます!