次はスライド系のパズルを作ってみたいと思います。
定番のスライドパズル(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 {
//トランスホーム用変数
private RectTransform rect;
// Use this for initialization
void Start () {
//ピースボタンのトランスホームを取得
rect = this.gameObject.GetComponent();
}
// Update is called once per frame
void Update () {
}
//ピースボタンを押した処理
public void PuPiece()
{
//ピースボタンをX座標400まで移動させる 移動時間0.5秒
rect.DOLocalMove(new Vector3(400f, 0f, 0f), 0.5f);
}
}
このスクリプトをButtonオブジェクトにアタッチして、
ButtonオブジェクトのOnClickにPuPieceメソッドを割り当てて
再生できない場合、ダウンロードは🎥こちら
ここまでは簡単なのですが、
Pieceは4方向に移動する
隣に空きマスがある時のみ
この条件をどうするか…
ポジションを16個用意して、空きマスをtrueとして判断する。
隣接するポジションがtrueなら、そこへ移動する。
とりあえず、これで様子見です。
ポジション用のbool型配列変数と座標のリストを用意して、
ピースを15個にして…
スクリプトを書き始めて気が付いたんですが、
どのピースが押されたかが分からない…
とりあえずpublic void PuPiece(int BtNo)に変更して…
あれ?
ピースがどこにあるか分からない…
空きマスだけ分かっても意味がない o(ToT)o ダー
ならばピースの位置も空きマスも分かるように、
ポジションをbool型からint型に変えて、番号を振ってみるとか…
イメージは
ポジションを決めてそこにピースNoを格納する
空きマスを0にして、ピースは1~15を入力して、
Pos0に空きがあれば、Pos0=0 みたいな…
変数を用意して、初期位置も確定して
さて移動メソッドを…
ピースが移動したら、どうやってポジションを確認するんだ?
「(ーヘー;) え~と
スライドパズルくらい簡単やろ!
と考えていましたが、む、むつかしい
少し知恵を絞ってみます。
( ̄~ ̄;) ウーン
この記事へのコメント