位置の割り出しまでできたので、
隣接した空きマスへピースを移動させるのですが…
全ピースを動かす事ばかり考えてしまっていたので、
あれもこれもとなって、頭の中がパニック状態です。
まずは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.Generic;
using UnityEngine;
using DG.Tweening;
public class PieceManager : MonoBehaviour {
//ポジション変数
private int[] Pos = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
//座標変数
private int[] Xp = { -240, -80, 80, 240,
-240, -80, 80, 240,
-240, -80, 80, 240,
-240, -80, 80, 240 };
private int[] Yp = { 240, 240, 240, 240,
80, 80, 80, 80,
-80, -80, -80, -80,
-240, -240, -240, -240, };
//空きマスと押したピースの座標取得用変数
private int Add0;
private int AddP;
移動メッソドを追加してみます。
//ピースボタンを押した処理
public void PuPiece(int BtNo)
{
//押したピースと空きマスのポジション確認
for (int i = 0; i < 16; i++)
{
if (Pos[i] == 0)
{
Add0 = i;
}
if (Pos[i] == BtNo)
{
AddP = i;
}
}
if (Pos[0] == 0 || Pos[2] == 0 || Pos[5] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
これで1番ピースは動かせそうです。
これを元に複数ピースの移動を考えてみたいと思います。
・ポジション毎に空きマスの判定をする
・移動ピースのトランスホームを都度取得する必要がある
この条件を加えてスクリプトを変更してみました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class PieceManager : MonoBehaviour {
//ピースオブジェクト
public GameObject[] Piece;
//トランスホーム用変数
private RectTransform rect;
//ポジション変数
private int[] Pos = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
//座標変数
private int[] Xp = { -240, -80, 80, 240,
-240, -80, 80, 240,
-240, -80, 80, 240,
-240, -80, 80, 240 };
private int[] Yp = { 240, 240, 240, 240,
80, 80, 80, 80,
-80, -80, -80, -80,
-240, -240, -240, -240, };
//空きマスと押したピースの座標取得用変数
private int Add0;
private int AddP;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update () {
}
//ピースボタンを押した処理
public void PuPiece(int BtNo)
{
//ピースボタンのトランスホームを取得
rect = this.gameObject.GetComponent();
//押したピースと空きマスのポジション確認
for (int i = 0; i < 16; i++)
{
if (Pos[i] == 0)
{
Add0 = i;
}
if (Pos[i] == BtNo)
{
AddP = i;
}
}
//ポジション毎のピースの移動処理
switch (AddP)
{
case 0:
if (Pos[1] == 0 || Pos[4] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 1:
if (Pos[0] == 0 || Pos[2] == 0 || Pos[5] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 2:
if (Pos[1] == 0 || Pos[3] == 0||Pos[6]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 3:
if (Pos[2] == 0 || Pos[7] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 4:
if (Pos[0] == 0 || Pos[5] == 0||Pos[8]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 5:
if (Pos[1] == 0 || Pos[4] == 0 || Pos[6] == 0||Pos[9]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 6:
if (Pos[2] == 0 || Pos[5] == 0 || Pos[7] == 0||Pos[10]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 7:
if (Pos[3] == 0 || Pos[6] == 0||Pos[11]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 8:
if (Pos[4] == 0 || Pos[9] == 0||Pos[12]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 9:
if (Pos[5] == 0 || Pos[8] == 0 || Pos[10] == 0||Pos[13]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 10:
if (Pos[6] == 0 || Pos[9] == 0 || Pos[11] == 0||Pos[14]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 11:
if (Pos[7] == 0 || Pos[10] == 0||Pos[15]==0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 12:
if (Pos[8] == 0 || Pos[13] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 13:
if (Pos[9] == 0 || Pos[12] == 0 || Pos[14] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 14:
if (Pos[10] == 0 || Pos[13] == 0 || Pos[15] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
case 15:
if (Pos[11] == 0 || Pos[14] == 0)
{
rect.DOLocalMove(new Vector3(Xp[Add0], Yp[Add0], 0f), 0.2f);
Pos[AddP] = 0;
Pos[Add0] = BtNo;
}
break;
}
}
}
×
この広告は90日以上新しい記事の投稿がないブログに表示されております。
この記事へのコメント