def draw(self, window):

        font = pygame.font.SysFont(self.font_name, size=self.text_size)

        max_img_letter_width, max_img_letter_height = self.get_max_letter_size(
        )

        #On dessine les lignes qui montrent la position des lettres
        for x_i in range(self.n_letter):

            underline_width = max_img_letter_width
            underline_y = self.pos[1] + self.padding + max_img_letter_height + 3
            underline_x = self.pos[
                0] + self.padding + x_i * underline_width + x_i * self.space_between_letter

            underline_start_pos = (underline_x, underline_y)
            underline_end_pos = (underline_x + underline_width, underline_y)

            pygame.draw.line(window, self.color, underline_start_pos,
                             underline_end_pos, 2)

            if (x_i == self.n_letter - 1):
                box_width = underline_x + underline_width + self.padding - self.space_between_letter

        #On dessine les lettres
        for i in range(len(self.text)):

            letter = self.text[i]

            img_letter = font.render(letter, True, self.color)
            img_letter_size = img_letter.get_size()

            img_x = self.pos[
                0] + self.padding + i * max_img_letter_width + max_img_letter_width / 2 - img_letter_size[
                    0] / 2 + i * self.space_between_letter
            img_y = self.pos[
                1] + self.padding + max_img_letter_height - img_letter_size[1]

            img_letter_rect = (img_x, img_y, max_img_letter_width,
                               img_letter_size[1])
            window.blit(img_letter, img_letter_rect)

            if (self.n_letter_max != -1 and i == self.n_letter_max - 1):
                break

        box_x = self.pos[0]
        box_y = self.pos[1]
        box_height = 2 * self.padding + max_img_letter_height + 7

        box_rect = (box_x, box_y, box_width, box_height)

        box = Shape()
        box.new_rectangle(window, self.b_color, box_rect, 1)
        box.draw()
