コード例 #1
0
    def __init__(self, parent):
        """

        :param parent: an instance of type QMainWindow

        """
        super(NewGameDialog, self).__init__()
        self.ui = Ui_NewGameDialog()
        self.ui.setupUi(self)

        self.setFixedSize(self.size())
        self.setWindowFlags(
            self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint
        )
        self.setModal(True)

        Helpers.center_dialog(self, parent)
        self._parent = parent
        self._grid_sizes = list()
        self._player_types = dict()
        self._set_combo_box_values()
コード例 #2
0
class NewGameDialog(QDialog):

    """A dialog used to start a new game.

    """
    def __init__(self, parent):
        """

        :param parent: an instance of type QMainWindow

        """
        super(NewGameDialog, self).__init__()
        self.ui = Ui_NewGameDialog()
        self.ui.setupUi(self)

        self.setFixedSize(self.size())
        self.setWindowFlags(
            self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint
        )
        self.setModal(True)

        Helpers.center_dialog(self, parent)
        self._parent = parent
        self._grid_sizes = list()
        self._player_types = dict()
        self._set_combo_box_values()

    def _set_combo_box_values(self):
        self._grid_sizes = [
            GridSize.small,
            GridSize.medium,
            GridSize.large
        ]

        # fill the grid size combo box
        for grid_size in self._grid_sizes:
            grid_size_numerical = grid_size.value
            grid_size_textual = \
                EnumConverters.grid_size_to_string_converter(grid_size)
            grid_size_caption = "{0} ({1}x{1})".format(grid_size_textual,
                                                       grid_size_numerical)
            self.ui.comboBoxGridSize.addItem(grid_size_caption,
                                             QVariant(grid_size))

        self._player_types[PlayerType.human] = Human.default()
        self._player_types[PlayerType.cpu] = CPU.default()

        player_one_textual = EnumConverters.player_type_to_string_converter(
            PlayerType.human
        )
        player_two_textual = EnumConverters.player_type_to_string_converter(
            PlayerType.cpu
        )

        # fill the player combo boxes
        self.ui.comboBoxPlayerOne.addItem(
            player_one_textual,
            QVariant(self._player_types[PlayerType.human]))
        self.ui.comboBoxPlayerTwo.addItem(
            player_two_textual,
            QVariant(self._player_types[PlayerType.cpu]))

    @pyqtSlot(name="pushButtonStartClick")
    def pushButtonStartClick(self):
        """Slot used when the "Start" button is clicked.

        """
        # exctract selected values
        selected_grid_size = self.ui.comboBoxGridSize.itemData(
            self.ui.comboBoxGridSize.currentIndex()
        )
        selected_player_one = self.ui.comboBoxPlayerOne.itemData(
            self.ui.comboBoxPlayerOne.currentIndex())
        selected_player_two = self.ui.comboBoxPlayerTwo.itemData(
            self.ui.comboBoxPlayerTwo.currentIndex())

        # initialize grids and fleets
        selected_player_one.grid = Grid(GridPosition.left, selected_grid_size)
        selected_player_two.grid = Grid(GridPosition.right, selected_grid_size)

        fleet_size_multiplier = \
            EnumConverters.grid_size_to_fleet_size_multiplier_converter(
                selected_grid_size
            )
        selected_player_one.fleet = Fleet(fleet_size_multiplier)
        selected_player_two.fleet = Fleet(fleet_size_multiplier)

        # create a new session
        new_session = Session(SessionType.offline,
                              selected_player_one,
                              selected_player_two)

        # fill the main window's data
        self._parent.session = new_session
        self._parent.grid_size = selected_grid_size
        self._parent.is_new_game = True
        self._parent.current_orientation = ShipOrientation.horizontal
        self._parent.current_ship_index = 0

        player_one_label_text = self._parent.ui.playerOneLabel.text()
        player_one_text = self.ui.comboBoxPlayerOne.currentText()
        player_two_label_text = self._parent.ui.playerTwoLabel.text()
        player_two_text = self.ui.comboBoxPlayerTwo.currentText()

        if not self._parent.has_game_been_started:
            # append players' textual representations
            player_one_label_text += " - " + player_one_text
            self._parent.ui.playerOneLabel.setText(player_one_label_text)
            player_two_label_text += " - " + player_two_text
            self._parent.ui.playerTwoLabel.setText(player_two_label_text)

        self._parent.initialize_grids()

        self.close()

    @pyqtSlot(name="pushButtonCancelClick")
    def pushButtonCancelClick(self):
        """Slot used when the "Cancel" button is clicked.

        """
        self.close()