Beispiel #1
0
        public override void walk(int x, int y)  //计算棋子移动范围
        {
            int i;

            for (i = 1; i <= 6 && Plate.inside(x + i, y) && Plate.plate[x + i][y] == null; ++i)
            {
                Plate.plateCol[x + i][y] = Color.gray;
            }
            Plate.canStrike(player, x + i, y, 0, 0, x, y);
            for (i = 1; i <= 6 && Plate.inside(x - i, y) && Plate.plate[x - i][y] == null; ++i)
            {
                Plate.plateCol[x - i][y] = Color.gray;
            }
            Plate.canStrike(player, x - i, y, 0, 0, x, y);
            for (i = 1; i <= 6 && Plate.inside(x, y + i) && Plate.plate[x][y + i] == null; ++i)
            {
                Plate.plateCol[x][y + i] = Color.gray;
            }
            Plate.canStrike(player, x, y + i, 0, 0, x, y);
            for (i = 1; i <= 6 && Plate.inside(x, y - i) && Plate.plate[x][y - i] == null; ++i)
            {
                Plate.plateCol[x][y - i] = Color.gray;
            }
            Plate.canStrike(player, x, y - i, 0, 0, x, y);
        }
Beispiel #2
0
 public override void turnTurn(int srcx, int srcy)
 {
     if (wait == 1)
     {
         wait = 2;
     }
     else if (wait == 2)
     {
         int atkx = srcx, atky = srcy;
         for (int i = 1; i <= arrowLength; ++i)
         {
             atkx += Math.Sign(waitx - srcx);
             atky += Math.Sign(waity - srcy);
             if (Plate.plate[atkx][atky] != null)
             {
                 if (Plate.canStrike(player, atkx, atky, 0, 0, srcx, srcy, true))
                 {
                     Plate.plate[atkx][atky] = null;
                 }
                 break;
             }
         }
         wait = 0;
     }
 }
Beispiel #3
0
 public override void walk(int x, int y)  //计算棋子移动范围
 {
     for (int i = x - 2; i <= x + 2; ++i)
     {
         for (int j = y - 2; j <= y + 2; ++j)
         {
             Plate.canStrike(player, i, j, 2, 2, x, y);
         }
     }
 }
Beispiel #4
0
 public override void calSkill(int selx, int sely)
 {
     for (int i = 1; i <= arrowLength; ++i)
     {
         Plate.canStrike(player, selx + i, sely, 0, 0, selx, sely, true);
         Plate.canStrike(player, selx - i, sely, 0, 0, selx, sely, true);
         Plate.canStrike(player, selx, sely + i, 0, 0, selx, sely, true);
         Plate.canStrike(player, selx, sely - i, 0, 0, selx, sely, true);
     }
 }
Beispiel #5
0
 public override void calSkill(int selx, int sely)
 {
     Plate.canStrike(PlayerControl.player, selx + 1, sely, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx - 1, sely, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx, sely + 1, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx, sely - 1, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx + 2, sely, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx - 2, sely, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx, sely + 2, 2, 2, selx, sely);
     Plate.canStrike(PlayerControl.player, selx, sely - 2, 2, 2, selx, sely);
 }
Beispiel #6
0
 public override void walk(int x, int y)  //计算棋子移动范围
 //a true b true b; a true b false ab; a false a;
 {
     if (!Plate.walkable(x - 1, y) || !Plate.canStrike(PlayerControl.player, x - 2, y, 2, 2, x, y))
     {
         Plate.canStrike(PlayerControl.player, x - 1, y, 2, 2, x, y);
     }
     if (!Plate.walkable(x + 1, y) || !Plate.canStrike(PlayerControl.player, x + 2, y, 2, 2, x, y))
     {
         Plate.canStrike(PlayerControl.player, x + 1, y, 2, 2, x, y);
     }
     if (!Plate.walkable(x, y - 1) || !Plate.canStrike(PlayerControl.player, x, y - 2, 2, 2, x, y))
     {
         Plate.canStrike(PlayerControl.player, x, y - 1, 2, 2, x, y);
     }
     if (!Plate.walkable(x, y + 1) || !Plate.canStrike(PlayerControl.player, x, y + 2, 2, 2, x, y))
     {
         Plate.canStrike(PlayerControl.player, x, y + 1, 2, 2, x, y);
     }
 }
Beispiel #7
0
        public override void turnTurn(int srcx, int srcy)
        {
            if (wait == 1)
            {
                wait = 2;
            }
            else if (wait == 2)
            {
                if (selectedSkill == "I")
                {
                    if (Plate.plate[waitx][waity] == null)
                    {
                        Plate.plate[waitx][waity] = new ArrowSnipeToken(waitx, waity, player);
                    }
                }
                if (Plate.canStrike(player, waitx, waity, 0, 0, srcx, srcy, true))
                {
                    Plate.plate[waitx][waity] = null;
                    wait = 0;
                }
                if (selectedSkill == "U")
                {
                    //箭雨和狙击技能共用一个变量。
                    //狙击技能只能放在空地,但是会放置一个token以阻止对方的前行。TODO:这个token有特殊之处,比如可以狙杀龙。
                    //箭雨技能则多两个格子。

                    int diffx = Math.Abs(waitx - srcx);
                    int diffy = Math.Abs(waity - srcy);
                    if (diffx > diffy)
                    {
                        if (Plate.canStrike(player, waitx, waity - 1, 0, 0, srcx, srcy, true))
                        {
                            Plate.plate[waitx][waity - 1] = null;
                        }
                        if (Plate.canStrike(player, waitx, waity + 1, 0, 0, srcx, srcy, true))
                        {
                            Plate.plate[waitx][waity + 1] = null;
                        }
                    }
                    else if (diffx < diffy)
                    {
                        if (Plate.canStrike(player, waitx - 1, waity, 0, 0, srcx, srcy, true))
                        {
                            Plate.plate[waitx - 1][waity] = null;
                        }
                        if (Plate.canStrike(player, waitx + 1, waity, 0, 0, srcx, srcy, true))
                        {
                            Plate.plate[waitx + 1][waity] = null;
                        }
                    }
                    else
                    {
                        if (Plate.canStrike(player, waitx, waity - Math.Sign(waity - srcy), 0, 0, srcx, srcy, true))
                        {
                            Plate.plate[waitx][waity - Math.Sign(waity - srcy)] = null;
                        }
                        if (Plate.canStrike(player, waitx - Math.Sign(waitx - srcx), waity, 0, 0, srcx, srcy, true))
                        {
                            Plate.plate[waitx - Math.Sign(waitx - srcx)][waity] = null;
                        }
                    }
                    wait = 0;
                }
            }
        }