Exemple #2
0
class Tetris(object):
    W = 12          # the width of play board
    H = 20          # the height of play board
    TILEW = 20      # the pixel width/height of a tile
    START = (100, 40) # the playboard lefttop on background
    SPACE = 1000    # shape will fall after xxx ms(level 1)
    def __init__(self, screen):
        self.stat = "game"
        self.WIDTH = self.TILEW * self.W
        self.HEIGHT = self.TILEW * self.H
        self.screen = screen
        self.pause = False
        # the array save current situation
        # same as screen cood
        self.board = []
        for i in xrange(self.H):
            line = [ None ] * self.W
            self.board.append(line)
        # will display
        self.level = 1
        self.killed = 0
        self.score = 0
        # after this time, shape falls
        self.time = self.SPACE * 0.9 ** (self.level - 1)
        # save the elapsed time after last fail
        self.elapsed = 0
        # used for judge pressed firstly or for a  long time
        self.pressing = 0
        # the moving shape
        self.shape = Shape(self.START,
                (self.WIDTH, self.HEIGHT), (self.W, self.H))
        self.shape.set_board(self.board)
        self.board_image = pygame.Surface((self.WIDTH, self.HEIGHT))
        # draw the background once
        self.screen.blit(pygame.image.load(
            util.file_path("background.jpg")).convert(), (0, 0))
        self.display_info()

    def update(self, elapse):
        for e in pygame.event.get():
            if e.type == KEYDOWN:
                self.pressing = 1
                self.move(e.key == K_UP, e.key == K_DOWN,
                        e.key == K_LEFT, e.key == K_RIGHT)
                if e.key == K_ESCAPE:
                    self.stat = 'menu'
                elif e.key == K_SPACE:
                    self.pause = not self.pause
            elif e.type == KEYUP and self.pressing:
                self.pressing = 0
            elif e.type == QUIT:
                self.stat = 'quit'
        if self.pause:
            self.draw()
            return self.stat
        if self.pressing:
            pressed = pygame.key.get_pressed()
            self.move(pressed[K_UP], pressed[K_DOWN],
                    pressed[K_LEFT], pressed[K_RIGHT])
        self.elapsed += elapse
        if self.elapsed >= self.time:
            self.next()
            self.elapsed = self.elapsed - self.time
            self.draw()
        return self.stat

    def move(self, u, d, l, r):
        if not (u or d or l or r):
            return
        # pressed for the first time
        # pressed for a long time
        if self.pressing == 1 or self.pressing > 10:
            if u:   self.shape.rotate()
            elif d: self.next()     #self.shape.move(0, 1) is bad
            elif l: self.shape.move(-1, 0)
            elif r: self.shape.move(1, 0)
            self.draw()
        self.pressing += 1

    def check_line(self):
        self.add_to_board()
        filled = []
        for i in xrange(self.H-1, -1, -1):
            line = self.board[i]
            sum = 0
            for t in line:
                sum += 1 if t else 0
            if sum == self.W:
                filled.append(i)
            elif sum == 0:
                break
        if i == 0 and sum !=0:
            self.game_over()
        self.create_board_image() # used for killing animation
        self.kill_line(filled)
        self.create_board_image() # used for update

    def kill_line(self, filled=[]):
        if len(filled) == 0:
            return
        # play sound effect
        play_sound(str(len(filled)))
        # play animation
        mask = pygame.Surface((self.WIDTH, self.TILEW), SRCALPHA, 32)
        for i in xrange(5):
            if i % 2 == 0:
                mask.fill((255, 255, 255, 100))
            else:
                mask.fill((255, 255, 255, 200))
            self.screen.blit(self.board_image, self.START)
            for line in filled:
                self.screen.blit(mask, (
                        self.START[0],
                        self.START[1] + line * self.TILEW))
                pygame.display.update()
            pygame.time.wait(80)
        # remove filled lines
        [self.board.pop(l) for l in sorted(filled, reverse=True)]
        # fill with blank lines
        [self.board.insert(0, [None] * self.W) for l in filled]
        self.get_score(len(filled))

    def get_score(self, num):
        self.killed += num
        self.score += num * num * 10 * self.level
        self.level = 1 + self.killed // 10
        self.time = self.SPACE * 0.9 ** (self.level - 1)

    def add_to_board(self):
        for x in xrange(self.shape.SHAPEW):
            for y in xrange(self.shape.SHAPEH):
                if self.shape.shape[y][x]:
                    self.board[self.shape.y+y][self.shape.x+x] = Tile(
                            self.shape.color,self.shape._image[self.shape.index])

    def create_board_image(self):
        self.board_image.fill((0, 0, 0))
        for x in xrange(self.H):
            for y in xrange(self.W):
                if self.board[x][y]:
                    rect = pygame.Rect(y * self.TILEW, x * self.TILEW,
                            self.TILEW, self.TILEW)
                    self.board_image.blit(self.board[x][y].image, rect)

    def next(self):
        if self.shape.at_bottom():
            play_sound('drop')
            self.check_line()
            self.shape.new()
            self.display_info()
        else:
            self.shape.move(0, 1)

    def draw(self):
        self.screen.blit(self.board_image, self.START)
        self.shape.draw(self.screen)
        if self.pause:
            util.myprint(self.screen, "PAUSE",
                    (self.START[0]+50, self.START[1]+200), "m")

    def display_info(self):
        self._display_next()
        self._display_score()

    def _display_score(self):
        try:
            self._score_board
        except AttributeError:
            self._score_board = (
                    self.START[0] + self.WIDTH + 30,
                    self.START[1] + 100,
                    200, 260)
            self._score_level = (
                    self._score_board[0] + 10,
                    self._score_board[1] + 10)
            self._score_level_v = (
                    self._score_board[0] + 30,
                    self._score_board[1] + 50)
            self._score_killed = (
                    self._score_board[0] + 10,
                    self._score_board[1] + 90)
            self._score_killed_v = (
                    self._score_board[0] + 30,
                    self._score_board[1] + 130)
            self._score_score = (
                    self._score_board[0] + 10,
                    self._score_board[1] + 170)
            self._score_score_v = (
                    self._score_board[0] + 30,
                    self._score_board[1] + 210)
        self.screen.fill((0, 0, 0), self._score_board)
        util.myprint(self.screen, 'LEVEL',  self._score_level, 'm')
        util.myprint(self.screen, self.level,  self._score_level_v, 'm')
        util.myprint(self.screen, 'LINES',  self._score_killed, 'm')
        util.myprint(self.screen, self.killed,  self._score_killed_v, 'm')
        util.myprint(self.screen, 'SCORE',  self._score_score, 'm')
        util.myprint(self.screen, self.score,  self._score_score_v, 'm')

    def _display_next(self):
        try:
            self._next_board
        except AttributeError:
            self._next_board = (
                    self.START[0] + self.WIDTH + 30,
                    self.START[1],
                    200, 80)
            self._next_board_v = (
                    self.START[0] + self.WIDTH + 30 + 100 - self.TILEW * 2,
                    self.START[1] + 40 - self.TILEW * 2)
        self.screen.fill((0, 0, 0), self._next_board)
        self.screen.blit(self.shape.image_next, self._next_board_v)

    def game_over(self):
        self.stat = "menu"
