def __init__(self, tilePosition): self.surface = pygame.image.load("./hextile.png").convert() self.surface.set_colorkey(ConfigReader.getColourForId('TRANSPARENT_COLOR_KEY'), RLEACCEL) self.boundingBox = self.surface.get_rect() self.boundingBox.center = HexCoordSys.hexToPixel(tilePosition, TILE_EDGE_LENGTH, CENTER) self.views = [] self.addView(TextView("%d,%d" % (tilePosition.row, tilePosition.col))) self.tilePosition = tilePosition
def __init__(self): self.screenView = ScreenView() self.controllers = list() self.running = True self.mouseDragButton = None self.lastTileOverPosition = HexCoordSys.getTilePosition(0, 0) self.session = ClientSession() self.controllers.append(TileController("Tile", self.session)) self.controllers.append(PieceController("Piece", self.session, self.controllers["Tile"].tilePositionModel)) self.mainLoop()
def __init__(self, tilePositions, colour): self.colour = colour for tilePosition in tilePositions: center = HexCoordSys.hexToPixel(tilePosition, TILE_EDGE_LENGTH, CENTER) self.vertices = list() for i in range(0,6): angle = (2 * math.pi / 6) * (i + 0.5) x_i = center.x + TILE_EDGE_LENGTH * math.cos(angle) y_i = center.y + TILE_EDGE_LENGTH * math.sin(angle) self.vertices.append((x_i, y_i))
def processAnyNewData(self): # Not sure if python supports non-blocking queue iteration, so do this as a while event = self.incomingEventQueue.get(block=False) while event is not None: data = event.get("data") id = event["id"] # TODO handle multiple moves if event["type"] == "Remove" or event["type"] == "Move": data = self.remove(id) if event["type"] == "Add" or event["type"] == "Move": tilePosition = HexCoordSys.getTilePosition(int(event["tilePosition"][0]), int(event["tilePosition"][1])) self.add(id, tilePosition, data) event = self.incomingEventQueue.get(block=False)
def selectEvent(self, tilePosition): self.clearSelectEvent() if self.piecesModel.isPieceAt(tilePosition): logging.debug("Select event for %s", tilePosition) pieceData = self.piecesModel.getDataForPiecesAt(tilePosition)[0] self.moveSelectionsModel = self.selectionController.setSelectedTile( tilePosition, colour=ConfigReader.getColourForId("SelectedTile") ) self.selectionController.setInfoTiles( self.tilePositionModel.positionsOnBoardIn(HexCoordSys.getTilesWithin(pieceData.moves, tilePosition)), self.moveSelectionsModel, ConfigReader.getColourForId("Info1Tile"), type(OverlayView((), ())), ) self.pathSelectionModel = self.selectionController.setSelectedTile(tilePosition)
def trialMoveSelectedEvent(self, tilePosition): # If a tile has been selected for the start of the path, and the specified path tile is on the board if ( self.pathSelectionModel is not None and self.tilePositionModel.contains(tilePosition) and not self.pathSelectionModel.doesExtendedSelectionContain(tilePosition) ): logging.debug("Trial move to %s", tilePosition) pieceData = self.piecesModel.getDataForPiecesAt(self.pathSelectionModel.getPrimarySelection())[0] self.selectionController.setInfoTiles( self.tilePositionModel.positionsOnBoardIn( HexCoordSys.getShortestTilePathBetween(self.pathSelectionModel.getPrimarySelection(), tilePosition) ), self.pathSelectionModel, pieceData.movingColour, type(PieceView((), ())), )
def __init__(self, edgeLength): self.radius = edgeLength - 1 self.diameter = 2 * self.radius self.numTilesHigh = self.diameter + 1 self.numTilesWide = self.diameter + 1 print "Creating board", self.numTilesWide, "tiles wide and", self.numTilesHigh, "tiles high" # Initialise the tiles with their position in the axial coordinate system used to define locations on the board self.tilePositions = HexCoordSys.getPositionsDefinedByHexWithEdge(edgeLength) self.numTiles = len(self.tilePositions) print "Created a board containing", self.numTiles, "tiles" self.borders = defaultdict(list) for tilePosition in self.tilePositions: for key in HexCoordSys.borders.keys(): if HexCoordSys.borders[key](tilePosition, self.tilePositions): self.borders[key].append(tilePosition) self.center = TilePosition(row=0, col=0) self.spokes = defaultdict(list) for key in HexCoordSys.edgeDirections.keys(): curTile = self.center while self.isOnBoard(curTile): self.spokes[key].append(curTile) curTile = HexCoordSys.edgeDirections[key](curTile)
def setPosition(self, screenX, screenY): """ Translates position into position at top left of nearest tile. Does not work if position is already at top left """ self.tilePosUnderCursor = HexCoordSys.pixelToHex(HexCoordSys.ScreenCoordinate(screenX, screenY), TILE_EDGE_LENGTH, CENTER) self.boundingBox.center = HexCoordSys.hexToPixel(self.tilePosUnderCursor, TILE_EDGE_LENGTH, CENTER)
def __init__(self, colour, tilePositions): self.positions = set() for tilePosition in tilePositions: self.positions.add(HexCoordSys.hexToPixel(tilePosition, TILE_EDGE_LENGTH, CENTER)) self.colour = colour self.radius = int(TILE_EDGE_LENGTH / 2.0)