0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C++】PongとブリックブレーカーのWindows版リリース

0
Posted at

元: https://technicalsuwako.moe/blog/cpp-pong-brickbreaker-windows-release

Snakeのチュートリアルを書いた後、他のOSでもゲームをテストしました。
興味深い事に気づきました:Wine/Proton/CrossOverのお陰で、Windowsエコシステムは最も信頼性の高いクロスプラットフォームターゲットの一つになっています。
そして今、FEX-Emu(Protonの一部)が登場した事で、x64 Windows実行ファイルがAArch64 Linuxマシン上でも動作する様になります。
Windowsは全てのOSの中で最高の後方互換性を提供しています。
史上最悪のOSが、史上最高のターゲットプラットフォームでもあるというのは、かなり皮肉な話です。

FreeBSD上でWine経由でSnakeのWindows版を実行した所、Windows上と同じパフォーマンスで動作しました。
一方、ネイティブのFreeBSD版ではSFXの遅延等パフォーマンスの問題がありました。
もう一つの問題は、RaylibがOpenGLに依存している為、ゲームはWindows上では静的リンク可能ですが、Unix系、BeOS系、Amiga系では不可能だという事です。
Plan9系では静的リンクが好まれるので可能かもしんが、Plan9にOpenGL自体が存在しないと思います。

Unix系OSでは、OpenGLやVulkanを静的リンクする事は事実上不可能です。
バイナリが依存する.soファイルがMesaと通信してGPUとやり取りする必要があり、非常に面倒です。
然しWindowsではその様な事はありません。
静的リンクしたWindows実行ファイルも、Wine経由でFreeBSD上で全く問題なく動作します。

其の為、PongとブリックブレーカーをWindows向けに再リリースしたくなり、今回は全てのアセットを実行ファイル内に埋め込んで、単一実行ファイルとして配布出来る様にしました。
どのコンピューターでも其のまま動作します。

当初はRaylibで作り直すつもりでしたが、ゲームは既に2年前の物で、最初はLinuxとBSD向けのみリリースされていたので、複数のライブラリを使える事を証明する為にSDL2のままにしておく価値があると思いました。
Pongには軽微な調整を加えて、タイトルバーにテキストを表示する様にしました。
元々はOpenBSDのDWM環境で作った為、タイトルバーが存在しなかったからです。
ブリックブレーカーは最近のバグ修正リリースでタイトルバーを追加済みでした。

一番面倒だったのはSDL2_ttfのリンクで、FreeTypeに依存し、更に複数のライブラリに依存しており、BrotliとBZ2が理由もなくDLLファイルに拘る問題がありました。
此の問題は以下の様に剥ぎ取る事で解決しました:

> vcpkg install freetype[core,png,zlib]:x64-windows-static
> vcpkg install sdl sdl2-ttf sdl2-mixer --triplet=x64-windows-static

Snakeと同様に、リポジトリに必要なライブラリとヘッダファイルを全て含めているので、ソースからコンパイルしようとして何度も心臓発作を起こさなくて済みます。

更新されたリポジトリは此方です:
Pong
ブリックブレーカー

ダウンロード可能な実行ファイルは此方:
Pong
ブリックブレーカー

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?