Exemple #3
0
class Board:
    def __init__(self, window, width=10, height=16, xinit=2, yinit=2, tile_width=15):
        self.tiles = Tiles(tile_width, window)
        self.window = window
        self.height = height
        self.xinit = xinit
        self.yinit = yinit
        self.width = width
        self.total_lines = 0
        self.board = [[0 for j in range(width)] for i in range(height)]
        self.shape = None
        self._draw()
        self.clear()

    def add_shape(self):
        assert not self.shape
        sh, col = random.choice(shape_color)
        self.shape = Shape(sh, self.window, col, self.width/2, 0, self.xinit, self.yinit)
        if self.collides(self.shape):
            raise GameOver()
        self.shape.draw()

    def eat_shape(self):
        self.shape.erase()
        for x,y in self.shape.shape:
            self.board[y+self.shape.y][x+self.shape.x] = 1
        self.shape = None

    def frame(self, pressed_keys):
        if not self.shape:
            return
        shapex = self.shape.x
        shapey = self.shape.y
        shape_shape = deepcopy(self.shape.shape)
        self.shape.update_pos(pressed_keys)
        if self.collides(self.shape):
            self.shape.x = shapex
            self.shape.y = shapey
            self.shape.shape = shape_shape
        else:
            self.shape.draw()

    def collides(self, shape):
        for x,y in shape.shape:
            x += shape.x
            y += shape.y
            if x < 0 or x >= self.width:
                return True
            if y >= self.height or y < 0:
                return True
            if self.board[y][x] == 1:
                return True
        return False

    def collides_bottom(self, shape):
        for x,y in shape.shape:
            x += shape.x
            y += shape.y
            if y+1 >= self.height:
                return True
            if self.board[y+1][x]:
                return True
        return False

    def tick(self):
        self._erase()
        if not self.shape:
            self.add_shape()
        elif not self.collides_bottom(self.shape):
            self.shape.erase()
            self.shape.move_down()
            self.shape.draw()

        elif self.collides_bottom(self.shape):
            self.eat_shape()
            self.check_lines()

        self._draw()

    def check_lines(self):
        for i in range(self.height):
            if self.check_line(self.board[i]):
                self.board.pop(i)
                self.total_lines += 1
                print self.total_lines
                self.board = [[0 for i in range(self.width)]] + self.board

    def check_line(self, line):
        for i in line:
            if not i:
                return False
        return True

    def _draw(self, draw_f=Tiles.square):
        for y in range(self.height):
            for x in range(self.width):
                if self.board[y][x]:
                    draw_f(self.tiles, x+self.xinit, y+self.yinit)

    def _erase(self):
        self._draw(draw_f=Tiles.erase)

    def clear(self):
        for y in range(self.height):
            for x in range(self.width):
                self.tiles.erase(x+self.xinit, y+self.yinit)
