日記帳

日記です。

SDL.NET なゲーム 「MIZU GAME」を Linux 上で mono 使って動かしてみる

「MIZU GAME」は id:fslasht さんが SDL.NET で作られたパズルゲームです。

SDL が動いて .Net Framework が動けば動くはずなんで Linux + mono でも動くはず。ということで試してみました。ちょっと前に試したSPS2 *1 も動いたしきっと動くよね…

事前に mono や SDL 一族*2をインストールしておきましょう。

とりあえず実行してみます。

 % unzip MizuGame_latest.zip
 % mono MizuGame.exe

Unhandled Exception: SdlDotNet.Core.SdlException: Couldn't open font\mplus-2p-black.ttf
  at SdlDotNet.Graphics.Font..ctor (System.String fileName, Int32 pointSize) [0x00000]
  at MizuGame.Game.Init () [0x00000]
  at MizuGame.Program.Go () [0x00000]
  at MizuGame.Program.Main (System.String[] args) [0x00000]

うーん、おしい! ってかファイルのディレクトリ区切り文字が '\' 決め打ちですか… そこは System.IO.Path.DirectorySeparatorChar を使うか '/' の方を使ってほしかったところですが… でも元が Windows 用だししかたがないところですかね…

まぁ "font\mplus-2p-black.ttf" というファイルがないなら "font\mplus-2p-black.ttf" というファイルを作ってしまえばいいじゃない! ということでサブディレクトリ内にあるリソースにシンボリックリンクをはる rubyスクリプトをでっちあげてみる。

#! /usr/bin/env ruby
Dir::glob("*/*").each(){ |file|
	link = file.gsub('/', '\\')
	puts "#{file} => #{link}"
	File::symlink(file, link) unless File::exist?(link) 
}

というファイルを mklinks.rb とかに保存して実行します。

 % ruby mklinks.rb

シンボリックリンク群ができたら再度 Mizu Game を実行。

 % mono MizuGame.exe


あっさり動きました!

結論

  • .Net アプリケーションは割と適当にやれば mono で動きます。*3
  • mono えらいよ
  • SDL えらいよ
  • MIZU GAME おもしろいよ

*1:http://risky-safety.org/zinnia/d/2008/07/#20080723-t0-h1-p0

*2:SDL, SDL_image, SDL_mixer, SDL_ttf, SDL_gfx等

*3:System.Windows.Forms 以下のクラスライブラリとかはちょっとつらいけど…