むずかしいことはわかりません

いろいろ書いてるみたいな

DXRubyで昔遊んだパズルゲームを思い出して作ってみた

この記事はDXRubyAdventCalendar2015、12日目の記事です。

www.adventar.org

Advent Calendar初参加ということで、よろしくお願いします。

普段、ちょっとしたテキスト処理やDBからデータファイルを作るなどの作業でRubyを使っています。で、先日何かの記事でDXRubyを知ったので、早速いろいろ見てみました。

dxruby.osdn.jp

DXRubyは、RubyからDirectXを使ったゲーム製作に必要な機能を提供してくれるライブラリで、実際使ってみても簡単にRubyで画像表示などいろいろできました。

ゲームの内容

f:id:sato_c:20151209115757p:plain

 

昔遊んだパズルゲームなので、盤面のサイズや駒の種類など細かいルールを忘れてしまっている都合上、若干アレンジしたものになっています。

点数周りも実装していません。特殊な条件として四方が囲まれた位置に駒を置いた場合にボーナスやエフェクトがあったのですが、そういったものも判定のコメントには書いてたりしますが、実際のゲームには反映してません。

 

ソースについては、githubにありますのでご自由にどうぞ。

github.com

 

操作は、マウスで盤面を左クリックすると駒を置き、右クリックするとundoです。

undoは、最後まで駒を置ききらない限り最初まで戻れます。

 

模様と色があって、どちらか一方、もしくは両方が合致する場所にしか駒を置けません。画面中央の緑◎と赤■の交差する場所には緑■もしくは赤◎しか置けないルールです。

右上が次に置くべき駒で、その下は残り何個持っているかです。

 

中身について

dxruby_1.rb : 本体

game_board.rb : 盤面の管理をするクラス

piece.rb : 駒の管理をするクラス

 

本体は、ゲームループとゲームに関する描画を行います。

盤面の管理は、仮想ボードの管理と指定位置に駒が置けるかの判定を行います。

駒の管理は、駒の描画イメージを生成したり、駒自体の情報を管理します。

 

今回はプロトタイプみたいなものと割り切って、画面の描画部分は、すべてImageクラスの描画で済ませています。

駒の模様はすべてbox_fillなどの描画、色についてはImageの初期化で使う色指定で設定しています。(★模様もなんとなく★っぽくなりました)

盤面もlineやbox_fillくらいで済ませていますが、背景画像を読み込んでRenderTextureにコピーしてやれば、現状のままでも背景を付けることは可能だと思います。

今回はこの辺のことは一切やらずにゲームが動く方を優先しました。 

さいごに

今までもスクリプト言語でゲームを作る的な環境はいくつもあったのですが、どれもちょっと見て「なるほどなー」とあまり手を動かしてなかったのです。

今回は、Rubyで書けるのが気になったので、まずは一通り動くものを作ってみようという計画を立ててデータ待ちしてる暇な時間を使ってみました。

普段はテキスト処理やDBから拾ってきたデータ処理にしか使ってなかったRubyでゲームが作れるというのは、思いのほか楽しかったので、次はもうちょっと動きがあるものや画面遷移があるものが作れればと考えています。