Exemple #4
0
class Tetris(object):
    W = 12  # the width of play board
    H = 20  # the height of play board
    TILEW = 20  # the pixel width/height of a tile
    START = (100, 40)  # the playboard lefttop on background
    SPACE = 1000  # shape will fall after xxx ms(level 1)

    def __init__(self, screen):
        self.stat = "game"
        self.WIDTH = self.TILEW * self.W
        self.HEIGHT = self.TILEW * self.H
        self.screen = screen
        self.pause = False
        # the array save current situation
        # same as screen cood
        self.board = []
        for i in xrange(self.H):
            line = [None] * self.W
            self.board.append(line)
        # will display
        self.level = 1
        self.killed = 0
        self.score = 0
        # after this time, shape falls
        self.time = self.SPACE * 0.8**(self.level - 1)
        # save the elapsed time after last fail
        self.elapsed = 0
        # used for judge pressed firstly or for a  long time
        self.pressing = 0
        # the moving shape
        self.shape = Shape(self.START, (self.WIDTH, self.HEIGHT),
                           (self.W, self.H))
        self.shape.set_board(self.board)
        self.board_image = pygame.Surface((self.WIDTH, self.HEIGHT))
        # draw the background once
        self.screen.blit(
            pygame.image.load(util.file_path("background.jpg")).convert(),
            (0, 0))
        self.display_info()

    def update(self, elapse):
        for e in pygame.event.get():
            if e.type == KEYDOWN:
                self.pressing = 1
                self.move(e.key == K_UP, e.key == K_DOWN, e.key == K_LEFT,
                          e.key == K_RIGHT)
                if e.key == K_ESCAPE:
                    self.stat = 'menu'
                elif e.key == K_SPACE:
                    self.pause = not self.pause
            elif e.type == KEYUP and self.pressing:
                self.pressing = 0
            elif e.type == QUIT:
                self.stat = 'quit'
        if self.pause:
            self.draw()
            return self.stat
        if self.pressing:
            pressed = pygame.key.get_pressed()
            self.move(pressed[K_UP], pressed[K_DOWN], pressed[K_LEFT],
                      pressed[K_RIGHT])
        self.elapsed += elapse
        if self.elapsed >= self.time:
            self.next()
            self.elapsed = self.elapsed - self.time
            self.draw()
        return self.stat

    def move(self, u, d, l, r):
        if not (u or d or l or r):
            return
        # pressed for the first time
        # pressed for a long time
        if self.pressing == 1 or self.pressing > 10:
            if u: self.shape.rotate()
            elif d: self.next()  #self.shape.move(0, 1) is bad
            elif l: self.shape.move(-1, 0)
            elif r: self.shape.move(1, 0)
            self.draw()
        self.pressing += 1

    def check_line(self):
        self.add_to_board()
        filled = []
        for i in xrange(self.H - 1, -1, -1):
            line = self.board[i]
            sum = 0
            for t in line:
                sum += 1 if t else 0
            if sum == self.W:
                filled.append(i)
            elif sum == 0:
                break
        if i == 0 and sum != 0:
            self.game_over()
        self.create_board_image()  # used for killing animation
        self.kill_line(filled)
        self.create_board_image()  # used for update

    def kill_line(self, filled=[]):
        if len(filled) == 0:
            return
        # play sound effect
        play_sound(str(len(filled)))
        # play animation
        mask = pygame.Surface((self.WIDTH, self.TILEW), SRCALPHA, 32)
        for i in xrange(5):
            if i % 2 == 0:
                mask.fill((255, 255, 255, 100))
            else:
                mask.fill((255, 255, 255, 200))
            self.screen.blit(self.board_image, self.START)
            for line in filled:
                self.screen.blit(
                    mask, (self.START[0], self.START[1] + line * self.TILEW))
                pygame.display.update()
            pygame.time.wait(80)
        # remove filled lines
        [self.board.pop(l) for l in sorted(filled, reverse=True)]
        # fill with blank lines
        [self.board.insert(0, [None] * self.W) for l in filled]
        self.get_score(len(filled))

    def get_score(self, num):
        self.killed += num
        self.score += num * num * 10 * self.level
        self.level = 1 + self.killed // 10
        self.time = self.SPACE * 0.8**(self.level - 1)

    def add_to_board(self):
        for x in xrange(self.shape.SHAPEW):
            for y in xrange(self.shape.SHAPEH):
                if self.shape.shape[y][x]:
                    self.board[self.shape.y + y][self.shape.x + x] = Tile(
                        self.shape.color)

    def create_board_image(self):
        self.board_image.fill((0, 0, 0))
        for x in xrange(self.H):
            for y in xrange(self.W):
                if self.board[x][y]:
                    rect = pygame.Rect(y * self.TILEW, x * self.TILEW,
                                       self.TILEW, self.TILEW)
                    self.board_image.fill(self.board[x][y].color, rect)
                    pygame.draw.rect(self.board_image, (200, 200, 200, 100),
                                     rect, 1)

    def next(self):
        if self.shape.at_bottom():
            play_sound('drop')
            self.check_line()
            self.shape.new()
            self.display_info()
        else:
            self.shape.move(0, 1)

    def draw(self):
        self.screen.blit(self.board_image, self.START)
        self.shape.draw(self.screen)
        if self.pause:
            util.myprint(self.screen, "PAUSE",
                         (self.START[0] + 50, self.START[1] + 200), "m")

    def display_info(self):
        self._display_next()
        self._display_score()

    def _display_score(self):
        try:
            self._score_board
        except AttributeError:
            self._score_board = (self.START[0] + self.WIDTH + 30,
                                 self.START[1] + 100, 200, 260)
            self._score_level = (self._score_board[0] + 10,
                                 self._score_board[1] + 10)
            self._score_level_v = (self._score_board[0] + 30,
                                   self._score_board[1] + 50)
            self._score_killed = (self._score_board[0] + 10,
                                  self._score_board[1] + 90)
            self._score_killed_v = (self._score_board[0] + 30,
                                    self._score_board[1] + 130)
            self._score_score = (self._score_board[0] + 10,
                                 self._score_board[1] + 170)
            self._score_score_v = (self._score_board[0] + 30,
                                   self._score_board[1] + 210)
        self.screen.fill((0, 0, 0), self._score_board)
        util.myprint(self.screen, 'LEVEL', self._score_level, 'm')
        util.myprint(self.screen, self.level, self._score_level_v, 'm')
        util.myprint(self.screen, 'LINES', self._score_killed, 'm')
        util.myprint(self.screen, self.killed, self._score_killed_v, 'm')
        util.myprint(self.screen, 'SCORE', self._score_score, 'm')
        util.myprint(self.screen, self.score, self._score_score_v, 'm')

    def _display_next(self):
        try:
            self._next_board
        except AttributeError:
            self._next_board = (self.START[0] + self.WIDTH + 30, self.START[1],
                                200, 80)
            self._next_board_v = (self.START[0] + self.WIDTH + 30 + 100 -
                                  self.TILEW * 2,
                                  self.START[1] + 40 - self.TILEW * 2)
        self.screen.fill((0, 0, 0), self._next_board)
        self.screen.blit(self.shape.image_next, self._next_board_v)

    def game_over(self):
        self.stat = "menu"
