ミニゲームキット
DXRubyはちょっとしたものを簡単に作れるライブラリであるからして、とりあえずrequire 'dxruby'してWindow.loop do endでガシガシとコードを書いていけば動くものが作れる。
例えば、ちょっとしたコードでなんか作る。
require 'dxruby' class Enemy < Sprite def update self.y += 4 self.vanish if self.y > 480 end end Window.caption = "豆腐避けゲームSpecialEdition" image = Image.new(32, 32, C_WHITE) enemy = [] mychar = Sprite.new(300, 400, image) Window.loop do break if mychar === enemy enemy.push(Enemy.new(rand * 600, -32, image)) mychar.x += Input.x * 4 mychar.y += Input.y * 4 Sprite.update(enemy) Sprite.clean(enemy) mychar.draw Sprite.draw(enemy) end
これはちょー面白い。ミニゲームだけどみんなドハマリして睡眠不足が続くに違いない。
しかしタイトルもゲームオーバー画面も無いようなものをリリースするのは恥ずかしい。とは言ってもそのためにSceneクラスとか作ってどうのこうのは面倒だよなあ。
そんな時にはこれ、ミニゲームキット。
使い方は簡単。requireして、ゲームの初期化部分の先頭にWindow.minigame doを書いて、コードの最後にendを書くだけ。
require 'dxruby' require './minigamekit' # これ class Enemy < Sprite def update self.y += 4 self.vanish if self.y > 480 end end Window.caption = "豆腐避けゲームSpecialEdition" Window.minigame do # これ image = Image.new(32, 32, C_WHITE) enemy = [] mychar = Sprite.new(300, 400, image) Window.loop do break if mychar === enemy enemy.push(Enemy.new(rand * 600, -32, image)) mychar.x += Input.x * 4 mychar.y += Input.y * 4 Sprite.update(enemy) Sprite.clean(enemy) mychar.draw Sprite.draw(enemy) end end # これ
これだけでなんとタイトルとゲームオーバー画面がゲームの動作に追加されるのだ。ミニゲームキットでキミも自作ゲームにタイトルとゲームオーバーを付けて公開しよう。
require 'dxruby' def Window.minigame Kernel.loop do yield 240.times do exit if Input.update str_width = @minigame_font.get_width("GAME OVER") Window.draw_font(Window.width / 2 - str_width / 2, Window.height / 2 - @minigame_font.size / 2, "GAME OVER", @minigame_font) Window.sync Window.update end end end def Window.loop if !@minigame_create_flag Window.create @minigame_create_flag = true @minigame_font = Font.new(32) @minigame_title_font = Font.new(Window.height / 4) end Kernel.loop do temp = Input.keys Kernel.loop do exit if Input.update break if Input.keys != temp str_width = @minigame_title_font.get_width(Window.caption) x = Window.width / 2 - str_width / 2 x = 0 if x < 0 Window.draw_font_ex(x, Window.height / 4, Window.caption, @minigame_title_font, scale_x:(x > 0 ? 1 : Window.width.quo(str_width)), center_x:0,center_y:0) msg_width = @minigame_font.get_width("PUSH ANY KEY") Window.draw_font(Window.width / 2 - msg_width / 2, Window.height * 3 / 4, "PUSH ANY KEY", @minigame_font) Window.sync Window.update end Kernel.loop do exit if Input.update yield Window.sync Window.update end end end