from GameMap import * from Player import * from Timer import * class GameLogic(): def __init__(self, gameMap, playerList, winRowLength=3, individualMoves=1): self.gameMap = gameMap self.playerList = playerList self.winRowLength = winRowLength self.individualMoves = individualMoves self.score = 0 self.wait_for_input() def wait_for_input(self): pass def check_who_win(self): # Should have used vectors instead of committing tuples mithosis, # but whatever, it works anyway, and if it works, why code more # for nothing? for player in self.playerList: markList = player.get_markList() # since every mark is checked, there's no need to go into # opposite directions, so, there is (0,1) but no (0, -1). # This twice decreases the amount of computation needed. # maybe TODO - Optimize even more by preventing repeated calculations. directions = ((0, 1), (1, 0), (1,1), (-1, 1)) for mark in markList: for direction in directions: if self._is_line(markList, mark, direction): return player return False def _is_line(self, markList, mark, direction): for i in range(1, self.winRowLength): seeked = (mark[0] + direction[0] * i, mark[1] + direction[1] * i) if seeked in markList: continue else: return False return True