Go言語とDXライブラリでゲームを作る

はじめに

みなさんはDXライブラリというライブラリをご存じでしょうか?
リンク: https://dxlib.xsrv.jp/
DXライブラリはだれでも簡単にゲームを制作することができるようになるライブラリで私もよくお世話になったものです。
基本はC言語(C++)で作成しますが、Cは言語の標準機能が弱いので可能であるなら別の言語でゲーム開発をしたいものです。
幸いにもDXライブラリにはVisual C#用のパッケージもあるので、これを使ってGo言語用のライブラリを作って、それでゲーム開発をしたいと思います。

Go言語用ライブラリの作成

まずはGoからDXライブラリの関数を呼べるようにします。
以下のコードを見てもらえばわかるように、あまり難しいことは考えずにGoの引数をuintptr型に変換しCall関数に渡してやれば、いい感じになります。
ただし、公式のreadme.txtにもあるように、「可変引数の関数」「void 型のポインタを引数で取る関数」は使うことができません。

package dxlib

import (
	"syscall"
)

var (
	mod         = syscall.NewLazyDLL("DxLib.dll")
	dx_GetPixel = mod.NewProc("dx_GetPixel")
)

func GetPixel(x int, y int) uint {
	res, _, _ := dx_GetPixel.Call(uintptr(x), uintptr(y))
	return uint(res)
}

DXライブラリは非常に関数の数も多いので今回私のほうでライブラリを作りました。有効活用していただけると幸いです。
URL: https://github.com/sh-miyoshi/dxlib
ちなみにライブラリはgo generateで作成しています。(初めて使った機能だけどなかなか面白かったです)

使い方

※ここからはhttps://github.com/sh-miyoshi/dxlibを使用することを前提として書いています。
基本的な使い方としてはpackageをimportしてdxlib.<関数名>でアクセスできます。詳細は私のGithub上においてあるexampleを参照してください。

package main

import (
	"github.com/sh-miyoshi/dxlib"
)

func main() {
	dxlib.Init("DxLib.dll")

	dxlib.ChangeWindowMode(dxlib.TRUE)
	dxlib.SetGraphMode(640, 480, 16)
	dxlib.SetOutApplicationLogValidFlag(dxlib.TRUE)

	dxlib.DxLib_Init()
	dxlib.SetDrawScreen(dxlib.DX_SCREEN_BACK)

	for dxlib.ScreenFlip() == 0 && dxlib.ProcessMessage() == 0 && dxlib.ClearDrawScreen() == 0 {
		dxlib.DrawString(10, 10, "Hello, world", dxlib.GetColor(255, 255, 255))
	}

	dxlib.DxLib_End()
}

ゲームの製作自体は本家サイトやゲームプログラミングの館などが詳しく解説されているのでそちらをご参照ください。
参考:
・新ゲームプログラミングの館: https://dixq.net/g/
・DXライブラリ公式ページ: https://dxlib.xsrv.jp/dxlecture_main.html

おまけ

ゲームプログラミングの館にある龍神録の館のコードをGo言語で再現してみました。
※現在13章くらいまで作成。鋭意制作中。


いいなと思ったら応援しよう!