Ejemplo n.º 1
0
 def setSquare(self, c: Coord, p: Piece):
     if (c.isValid() == False):
         raise Exception("Invalid set, out of bounds: Tried to get at " +
                         str(c))
     self.board[c.y][c.x] = Piece(p.name, p.team, p.id, p.timeMoved)
Ejemplo n.º 2
0
    def getPossibleMoves(self, c: Coord):
        if (c.isValid() == False):
            return -1
        p = self.getSquare(c)
        enemyTeam = 0 if p.team == 1 else 1
        if p.name == "knight":
            deltas = [
                Coord(1, 2),
                Coord(2, 1),
                Coord(-1, 2),
                Coord(-2, 1),
                Coord(1, -2),
                Coord(2, -1),
                Coord(-1, -2),
                Coord(-2, -1),
            ]
            out = []
            for delta in deltas:
                temp = c + delta
                if (temp.isValid() and self.getSquare(temp).team != p.team):
                    out.append(temp)
            return out
        elif p.name == "king":
            deltas = [
                Coord(-1, 0),
                Coord(-1, -1),
                Coord(0, -1),
                Coord(1, -1),
                Coord(1, 0),
                Coord(1, 1),
                Coord(0, 1),
                Coord(-1, 1)
            ]
            out = []
            for delta in deltas:
                temp = c + delta
                if (temp.isValid() and self.getSquare(temp).team != p.team):
                    out.append(temp)
            return out
        elif p.name == "rook":
            deltas = [Coord(-1, 0), Coord(1, 0), Coord(0, 1), Coord(0, -1)]
            out = []
            for delta in deltas:
                temp = c + delta
                while (temp.isValid() and self.getSquare(temp).team != p.team):
                    if (self.getSquare(temp).team == enemyTeam):
                        out.append(temp)
                        break
                    out.append(temp)
                    temp = temp + delta
            return out
        elif p.name == "bishop":
            deltas = [Coord(-1, 1), Coord(-1, -1), Coord(1, 1), Coord(1, -1)]
            out = []
            for delta in deltas:
                temp = c + delta
                while (temp.isValid() and self.getSquare(temp).team != p.team):
                    if (self.getSquare(temp).team == enemyTeam):
                        out.append(temp)
                        break
                    out.append(temp)
                    temp = temp + delta
            return out
        elif p.name == "queen":
            deltas = [
                Coord(-1, 0),
                Coord(1, 0),
                Coord(0, 1),
                Coord(0, -1),
                Coord(-1, 1),
                Coord(-1, -1),
                Coord(1, 1),
                Coord(1, -1)
            ]
            out = []
            for delta in deltas:
                temp = c + delta
                while (temp.isValid() and self.getSquare(temp).team != p.team):
                    if (self.getSquare(temp).team == enemyTeam):
                        out.append(temp)
                        break
                    out.append(temp)
                    temp = temp + delta
            return out
        elif p.name == "pawn":
            out = []

            forwards = Coord(0, 1)
            if (p.team == 0):
                forwards = Coord(0, -1)
            if (self.getSquare(c + forwards).team == -1):
                out.append(c + forwards)
                if (p.timeMoved == 0 and
                        self.getSquare(c + forwards + forwards).team == -1):
                    out.append(c + forwards + forwards)

            #capturing
            deltas = [Coord(-1, 0) + forwards, Coord(1, 0) + forwards]
            for delta in deltas:
                t = c + delta
                # print("Coord:",t)
                # print("Square:",self.getSquare(t))
                # print("Team:",self.getSquare(t).team)
                if t.isValid() and self.getSquare(t).team == enemyTeam:
                    out.append(t)
            """Add en passant if extra time"""
            return out
        raise Exception("Tried to get move at non piece square " + str(c))
Ejemplo n.º 3
0
 def getSquare(self, c: Coord):
     if (c.isValid() == False):
         raise Exception("Invalid get, out of bounds: Tried to get at " +
                         str(c))
     return self.board[c.y][c.x]