Esempio n. 1
0
class Grid:
    """The background for the game
    """
    def __init__(self, width, height, row_size, buffer_size, background_color, empty_color):
        self.width = width
        self.height = height
        self.row_size = row_size
        self.buffer_size = buffer_size
        self.background_color = background_color
        self.empty_color = empty_color
        
        self.buffer_side_length = (self.width - self.buffer_size) // self.row_size
        self.side_length = self.buffer_side_length - self.buffer_size
        self.cells = []
        self.background = Rect(0, 0, self.width, self.height)
        for i in range(self.row_size):
            for j in range(self.row_size):
                self.cells.append(Rect(j * self.buffer_side_length + self.buffer_size,
                               i * self.buffer_side_length + self.buffer_size, 
                               self.side_length,
                               self.side_length,
                               ))

    def make_tile_at(self, x, y):
        return Tile(x * self.buffer_side_length + self.buffer_size,
                    y * self.buffer_side_length + self.buffer_size,
                    self.side_length,
                    self.side_length)

    def grid_pos_to_pixel_pos(self, x, y):
        return (x * self.buffer_side_length + self.buffer_size,
                y * self.buffer_side_length + self.buffer_size)

    def draw(self):
        self.background.fill(self.background_color)
        for cell in self.cells:
            cell.fill(self.empty_color)
Esempio n. 2
0
class Tile:
    """A rectangle with a number"""
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        
        self.moving = False
        self.teleport = False
        self.to_x = self.x
        self.to_y = self.y

        if ( random.random() < 0.1):
            self.value = 4
        else:
            self.value = 2

        self.color = COLORS[self.value]
        self.child = None
        self.font_size = math.floor(72/96 * (self.width / len(str(self.value)) *.95))

        self.rect = Rect(self.x, self.y, self.width, self.height)
        self.label = pyglet.text.Label(str(self.value),
                                       font_name='Calibri',
                                       font_size=self.font_size,
                                       color=(0,0,0,255),
                                       x=self.x + self.width // 2,
                                       y=self.y + self.height // 2,
                                       anchor_x='center',
                                       anchor_y='center')

        print(self.label.width)

    def move_to(self, x, y, teleport=False):
        self.to_x = x
        self.to_y = y
        self.moving = True
        self.teleport = teleport

    def draw(self):
        if self.child is not None:
            self.child.draw()
        self.rect.fill(self.color)
        self.label.draw()

    def move(self, speed):
        if self.moving:
            if self.child is not None:
                self.child.move(speed)

            d = dist(self.x, self.y, self.to_x, self.to_y)
            if not self.teleport and d > speed:
                self.set(x=self.x + speed * (self.to_x - self.x) / d,
                         y=self.y + speed * (self.to_y - self.y) / d)
            else:
                self.set(x=self.to_x, y=self.to_y)
                self.teleport = False
                if self.child is not None:
                    if not self.child.moving:
                        self.set(value=self.value + self.child.value)
                        self.child = None
                        self.moving = False
                else:
                    self.moving = False
            
    def absorb(self, other):
        self.child = other
        self.moving = True

    def set(self, x=None, y=None, width=None, height=None, value=None, color=None):
        if x is not None:
            self.x = x
            self.rect.x = x
        if y is not None:
            self.y = y
            self.rect.y = y
        if width is not None:
            self.width = width
            self.rect.width = width
        if height is not None:
            self.height = height
            self.rect.height = height
        if value is not None:
            self.value = value
            self.label.text = str(self.value)
            self.color = COLORS[value]
            self.font_size = math.floor(72/96 * (self.width / len(str(self.value)) *.95))
        if color is not None:
            self.color = color
        
        self.label = pyglet.text.Label(str(self.value),
                                       font_name='Calibri',
                                       font_size=self.font_size,
                                       color=(0,0,0,255),
                                       x=self.x + self.width // 2,
                                       y=self.y + self.height // 2,
                                       anchor_x='center',
                                       anchor_y='center')