15パズルの作り方を考えてみよう

プチコン4

15パズル 作り方

こんにちは。なおキーヌです。

ブログ毎日更新は272日目になります。

パズルゲーム講座として、倉庫番ライクなゲームは作り終えました。

パズルゲームといえば他にも色々ありますね。

その中でも私が結構得意としている15パズルを作ってみたいと思います。

例によって第1回目は考察回ということで15パズルの作り方を考えてみましょう。

プレイしたことはあるけど作ったことがあるという人は意外と少ないんです。

スマートフォンアプリゲームの入門としても結構作られてはいますが、
単純ゆえに踏み台にされてリリースはされないままだと思います。

というのも15パズル何てそこらにあふれかえってますからね(笑)

それじゃあ15パズルの作り方を考えてみましょう。

  1. 15パズルのルールをおさらいしてみよう
  2. 動かせるパネルの判断がメイン処理
  3. プチコン4ならタッチ機能を利用するのもあり
  4. パネルを動かすための条件式を考える

15パズルのルールをおさらいしてみよう

15パズル、大体の人はやったことがあると思いますが一応簡単なルール説明をしておきます。

一般的な15パズルといえば4x4のグリッドがあり、
動かす場所の確保のために1つだけ空のグリッドを設けます。

それ以外のグリッドには4x4で分割された絵、もしくは1~15の数字のパネルが
ランダムに配置されてゲームが開始されます。

プレイヤーは空いた1マスを利用してパネルを動かし、
元の絵に戻すとゲームクリアです。

最初に完成の絵を見せるか見せないか

用意したイラストであれば、最初に完成を見せてから
ランダムで配列から取りだし配置していくとユーザーに親切です。

1~15の数値を横に1234折り返し5678……とZの順番にならべていくのであれば
数字という概念さえしっていれば完成系を見せなくてもいずれゴールにはたどりつけます。

どちらにしろ親切設計にするためには最初に完成系を見せたほうがいいでしょう。

とはいうものの、それはゲームが完成してから実装しても大丈夫です。

動かせるパネルの判断がメイン処理

15パズルのコアとなる部分は、どこのパネルが空欄なのか。

そこからどのパネルがどちらの方向に動かせるのか。

これさえしっかり出来ていればもう完成したも同然です。

プログラミング初心者だと配列の概念が分かり辛かったりしますが、
そこまで多くないので配列操作の勉強にももってこいなゲームとなっています。

コントローラーでやる場合は上下左右のボタンだけでプレイできるので、
操作処理も簡単に作れてしまうのでまさにゲーム作り入門と言っても過言ではありません。

実際私もまだそこまでプログラミングでゲームを作ったことが無くて、
アンドロイドアプリを始めて作ったときは15パズルを作りました。

しかしゲームそのものは単純なので、あんまり作っても達成感が無かったのも事実です(笑)

プチコン4ならタッチ機能を利用するのもあり

プチコン4ならコントローラーだけではなくタッチ機能も使えますね。

WiiUとか3DSと違って静電式のタッチなのでスマホっぽい操作のゲームも作れてしまいます。

プチコンだろうがアンドロイドだろうが言語が変わったところで、
ゲーム作りの基本的な考え方は共通しているので無駄にはなりません。

折角プチコン4ではニンテンドースイッチの機能が基本的にフル活用できるソフトなので
私もコントローラーだけにとどまらずジョイコンやタッチを活用していこうと思います。

その中でも15パズルで相性が良いのはタッチでしょう。

プチコン4では「TOUCH」という命令が用意されていて、マルチタッチ機能も兼ね備えています。

スプライト機能とこのタッチ機能を使えばスイッチでタッチ系ゲームを作れてしまいます。

タッチして操作するゲームの概念も学べますので、15パズルはやっぱりゲーム作り入門的な存在なんですね。

次回は15パズルの基本的な仕組みを作ってみましょう。

コントローラー操作バージョンとタッチ操作で記事を分けようと思います。

私自身、プチコン4のタッチ機能を触ったことが無いのでとりあえずコントローラー版が優先になります。

パネルを動かすための条件式を考える

最後にパネルを動かすための条件式を考えてみましょう。

まず、ルールとしては空欄のある場所に隣接しているのが最低条件となります。

真ん中らへんであれば上下左右の4つのパネルのどれかが動かせますね。

左右の端だと上下+左右のどちらか、もしくは左右+上下のどちらかで3パネルのどれかを動かせる状態です。

隅っこだと左上・右上・左下・右下の2パネルのどれかになるわけです。

つまり多くても4つの条件しかないわけですので、処理もそこまで複雑にはなりません。

動かすパネルが決まったら動かせる方向にスライドすると言った感じですね。

スライドが完全に終わるかスライドが始まる前に、動かしたパネルに該当する配列の位置を
空欄の位置と入れ替えて状態を管理しなければいけません。

もちろん、スライド中は操作を一切受け付けないようにしとかないとゲームが破綻してしまいます。

一見、1次元配列で考えると面倒化と思いますが一度関数を組んでしまえば動かすパネルの位置と空欄のパネルの位置さえ渡せば
後は関数が配列操作をしてくれるので面倒なのは最初だけということです。

ここでコントローラーとタッチでは少し処理が変わってきます。

タッチの場合直感的に動かすパネルをつかんでスライドさせますが、
コントローラーの場合4つのボタンしかないので動かすスライドが動く方向のボタンを押すといった感じです。

この点で処理が変わってきます。

両方同時に実装出来たらゲームプログラマーとしてレベルアップしますので、
15パズル一連の講座が終わったら試してみるのもいいかもですね。