Пример #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
    //ゲームを初めから
    public void Restart()
    {
        popupCanvas.GetComponent <Canvas>().enabled  = false;
        resultCanvas.GetComponent <Canvas>().enabled = false;
        sente.GetComponent <Text> ().text            = "P";
        gote.GetComponent <Text> ().text             = "P";
        turn.GetComponent <Text>().text = "先手";

        vsCom             = false;
        vsComGote         = false;
        kk                = new Kyokumenn();
        kk.josekiBool     = true;
        kihu              = new List <Te> ();
        historykyokumenn  = new List <Kyokumenn> ();
        this.isSelectKoma = 0;                                         //スタート時は駒を選択していない
        sikou.DEPTH_MAX   = 4;

        if (kihu.Count != 0)
        {
            kihu.Clear();
        }

        kk.turn = 1;
        kk.BanShokika();

        //初期盤面を入れる
        for (int masu = 0; masu <= 81; masu++)
        {
            kk.banKoma[masu] = Kyokumenn.SHOKI_BAN[masu];
        }

        //ボタンを有効にし、駒を正しく
        for (int i = 1; i <= 81; i++)
        {
            Masu [i - 1].GetComponent <Button> ().interactable = true;
            Masu [i - 1].GetComponent <Image>().sprite         = komaPicture[kk.banKoma[i]];
        }


        for (int koma = 1; koma < 8; koma++)
        {
            hand[koma].GetComponent <Text>().text     = kk.hand [1] [koma].ToString();
            hand[koma + 8].GetComponent <Text>().text = kk.hand [0] [koma + 16].ToString();
        }
    }