Help with tic tac toe game. - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Game Development (https://python-forum.io/forum-11.html) +--- Thread: Help with tic tac toe game. (/thread-17393.html) |
Help with tic tac toe game. - ghost0fkarma - Apr-09-2019 import pygame, random class Player: def __init__(self): self.speed = 5 self.tick = 0 self.interval = 30 self.rect = pygame.rect.Rect((50, 50, 70, 70)) self.x_image = pygame.image.load("player_x.png").convert_alpha() self.o_image = pygame.image.load("player_y.png").convert_alpha() self.one_pos = (85, 205) self.two_pos = (410, 205) self.three_pos = (750, 205) self.four_pos = (80, 430) self.five_pos = (410, 430) self.six_pos = (755, 430) self.seven_pos = (80, 650) self.eight_pos = (425, 650) self.nine_pos = (750, 650) class Scene: def __init__(self, game): self.game = game self.background = pygame.image.load("background.png") self.player = Player() def draw(self, surface): surface.blit(self.background, (0, 0)) pygame.draw.rect(surface, (0, 0, 255), self.player.rect) def event(self, event): pass def update(self, ticks): if ticks > self.player.tick: self.player.tick += self.player.interval keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: self.player.rect.move_ip(-5, 0) print(self.player.rect) elif keys[pygame.K_RIGHT]: self.player.rect.move_ip(5, 0) print(self.player.rect) elif keys[pygame.K_UP]: self.player.rect.move_ip(0, -5) print(self.player.rect) elif keys[pygame.K_DOWN]: self.player.rect.move_ip(0, 5) print(self.player.rect) 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 = Scene(self) 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", 900, 900) game.mainloop()I'm having trouble setting up the turn system (x goes then o). Any help or tips are appreciated :). RE: Help with tic tac toe game. - nilamo - Apr-09-2019 The scene should maybe have a list of players, instead of just one, along with an index for which player's turn it currently is. And once a player's turn is complete, you move onto the next with something like self.current_player = (self.current_player + 1) % len(self.players)
RE: Help with tic tac toe game. - Windspar - Apr-09-2019 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() |