UnityとPhotonで対戦型ボードゲーム「犬猫将棋」を作成したい(8):桂馬と王将の動きを考える


犬猫将棋ソースコード、素材、遊べるリンクはこちら

桂馬の動きは非常に単純で5x5の盤面の場合、+9と+11の場所には動けるということになります。ただし端っこの列にいるときは片側しか動けないので、その部分はif文で分けてあげる必要があります。それから、桂馬は動けない盤面の上のほうには打てないので、それも処理を分けてあげる必要があります。

  else if (Naru == false && Shu == 1 && PhotonNetwork.player.ID == 1)//桂馬の場合
        {
            if (masuHandler.masuNum == 26 || masuHandler.masuNum == 0)
            {
                if (field == 0)
                {
                    int i;
                    for (i = 16; i < 26; i++)
                    {
                        Masu[i].GetComponent<BoxCollider2D>().enabled = false;
                        Masu[i].GetComponent<MeshRenderer>().enabled = false;
                    }
                }
                else
                {
                    int i;
                    for (i = 11; i < 26; i++)
                    {
                        Masu[i].GetComponent<BoxCollider2D>().enabled = false;
                        Masu[i].GetComponent<MeshRenderer>().enabled = false;
                    }
                }
            }
            else if (masuHandler.masuNum == 12 || masuHandler.masuNum == 13 || masuHandler.masuNum == 14 ||
               masuHandler.masuNum == 17 || masuHandler.masuNum == 18 || masuHandler.masuNum == 19 ||
               masuHandler.masuNum == 22 || masuHandler.masuNum == 23 || masuHandler.masuNum == 24)
            {
                Masu[masuHandler.masuNum - 11].GetComponent<BoxCollider2D>().enabled = false;
                Masu[masuHandler.masuNum - 11].GetComponent<MeshRenderer>().enabled = false;
                Masu[masuHandler.masuNum - 9].GetComponent<BoxCollider2D>().enabled = false;
                Masu[masuHandler.masuNum - 9].GetComponent<MeshRenderer>().enabled = false;
            }
            else if (masuHandler.masuNum == 11 || masuHandler.masuNum == 16 || masuHandler.masuNum == 21)
            {
                Masu[masuHandler.masuNum - 9].GetComponent<BoxCollider2D>().enabled = false;
                Masu[masuHandler.masuNum - 9].GetComponent<MeshRenderer>().enabled = false;
            }
            else if (masuHandler.masuNum == 15 || masuHandler.masuNum == 20 || masuHandler.masuNum == 25)
            {
                Masu[masuHandler.masuNum - 11].GetComponent<BoxCollider2D>().enabled = false;
                Masu[masuHandler.masuNum - 11].GetComponent<MeshRenderer>().enabled = false;
            }

        }

打ち駒の場合とそうではない場合は、fieldという打ち駒固有の整数値によって、打てる場所を制限して場合分けをしています。

王様の動きは5x5の盤面の場合+4、+5、+6、+1、-1、-4、-5、-6の場所に動けるということになります。金の場合と場合分けは一緒ですね。

 else if (Naru == false && Shu == 4 && PhotonNetwork.player.ID == 1)//玉の場合 inu
        {
            if (masuHandler.masuNum == 26 || masuHandler.masuNum == 0)
            {
                if (field == 0)
                {
                    int i;
                    for (i = 16; i < 26; i++)
                    {
                        Masu[i].GetComponent<BoxCollider2D>().enabled = false;
                        Masu[i].GetComponent<MeshRenderer>().enabled = false;
                    }
                }
                else
                {
                    int i;
                    for (i = 1; i < 26; i++)
                    {
                        Masu[i].GetComponent<BoxCollider2D>().enabled = false;
                        Masu[i].GetComponent<MeshRenderer>().enabled = false;
                    }
                }
            }
            else if (masuHandler.masuNum < 6)//上段の場合
            {
                if (masuHandler.masuNum % 5 == 2 || masuHandler.masuNum % 5 == 3 || masuHandler.masuNum % 5 == 4)//真ん中にいるとき
                {
                    Masu[masuHandler.masuNum + 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<MeshRenderer>().enabled = false;
                }
                else if (masuHandler.masuNum % 5 == 1) //左端にいるとき
                {
                    Masu[masuHandler.masuNum + 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<MeshRenderer>().enabled = false;
                }
                else if (masuHandler.masuNum % 5 == 0 && masuHandler.masuNum != 0) //右端にいるとき
                {
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<MeshRenderer>().enabled = false;
                }
            }
            else if (masuHandler.masuNum > 20)//下段の場合
            {
                if (masuHandler.masuNum % 5 == 2 || masuHandler.masuNum % 5 == 3 || masuHandler.masuNum % 5 == 4)//真ん中にいるとき
                {
                    Masu[masuHandler.masuNum - 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<MeshRenderer>().enabled = false;
                }
                else if (masuHandler.masuNum % 5 == 1) //左端にいるとき
                {
                    Masu[masuHandler.masuNum - 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;

                }
                else if (masuHandler.masuNum % 5 == 0 && masuHandler.masuNum != 0) //右端にいるとき
                {
                    Masu[masuHandler.masuNum - 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<MeshRenderer>().enabled = false;

                }
            }
            else//中段の場合
            {
                if (masuHandler.masuNum % 5 == 2 || masuHandler.masuNum % 5 == 3 || masuHandler.masuNum % 5 == 4)//真ん中にいるとき
                {

                    Masu[masuHandler.masuNum - 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<MeshRenderer>().enabled = false;

                }
                else if (masuHandler.masuNum % 5 == 1)//左端にいるとき
                {
                    Masu[masuHandler.masuNum - 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 6].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<MeshRenderer>().enabled = false;

                }
                else if (masuHandler.masuNum % 5 == 0 && masuHandler.masuNum != 0)//右端にいるとき
                {
                    Masu[masuHandler.masuNum - 6].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 6].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 5].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum - 1].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 4].GetComponent<MeshRenderer>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<BoxCollider2D>().enabled = false;
                    Masu[masuHandler.masuNum + 5].GetComponent<MeshRenderer>().enabled = false;
                }
            }

        }

これで、全駒の動きをガイドすることができるようになりました。次は成駒と打ち駒の動きを考えていきたいと思います。

おすすめの記事