public Te fromjoseki(Kyokumenn k, int tesu) { //tesuには実際の手数が渡されるが、定跡データは0手目から始まるので1ずらしておく tesu = tesu - 1; //定跡にあった候補手を入れる List <Te> teList = new List <Te>(); //定跡で進めた局面を作り、渡された局面と比較する Kyokumenn josekiKyokumenn = new Kyokumenn(); for (int i = 0; i < numJoseki; i++) { //平手で初期化 josekiKyokumenn.BanShokika(); for (int j = 0; j < tesu; j++) { if (josekiData [i][j * 2] == (byte)0 || josekiData [i][j * 2] == (byte)0xff) { break; } Te te = josekiByteToTe(josekiData [i][j * 2], josekiData [i][j * 2 + 1], josekiKyokumenn); josekiKyokumenn.Move(te); josekiKyokumenn.turn += 1; } //局面が一致するか if (josekiKyokumenn.equals(k)) { if (josekiData [i][tesu * 2] == (byte)0 || josekiData [i][tesu * 2] == (byte)0xff) { continue; } //候補手を生成 Te te = josekiByteToTe(josekiData[i][tesu * 2], josekiData[i][tesu * 2 + 1], k); teList.Add(te); } } if (teList.Count == 0) { //候補手がない場合 /* * if(child != null){ * //子定跡がある時は、その結果を返す * return child.fromjoseki(k,tesu); * } */ //候補手がなかったのでnullを返す return(null); } else { //候補手の中からランダム //候補手がない場合 return(teList[UnityEngine.Random.Range(0, teList.Count)]); } }
/* * //手番を進める関数 * void ChangeTurn(Te te){ * * if (kk.turn % 2 == 1) { * turn.GetComponent<Text> ().text = "後手"; * } else { * turn.GetComponent<Text> ().text = "先手"; * } * * * kk.turn = kk.turn + 1; * kihu.Add (te.DeepCopy()); * * if (te.capture != 0 && te.capture != 1 && te.capture != 17) { * phase = true; * } * * if (kk.turn > 10 && phase) { * sikou.DEPTH_MAX = 3; * } * * * * for (int j = 0; j < historykyokumenn.Count; j++) { * if (kk.equals (historykyokumenn [j])) { * kk.sameKyokumenn += 1; * } * * } * * if (kk.sameKyokumenn > 3) { * vsCom = false; * vsComGote = false; * winner.GetComponent<Text>().text = "千日手により引き分けです"; * resultCanvas.GetComponent<Canvas>().enabled = true; * * for (int i = 1;i <= 81 ; i++){ * * Masu [i - 1].GetComponent<Button> ().interactable = false; * Masu [i - 1].GetComponent<Image> ().color = new Color (255f / 255f, 255f / 255f, 255f / 255f, 255f / 255f); * * } * } * kk.sameKyokumenn = 0; * * * historykyokumenn.Add (kk.DeepCopyKyokumenn()); * * * if (kihu.Count > 1) { * Masu [kihu [kk.turn - 3].to - 1].GetComponent<Image> ().color = new Color (255f / 255f, 255f / 255f, 255f / 255f, 255f / 255f); * } * Masu [te.to - 1].GetComponent<Image> ().color = new Color (255f / 255f, 180f / 255f, 0f / 255f, 255f / 255f); * * * //合法手が無くなったら * if (kk.GenerateLegalMoves ().Count == 0) { * * vsCom = false; * vsComGote = false; * print (kk.turn); * * if (kk.turn % 2 == 1) { * winner.GetComponent<Text>().text = "後手の勝利です"; * } else { * winner.GetComponent<Text>().text = "先手の勝利です"; * } * //勝敗がついたらボタンをオフに * for (int i = 1;i <= 81 ; i++){ * * Masu [i - 1].GetComponent<Button> ().interactable = false; * Masu [i - 1].GetComponent<Image> ().color = new Color (255f / 255f, 255f / 255f, 255f / 255f, 255f / 255f); * * } * * resultCanvas.GetComponent<Canvas>().enabled = true; * * } * } * * * */ //手番を進める関数 IEnumerator Changeturn(Te te) { if (kk.turn % 2 == 1) { turn.GetComponent <Text> ().text = "後手"; } else { turn.GetComponent <Text> ().text = "先手"; } yield return(new WaitForEndOfFrame()); kk.turn = kk.turn + 1; kihu.Add(te.DeepCopy()); for (int j = 0; j < historykyokumenn.Count; j++) { if (kk.equals(historykyokumenn [j])) { kk.sameKyokumenn += 1; } } if (kk.sameKyokumenn > 3) { vsCom = false; vsComGote = false; winner.GetComponent <Text>().text = "千日手により引き分けです"; resultCanvas.GetComponent <Canvas>().enabled = true; for (int i = 1; i <= 81; i++) { Masu [i - 1].GetComponent <Button> ().interactable = false; Masu [i - 1].GetComponent <Image> ().color = new Color(255f / 255f, 255f / 255f, 255f / 255f, 255f / 255f); } } kk.sameKyokumenn = 0; historykyokumenn.Add(kk.DeepCopyKyokumenn()); if (kihu.Count > 1) { Masu [kihu [kk.turn - 3].to - 1].GetComponent <Image> ().color = new Color(255f / 255f, 255f / 255f, 255f / 255f, 255f / 255f); } Masu [te.to - 1].GetComponent <Image> ().color = new Color(255f / 255f, 180f / 255f, 0f / 255f, 255f / 255f); //合法手が無くなったら if (kk.GenerateLegalMoves().Count == 0) { vsCom = false; vsComGote = false; print(kk.turn); if (kk.turn % 2 == 1) { winner.GetComponent <Text>().text = "後手の勝利です"; } else { winner.GetComponent <Text>().text = "先手の勝利です"; } //勝敗がついたらボタンをオフに for (int i = 1; i <= 81; i++) { Masu [i - 1].GetComponent <Button> ().interactable = false; Masu [i - 1].GetComponent <Image> ().color = new Color(255f / 255f, 255f / 255f, 255f / 255f, 255f / 255f); } resultCanvas.GetComponent <Canvas>().enabled = true; } }