Beispiel #1
0
class Board:
    def __init__(self, width, height, cell_size):
        self.w = width
        self.h = height
        self.cell_size = cell_size
        self.start = None
        self.goal = None
        self.player = None
        self.obstacles = []
        self.flags = []
        self.captured_flags = []
    
    def _valid(self, x, y):
        return x >= 0 and x < self.w and y >= 0 and y < self.h
        
    def _collide(self, x, y):
        return Obj(x,y) in self.obstacles
        
    def _checkFlags(self):
        if self.player in self.flags:
            self.flags.remove(self.player)
            self.captured_flags.append(Flag(self.player.x, self.player.y, self.cell_size/2))
    
    def _checkGoal(self):
        if self.player == self.goal:
            self.player.update(self.start[0], self.start[1])
            if self.flags == []:
                self.flags = list(self.captured_flags)
            else:
                self.flags.extend(self.captured_flags)
            self.captured_flags = []
    
    def addStart(self, x, y):
        if self._valid(x, y):
            self.start = (x, y)
    
    def addGoal(self, x, y):
        if self._valid(x, y):
            self.goal = Goal(x, y, self.cell_size)
        
    def addPlayer(self, x, y):
        if self._valid(x, y):
            self.player = Player(x, y, self.cell_size/2)
    
    def addObstacle(self, x, y):
        if self._valid(x, y):
            self.obstacles.append(Obstacle(x, y, self.cell_size))
    
    def addObstacles(self, obstacles):
        for (x,y) in obstacles:
            self.addObstacle(x, y)
    
    def addFlag(self, x, y):
        if self._valid(x, y):
            self.flags.append(Flag(x, y, self.cell_size/2))
    
    def addFlags(self, flags):
        for (x,y) in flags:
            self.addFlag(x, y)
            
    def moveUp(self):
        if self._valid(self.player.x,self.player.y-1) and not self._collide(self.player.x,self.player.y-1):
            self.player.update(self.player.x,self.player.y-1)
            
        self._checkFlags()
        self._checkGoal()
    
    def moveDown(self):
        if self._valid(self.player.x,self.player.y+1) and not self._collide(self.player.x,self.player.y+1):
            self.player.update(self.player.x,self.player.y+1)
            
        self._checkFlags()
        self._checkGoal()
    
    def moveRight(self):
        if self._valid(self.player.x+1,self.player.y) and not self._collide(self.player.x+1,self.player.y):
            self.player.update(self.player.x+1,self.player.y)
            
        self._checkFlags()
        self._checkGoal()
                
    def moveLeft(self):
        if self._valid(self.player.x-1,self.player.y) and not self._collide(self.player.x-1,self.player.y):
            self.player.update(self.player.x-1,self.player.y)
        
        self._checkFlags()
        self._checkGoal()
   
    def display(self, screen):
        self.player.display(screen)
        self.goal.display(screen)
        
        for flag in self.flags:
            flag.display(screen)
            
        for obstacle in self.obstacles:
            obstacle.display(screen)