Exemple #5
0
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()
    b.moveDown()

s1 = Shape(spawnShape())
'''
print 'before rotate:'
s1.draw(None)

s1.rotate()
print 'after 1st rotate:'
s1.draw(None)

s1.rotate()
print 'after 2nd rotate:'
s1.draw(None)

s1.rotate()
print 'after 3th rotate:'
s1.draw(None)
    def draw_game_page(self, window):

        case_size = (self.BOARD_SIZE - self.BOARD_PADDING * 2) / 15

        interface_width = self.interface.GAME_WINDOW_WIDTH
        interface_height = self.interface.GAME_WINDOW_HEIGHT

        background_rect = (0, 0, interface_width, interface_height)
        pygame.draw.rect(window, (46, 40, 42), background_rect)

        #DRAW BOARD

        board_x = interface_width / 2 - self.BOARD_SIZE / 2
        board_y = 21

        window.blit(self.scrabble_board, (board_x, board_y))

        game_board = self.game.get_game_board()

        for case_x in range(15):
            for case_y in range(15):

                letter_index = game_board[case_x][case_y]
                if (letter_index != -1):
                    img_letter = self.l_img_letter[letter_index]

                    img_letter_size = int(case_size)
                    img_letter = pygame.transform.scale(
                        img_letter, (img_letter_size, img_letter_size))

                    img_letter_x = board_x + self.BOARD_PADDING + case_x * case_size + 1
                    img_letter_y = board_y + self.BOARD_PADDING + case_y * case_size + 2

                    window.blit(img_letter, (img_letter_x, img_letter_y))

        #DRAW EASEL

        del self.l_easel_case_rectangle[:]

        easel_width = self.BOARD_SIZE / 1.3
        easel_height = easel_width / 7

        letter_case_size = int(easel_width / 7)

        font = pygame.font.SysFont("", size=20)
        for i in range(7):
            x = interface_width / 2 - easel_width / 2 + (
                i * letter_case_size) + (i / 1.88) * 2
            y = 585

            letter_case_rect = (x, y, letter_case_size, letter_case_size)

            letter_case_rectangle = Shape()
            letter_case_rectangle.new_rectangle(window, (255, 255, 255),
                                                letter_case_rect, 2)
            letter_case_rectangle.draw()

            self.l_easel_case_rectangle.append(letter_case_rectangle)
            #Pour avoir rapidement la dimension et la position de chaque case du chevalet au moment de gérer les évênements

            image_index_letter = font.render(str(i + 1), True, (255, 255, 255))

            img_index_letter_size = font.size(str(i + 1))
            img_x = x + letter_case_size / 2 - img_index_letter_size[0] / 2
            img_y = y + letter_case_size / 2 - img_index_letter_size[1] / 2

            window.blit(image_index_letter, (img_x, img_y))

            #On affiche les lettres dans les cases
            player_turn = self.game.get_player_turn()
            if (player_turn != None):
                player_easel = player_turn.get_easel()
                letter_index = player_easel.get_l_letter()[i]

                if (letter_index != -1):
                    img_letter = self.l_img_letter[letter_index]
                    img_letter = pygame.transform.scale(
                        img_letter,
                        (letter_case_size - 2, letter_case_size - 2))

                    pygame.draw.rect(window, (0, 0, 0), letter_case_rect, 3)

                    #On réduit légèrement la taille des lettres pour qu'elles rentrent dans les cases sans effacer les contours
                    letter_case_rect = (x + 1, y + 1, letter_case_size - 2,
                                        letter_case_size - 2)
                    window.blit(img_letter, letter_case_rect)

            #Si il y a des lettres qui ont été désigné pour être échangé alors on marque ces lettres avec un signe
            l_easel_case_to_renew = self.game.get_l_easel_case_to_renew()
            if (i in l_easel_case_to_renew):

                img_loop_size = int(case_size / 1.8)
                img_loop = pygame.transform.scale(
                    self.img_loop, (img_loop_size, img_loop_size))

                img_loop_x = letter_case_rect[0] + letter_case_rect[
                    3] - img_loop_size - 4
                img_loop_y = letter_case_rect[1] + 3

                window.blit(img_loop, (img_loop_x, img_loop_y))

        #DRAW SCORE

        font = pygame.font.SysFont("", size=30)
        img_text_score = font.render("Score", True, (255, 255, 255))

        window.blit(img_text_score, (865, 150))

        font = pygame.font.SysFont("", size=25)

        l_player = self.game.get_l_player()
        y = 178
        for player in l_player:
            player_name = player.get_name()
            player_score = player.get_score()

            txt_score_player = player_name + ": " + str(
                player_score) + " points"
            img_text_score_player = font.render(txt_score_player, True,
                                                (255, 255, 255))

            window.blit(img_text_score_player, (865, y))
            y += 25

        #DRAW BUTTONS

        for button in self.l_button_to_draw_by_page[self.page]:
            button.draw(window)

        #DRAW GRID MARKS

        img_y = 5
        x_min = interface_width / 2 - (
            self.BOARD_SIZE) / 2 + self.BOARD_PADDING + case_size / 2
        for x_i in range(0, 15):
            letter = chr(65 + x_i)

            font = pygame.font.SysFont("", size=20)
            img_grid_mark = font.render(letter, True, (255, 255, 255))

            image_size = font.size(letter)
            img_x = x_min + x_i * case_size - image_size[0] / 2

            window.blit(img_grid_mark, (img_x, img_y))

        img_x = x_min - case_size / 2 - 26
        y_min = board_y + self.BOARD_PADDING + case_size / 2
        for y_i in range(0, 15):
            number = str(y_i + 1)

            font = pygame.font.SysFont("", size=20)
            img_grid_mark = font.render(number, True, (255, 255, 255))

            image_size = font.size(number)
            img_y = y_min + y_i * case_size - image_size[1] / 2

            window.blit(img_grid_mark, (img_x, img_y))

        #DRAW TIME

        font = pygame.font.SysFont("", size=25)

        played_time = self.game.get_played_time()
        text_time_played = get_played_time_formatted(played_time)

        img_text_time_played = font.render(text_time_played, True,
                                           (255, 255, 255))
        window.blit(img_text_time_played, (10, 10))

        #DRAW MENU

        font = pygame.font.SysFont("", size=26)
        img_text_menu = font.render("Menu de jeu", True, (255, 255, 255))

        img_text_menu_size = img_text_menu.get_size()
        img_text_menu_x = 127 - img_text_menu_size[0] / 2
        img_text_menu_y = 258 - img_text_menu_size[1] / 2

        window.blit(img_text_menu, (img_text_menu_x, img_text_menu_y))

        line_start_pos = (127 - img_text_menu_size[0] / 2, 279)
        line_end_pos = (127 + img_text_menu_size[0] / 2, 279)
        pygame.draw.line(window, (255, 255, 255), line_start_pos, line_end_pos)

        line_start_pos = (127 - img_text_menu_size[0] / 2, 355)
        line_end_pos = (127 + img_text_menu_size[0] / 2, 355)
        pygame.draw.line(window, (255, 255, 255), line_start_pos, line_end_pos)

        menu_outline_rect = (15, 223, 222, 186)
        pygame.draw.rect(window, (255, 255, 255), menu_outline_rect, 2)

        #DRAW MOVING LETTER

        if (self.letter_moving_index != -1):
            img_letter_moving = self.l_img_letter[self.letter_moving_index]
            img_letter_moving_size = int(case_size)

            img_letter_moving = pygame.transform.scale(
                img_letter_moving,
                (img_letter_moving_size, img_letter_moving_size))

            mouse_pos = pygame.mouse.get_pos()
            img_letter_moving_x = mouse_pos[0] - img_letter_moving_size / 2
            img_letter_moving_y = mouse_pos[1] - img_letter_moving_size / 2

            window.blit(img_letter_moving,
                        (img_letter_moving_x, img_letter_moving_y))

        #DRAW JOKER CHOICE

        if (self.joker_choice_mode):

            space_between_letter = 18
            img_letter_size = 35

            background_width = img_letter_size * 10 + space_between_letter * 8 + 60
            background_x = interface_width / 2 - background_width / 2

            pygame.draw.rect(window, (255, 255, 255),
                             (background_x, 160, background_width, 300))
            pygame.draw.rect(window, (0, 0, 0),
                             (background_x, 160, background_width, 300), 3)

            font = pygame.font.SysFont("", size=40)
            img_text_choice_joker = font.render("*** Choix du joker ***", True,
                                                (0, 0, 0))

            img_text_choice_joker_size = img_text_choice_joker.get_size()
            img_text_choice_joker_x = interface_width / 2 - img_text_choice_joker_size[
                0] / 2

            window.blit(img_text_choice_joker, (img_text_choice_joker_x, 200))

            self.l_joker_letter_choice_rect.clear()

            y_min = 250
            for y_i in range(3):

                if (y_i < 2):
                    line_width = img_letter_size * 10 + space_between_letter * 9
                else:
                    line_width = img_letter_size * 7 + space_between_letter * 6

                img_letter_y = y_min + y_i * 60
                x_min = interface_width / 2 - line_width / 2
                for x_i in range(10):

                    img_index = y_i * 10 + x_i
                    if (img_index == 26):
                        break

                    img_letter = self.l_img_letter[img_index]
                    img_letter = pygame.transform.scale(
                        img_letter, (img_letter_size, img_letter_size))

                    img_letter_x = x_min + x_i * (space_between_letter +
                                                  img_letter_size)
                    if (y_i == 2):
                        img_letter_x += img_letter_size

                    letter_frame_rect = (img_letter_x - 2, img_letter_y - 2,
                                         img_letter_size + 4,
                                         img_letter_size + 4)

                    letter_frame_srect = Shape()
                    letter_frame_srect.new_rectangle(window, (0, 0, 0),
                                                     letter_frame_rect, 2)

                    letter_frame_srect.draw()

                    self.l_joker_letter_choice_rect.append(letter_frame_srect)

                    window.blit(img_letter, (img_letter_x, img_letter_y))

        #DRAW PART PLAYER TURN

        player_turn = self.game.get_player_turn()
        if (player_turn != None):
            font = pygame.font.SysFont("", size=25)

            txt_player_turn = "C'est à " + player_turn.get_name(
            ) + " de jouer !"
            img_txt_player_turn = font.render(txt_player_turn, True,
                                              (255, 255, 255))

            image_size = img_txt_player_turn.get_size()
            window.blit(img_txt_player_turn, (970 - image_size[0] / 2, 600))

        for message in self.l_message:
            message.draw(window)

        #Pour le debug
        '''for x in range(0, 15):
