Apr-09-2019, 09:38 PM
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.