15パズル 移動とクリア判定が完成

2019/5/11更新 PushPieceメソッドを縮小できないか、と考えていて ある事に気が付きました。 16ポジションから押したピースを探して、 0番ピースと隣接してるか判断していたのですが、 0番から4方向に押したピースが有るかを判断した方が、 手数が少なくなるのでは? と思いつきました。 ただ、ポジションから判断すると結局の所、 16ポジションの処理が必要になるので変化ありません。 そこで、座標位置から読み取る事ができれば、なんとかなるかも と言う考えに至りまして、少し整理してみる事にしました。 ・0番ピースと横並びならY座標が同じになる ・0番ピースと縦並びならX座標が同じになる ・0番と押したピースが並ぶと、ピースのピッチは上下左右同じ コードを考えてみます。 0番と押したピースのポジションは取得してるので、 それを元にX座標が同じかを判断するなら、 if (Xp[Add0] == Xp[AddP]){} これで判断できそうです。 Y座標も同じ文でいけそうです。 あとは隣接してるかの判断ですが、 ピースのピッチを160で取っているので、 if (Yp[Add0] - 160 == Yp[AddP] || Yp[Add0] + 160 == Yp[AddP]) これを元にコードを作ると //0番ピースと押したピースが縦並びか if (Xp[Ad…

続きを読む

コードを分かりやすくしてみる

2019/5/11更新 前回のコードを改めて見直してみると 分かりにくい部分が多すぎるので、コードを修正してみました。 まず、ボタンとピースの二つの名前を使っていたのでピースに統一する。 public void PuPiece(int PieceNo) → public void PushPiece(int PieceNo) ついでに省略していた部分を正確に書き直しました。 ここからは、PushPieceメソッドにいろいろと詰め込んでいたので、 各動作を分解してメソッドに書き直してみます。 まず、ピースのポジション確認をPushPieceメソッド内に書いていたので、 外に出す事に… //0番ピースと押したピースのポジション確認 void PieceSearch(int PieceNo) { for (int i = 0; i < 16; i++) { if (Pos[i] == 0) { Add0 = i; } if (Pos[i] == PieceNo) { AddP = i; } } } ボタンを押した時にピースナンバー…

続きを読む

Unity 空きマスへピースを移動させる(15パズル)

2019/5/11更新 位置の割り出しまでできたので、 隣接した空きマスへピースを移動させるのですが… 全ピースを動かす事ばかり考えてしまっていたので、 あれもこれもとなって、頭の中がパニック状態です。 まずは1番を押した時に空きマスに移動する事を考えてみます。 位置の割り出しは、前回記事の通りAdd0とAddPに取得しています。 public void PuPiece(int BtNo) { if(Pos[0]==0||Pos[2]==0||Pos==5) { Piece[BtNo]移動コマンド Pos[Add0]=BtNo; Pos[AddP]=0; } } こんな感じでいけそうです。 これに合わせてスクリプトを書き替えてみます。 追加するものから ・座標変数(xyの二つ) ・ポジション変数 ・空きマスのポジション変数 ・押したピースのポジション変数 using System.Collections; using System.Collections.Generi…

続きを読む

Unity ピース位置の割り出し(15パズル)

ピースを押した時に、どんな処理が必要なんだろう? と考え直して、必要な処理を整理してみました。 ・空きマスの位置確認 ・押したピースの位置確認 ・押したピースが空きマスと隣接しているか判断 ・ピースを移動させる ・移動後のそれぞれのポジションを更新する うわー(*。*) 結構処理を同時に行わないとダメなようです。 全てが一括で処理できる魔法のコマンドないですかね~ 考えるのが大変だわ(;^_^A ま、都合よく行かないのがプログラムと人生… 頑張ってみます。 まず、位置情報を取得しないと始まらないので、 位置情報取得のメソッドを考えてみたいと思います。 空きマスとピースの位置情報は、Pos[0~15]に格納されているので、 この中から押したピースの位置と0番を取り出さないとダメみたいです。 押したピースの番号はPuPiece(int BtNo)で取得して 押したピースの位置をAddP 0番の位置をAdd0 に取り出してみます。 private int Add0; private int AddP; public void PuPiece(int BtNo) { for (int i = 0; i < 16; i++) { if (Pos[i] == 0) { …

続きを読む

Unity スライドパズル(15パズル)を考えてみる

ピースの回転を使ったパズルは、一応できたので 次はスライド系のパズルを作ってみたいと思います。 定番のスライドパズル(15パズル)がいいかと思います。 検索でスライドパズルの事を調べてみると 情報が出てないんですよね~ これからゲームを作って行くのに、 これくらいは作れるようにならないと話にならないので 自力でコードを考えてみたいと思います。 AssetStoreには スライドパズルの完成モデルが無料で公開されています。 わざわざ作らなくても… いえいえスクリプトの勉強にもなるので、 ここは自力で作ってみたいと思います。 果たして完成するのやら(;^_^A まず、スライドパズルの条件を考えてみます。 ・4×4のマスで15ピースが稼働する ・空きマスにピースを動かすことで移動できる ・15ピースが正規の位置にくるとクリアとなる こんな感じですかね~ まずは、ピースを動かす事を考えてみます。 Sceneにボタンを配置して、押すと動くようにします。 移動にはDOTWeenを使います。 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class PieceManager : MonoBehaviour { …

続きを読む