Exemple #7
0
                    if i == 6: shape.color = Colors["WHITE"]  # BUTTON 7: White
                    if i == 7: shape.color = Colors["GRAY"]  # BUTTON 8: White
                    if i == 8: shape.color = Colors["BLACK"]  # BUTTON 9: White
                    if i == 9: shape.color = Colors["RED"]  # BUTTON 10: White
                    if i == 10:
                        shape.color = Colors["ORANGE"]  # BUTTON 11: White
                    if i == 11:
                        shape.color = Colors["YELLOW"]  # BUTTON 12: White
                    if i == 12:
                        shape.color = Colors["GREEN"]  # BUTTON 12: White
                    if i == 13:
                        shape.color = Colors["BLUE"]  # BUTTON 12: White
                    if i == 14:
                        shape.color = Colors["PURPLE"]  # BUTTON 12: White

                    # CLEAR SCREEN
                    if i == 15: window.fill(Colors["BLACK"])

        # CONTINUOUS EVENT. (Other than 'if event.type == pygame.MOUSEBUTTONDOWN:')
        if pygame.mouse.get_pressed()[0]:

            # Draw shape
            shape.draw()

    # DRAW OBJECTS: 'i' is synced up with ALL button images, as all have a unique image to display.
    for i in range(len(button)):
        button[i].draw(i)

    # UPDATE
    pygame.display.update()