Python Forum
Help with tic tac toe game.
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help with tic tac toe game.
#3
Created an example how you could improve some code.
import pygame
import random


class TicTacToe:
    def __init__(self, game):
        self.game = game
        #self.background = pygame.image.load("background.png")
        self.background = pygame.Surface(game.rect.size)
        self.background.fill(pygame.Color('Black'))

        #self.images = {
        #   'x':pygame.image.load("player_x.png").convert_alpha(),
        #   'y':pygame.image.load("player_o.png").convert_alpha() }
        font = pygame.font.Font(None, 72)
        self.images = {
            'x': font.render('X', 1, pygame.Color('Blue')),
            'o': font.render('O', 1, pygame.Color('Green')) }

        self.turn = random.choice(['x', 'o'])
        self.build_rects()
        self.new_game()

    def new_game(self):
        self.board = [None for x in range(9)]


    def build_rects(self):
        self.rects = []
        center = self.game.rect.center
        rect = self.images['x'].get_rect()
        width = rect.width * 2
        height = rect.height * 2
        x_pos = center[0] - rect.width * 3
        y_pos = center[1] - rect.height * 3
        x_end = x_pos + width * 3
        y_end = y_pos + height * 3

        for x in range(x_pos, x_end, width):
            for y in range(y_pos, y_end, height):
                self.rects.append(pygame.Rect(x, y, width, height))

    def draw(self, surface):
        surface.blit(self.background, (0, 0))
        for rect in self.rects:
            pygame.draw.rect(surface, (255, 255, 255), rect, 1)

        for enum, play in enumerate(self.board):
            if play:
                rect = self.images[play].get_rect()
                rect.center = self.rects[enum].center
                surface.blit(self.images[play], rect)

    def event(self, event):
        if event.type == pygame.QUIT:
            self.game.running = False

        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                for enum, rect in enumerate(self.rects):
                    if rect.collidepoint(event.pos):
                        if self.board[enum] is None:
                            self.board[enum] = self.turn
                            if self.turn == 'x':
                                self.turn = 'o'
                            else:
                                self.turn = 'x'

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                self.new_game()


class Game:
    def __init__(self, caption, width, height):
        pygame.display.set_caption(caption)
        self.rect = pygame.Rect(0, 0, width, height)
        self.surface = pygame.display.set_mode(self.rect.size)
        self.clock = pygame.time.Clock()
        self.running = True
        self.scene = None

    def mainloop(self):
        while self.running:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.running = False
                else:
                    self.scene.event(event)

            #self.scene.update(pygame.time.get_ticks())
            self.scene.draw(self.surface)

            pygame.display.flip()
            self.clock.tick(30)


if __name__ == "__main__":
    pygame.init()
    game = Game("Tic Tac Toe", 800, 600)
    game.scene = TicTacToe(game)
    game.mainloop()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
Help with tic tac toe game. - by ghost0fkarma - Apr-09-2019, 02:42 PM
RE: Help with tic tac toe game. - by nilamo - Apr-09-2019, 06:09 PM
RE: Help with tic tac toe game. - by Windspar - Apr-09-2019, 09:38 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020