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); }
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; } }
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); } } }
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); } }
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); }
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); } }
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; } } }