物理エンジンでゲームのようなものを作ってみた

空から何かが降ってくるので、カーソルキーで左右に移動してよける。スペースキーでジャンプ。3回当たったら終了。まるで横スクロールみたいだけどスクロールしません。どこにも行けないし何も起きません。ゲームと呼ぶには楽しくなさ過ぎるわけですが、せっかく物理エンジンを移植したので、とにかく何かそれっぽいことに使ってみたくて・・・。

とりあえず背景とキャラクタに画像を表示して、キー操作に応じて動かして、衝突を判定するところまではわりと簡単ということが分かった。根性さえ見せればまともなゲームを作るのにも使えなくはないかなと。

触ってみたいという奇特な人がいたら、ここからソース落として来て

$ shoes sample/shoes/game.rb

で実行できます。なお上のコマンドを見れば分かるように、要Shoes2。いやーShoesでGUI作るのはホント楽でいいっす。さすがwhyプロダクツ。

ちなみに、これ作るにあたってAPEそのままのAPIが冗長で面倒くさかったので、インターフェースをいろいろ修正。素のAPEよりすっきり書けるようになったと思う。

API(APEと一緒)使用例

require 'pongo'
require 'pongo/container/shoes_container'

include Pongo
Shoes.app :width => 500, :height => 350 do
  APEngine.container = Container::ShoesContainer.new(self)
  APEngine.init
  APEngine.add_force VectorForce.new(false, 0, 2)

  default_group = Group.new
  default_group.collide_internal = true

  ball = CircleParticle.new(245, 100, 10) 
  default_group.add_particle(ball)

  ground = RectangleParticle.new(250, 250, 300, 50, :fixed => true)
  default_group.add_particle(ground)

  APEngine.add_group(default_group)

  animate(60) do |anim|
    APEngine.step
    APEngine.paint
  end 
end


API(Pongo独自)使用例

require 'pongo'
require 'pongo/container/shoes_container'

include Pongo
Shoes.app :width => 500, :height => 350 do
  APEngine.setup :gravity => 2, :container => Container::ShoesContainer.new(self)

  APEngine.create_group do |g|
    g.circle(245, 100, 10)
    g.rectangle(250, 250, 300, 50, :fixed => true)
  end

  animate(60) do |anim|
    APEngine.next_frame
  end 
end

今のところ画面の描画とイベント処理のコードがかなり行き当たりばったりなので、少し整理して誰でも簡単に物理エンジンを利用したゲームを作れるようにできるといいっすね。