「Ruby」の「Gosu」でデスクトップゲーム「Color」を開発してみよう
第9回の今回は、プログラミング言語「Ruby」の「Gosu」ライブラリを使ってデスクトップゲーム「Color」を作る解説をします。
6:30
はじめに
この連載では、さまざまなプログラミング言語やライブラリで同じゲームを開発することで、容易にそのプログラミング言語に入門します。
第9回の今回はプログラミング言語「Ruby」を使って、次のURLのようなColorゲームを作ります。こちらからアセットをダウンロードしておいてください。
Colorゲームについて
Colorゲームの内容は第1回でも解説した通り、ゲームを開始したら、赤緑青の色ブロックをクリックします。すると背景色にその色が混ぜられるので、どんどんクリックして真っ白な背景にしていこうというゲームです。
プログラミング言語について
プログラミング言語「Ruby」はまつもと ゆきひろ氏(Matz)が開発した純国産の言語で、唯一国際電気標準会議(IEC)に認証されたプログラミング言語です。文法が読みやすく、数値や文字列を含めほぼすべてがオブジェクトのオブジェクト指向言語で、開発効率が高く、パッケージ管理システム「Gem」により多くのライブラリを利用できます。
RubyではWebアプリケーション、自動化ツール、データ処理、API開発、コマンドラインツール、ゲームなどを作ることができます。
Gosuについて
「Gosu」は2Dゲーム開発に必要な基本機能が揃ったライブラリです。標準でウィンドウの作成、画像の表示・描画、キーボードやマウス入力の取得、効果音・BGMの再生、フォントを使った文字表示、ゲームループ(更新・描画)の管理ができます。Gosuライブラリは内部でOpenGLを使っているためOpenGLかOpenGL互換のMesaが必要です。
開発のために必要となる環境の準備
今回必要となる「Ruby」「Visual Studio Code」「Gosuライブラリ」を準備します。なお、今回はWindowsについてのみ解説します。macOSやLinuxでのセットアップ方法についてはGitHubのGosuページを参考にしてください。
RubyはWindowsで次のURLから「RubyInstaller」を使ってインストールします。VS Codeは次のURLからインストールします。これらが揃ったらターミナルで次のコマンドを実行し、Gosuライブラリをインストールします。
・Gosuライブラリのインストール
gem install gosuプロジェクトを作成しよう
「colorGosu」フォルダなどを作ってプロジェクトを用意します。と言っても、Rubyは他に設定ファイルなどがなくても「.rb」ファイルさえあればインタプリタで実行できます。
次の階層図のように必ず「images」フォルダと「sounds」フォルダを含めてください。今回もGosuライブラリでシンプルに音が扱えるためサウンドも使います。
・階層図
colorGosuフォルダ
┠images(画像フォルダ)
┃┠0.pngファイル(赤の色ブロック画像)
┃┠1.pngファイル(緑の色ブロック画像)
┃┠2.pngファイル(青の色ブロック画像)
┃┠GameOver.pngファイル(ゲームオーバー画像)
┃┠StageClear.pngファイル(ステージクリア画像)
┃┗Title.pngファイル(タイトル画像)
┠sounds(サウンドフォルダ)
┃┠GameClear.oggファイル(ゲームクリアサウンド)
┃┠GameOver.oggファイル(ゲームオーバーサウンド)
┃┠Mix.oggファイル(混色サウンド)
┃┗StageClear.oggファイル(ステージクリアサウンド)
┠ColorBlock.rbファイル(色ブロッククラスファイル)
┗main.rbファイル(メインクラスファイル)「main.rb」ファイルを新規作成し、次のサンプルコードをコーディングします。
・サンプルコード「main.rb」ファイル
require 'gosu'
class Game < Gosu::Window
def initialize
super 1800, 900
self.caption = "Color"
end
end
Game.new.show次のコマンドでサンプルコードを実行すると、真っ黒な画面のウィンドウが表示されます(図1)。
・Rubyプログラムの実行
$ ruby main.rb
【サンプルコードの解説】
「Game」クラスを「Gosu::Window」から派生して宣言します。
「initialize」がコンストラクタです。「super」で親クラスのコンストラクタを画面幅高さを指定して呼び出します。
「Game.new」でコンストラクタを呼び出し、showで表示します。
タイトル画面を表示する
ウィンドウが表示できたので、まずは画像を描画することから始めてみましょう。ゲームを開始したらタイトル画面(図2)を描画し、タイトル画面がクリックされたらタイトル画像を消します。
・サンプルコード「main.rb」ファイル
require 'gosu'
class Game < Gosu::Window
def initialize
super 1800, 900
self.caption = "Color"
@game_state = :title
@images = []
@images << Gosu::Image.new("images/0.png")
@images << Gosu::Image.new("images/1.png")
@images << Gosu::Image.new("images/2.png")
@images << Gosu::Image.new("images/Title.png")
@images << Gosu::Image.new("images/GameOver.png")
@images << Gosu::Image.new("images/StageClear.png")
@sounds = []
@sounds << Gosu::Song.new("sounds/GameStart.ogg")
@sounds << Gosu::Song.new("sounds/GameOver.ogg")
@sounds << Gosu::Song.new("sounds/StageClear.ogg")
@sounds << Gosu::Song.new("sounds/Mix.ogg")
end
def draw
case @game_state
when :title
img = @images[3]
img.draw((1800-img.width)/2,(900-img.height)/2,1)
end
end
def button_down(id)
if id == Gosu::MsLeft
case @game_state
when :title
@game_state = :main_loop
@sounds[0].play()
end
end
end
end
Game.new.show【サンプルコードの解説】
コンストラクタで「@images」プロパティ(@変数はクラスのプロパティを表す)を配列として宣言しすべての画像を読み込み、「@sounds」プロパティにすべてのサウンドを読み込みます。
描画「draw」メソッドでは、ゲーム状態「@game_state」が「:title」シンボルならタイトル画像を表示します。
ボタンが押された時に呼ばれる「button_down」メソッドで、タイトル画面をクリックしたらゲーム状態を「:main_loop」シンボルにセットし、「ゲームスタート」のサウンドを再生します。
絵本のテーマの1つを考えました。器用貧乏は「何もモノになっていない」と悪い意味の言葉ですが、「器用貧乏も突き詰めると1つぐらいはモノになる」というテーマです。病気になった僕でさえ、色々とやって様々な技術を身につけ、物書きの仕事ができるようになりました。
この記事をシェアしてください
