前回ボタンの仕様の話をしましたで、今回は大事な「メイン処理」
ということで仕様の整理
※長いので大事な部分を分割して紹介
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public class Manager : MonoBehaviour { //オブジェクト参照 public GameObject canvasGame; //ゲームキャンパス public GameObject clearLabelObject; //クリア時のMSGを管理する public int stageNo; //ステージナンバー public Text t1; public Text t2; public Text t3; public Text t4; public Text t5; public Text t6; public Text t7; public Text t8; public Text t9; public Text t10; public Text t11; public Text t12; public Text t13; public Text t14; public Text t15; public Text t16; // publicで宣言し、inspectorで設定可能にする(滝画像16枚設定) public Sprite image1; public Sprite image2; public Sprite image3; public Sprite image4; public Sprite image5; public Sprite image6; public Sprite image7; public Sprite image8; public Sprite image9; public Sprite image10; public Sprite image11; public Sprite image12; public Sprite image13; public Sprite image14; public Sprite image15; public Sprite image16; public Sprite image_null; |
色々と調べたけど今回はべたに全部定義する方法を選択。
こうすると、↓のような感じになります。
で、
【テキストの部分(T)、画像の部分(Image)に画像などを設定します。】
テキスト部分は、ヒント用の数字を入れるためにあって、
このように定義すると「t13.text = “1”;」みたいにすごく簡単に値を操作できたのこの方法を採用!
画像の方はこのように正解画像を事前に設定しておくことで、画像を簡単に変更することができます。(【正解画像と番号】を定義している感じです。アセットの方にある画像をうまくせっていしたかったのですがうまく行く方法がみつからなかったのでこの方法を採用しました※事前準備は手間ですが、これぐらいの数ならばどうにかなる感じですね)
因みに設定するときは↓の感じ
GameObject.Find(“CanvasGame/Button_16”.ToString()).GetComponent<Image>().sprite = image16;
※「CanvasGame/Button_16」に、「image16」の画像を入れる感じ
文字も画像も更新する方法は色々とあるようですが、1行で更新が済むっていうのがお手軽だったのでこれを今後も採用していこうかと今は思ってます。
【メイン処理の仕様】
①正解の画像を設定(1~15に画像を設定、16は空白画像を設定)ちなみにZ的な感じで16分割している感じです。1は右上で、横は2,3,4,で5は二段目の右端
②現在のボタンの値を管理(画像と同様に、一番右上には何の画像(値)が入っているか管理する感じです ※ヒントボタンを押されたときにその数字が表示されるように)
③画像をランダムに動かす(現状500回)※ボタンが押された想定で
③①押されたときのチェック処理
【以下の場合は何もしない】
・クリアしていたら何もしない。
・空白のボタンが押されたら何もしない。
・押されたボタンの縦か横に空白がない場合は何もしない。
【上記以外の場合以下を行う】
③①①チェンジ処理
・画像と、入っている値を入れ替える。
③①②クリア判定
・番号が1~15で並んでいた場合はクリアとしてクリアを画面に表示させる(16にも正解画像を出して)
・クリアとして操作できないようにする。(戻るボタンだけ有効になる感じ)
④ヒントボタンが押されたとき
・数字が画面に表示されるようになる。
おおざっぱに記載するとこんな感じの処理です。処理量はそれなりにあるけど(べたに16個にかいていたりするから)整理すると簡単ですね。
ちなみに注意点としてはスタート時はランダムで操作して順番動かすけど、なかなかいい感じで最初動かないときもあるので、コーディングである程度動かしちゃうといいかも
move_syori(15);
move_syori(11);
って感じで事前に動かしちゃってます。
またちなみになんだけど、15パズルって最初に適当な数字をいれちゃうと正解がでないこともあるので、ランダムに値をいれようというのは注意です!
自分も最初は1~16のマスにランダムに値を入れる処理を考えたのですが、そうすると絶対に正解にならないことがあり(多分50%の確率)、一度正解を入れてから、動かしてバラバラにする方法をとりました。
メイン部分のお話でした。