Exemple #1
0
 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
Exemple #2
0
 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()
Exemple #3
0
 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)
Exemple #5
0
 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)
Exemple #6
0
 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((), ())),
         )
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
 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)