コード例 #1
0
    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)]);
        }
    }
コード例 #2
0
    /*
     * //手番を進める関数
     * 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;
        }
    }