示例#1
0
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("Server's list")
        self.setFixedSize(440, 250)
        self.filled_rows = 0
        self.game_client = GameClient(self)

        self.tablewidget = QtGui.QTableWidget(1, 4, self)
        self.tablewidget.setFixedSize(440, 250)
        self.tablewidget.setSelectionBehavior(
            QtGui.QAbstractItemView.SelectRows)

        HeaderIp = QtGui.QTableWidgetItem("IP")
        HeaderRow = QtGui.QTableWidgetItem("Row")
        HeaderCol = QtGui.QTableWidgetItem("Col")
        HeaderConnect = QtGui.QTableWidgetItem("Win line")

        self.tablewidget.setHorizontalHeaderItem(0, HeaderIp)
        self.tablewidget.setHorizontalHeaderItem(1, HeaderRow)
        self.tablewidget.setHorizontalHeaderItem(2, HeaderCol)
        self.tablewidget.setHorizontalHeaderItem(3, HeaderConnect)

        cell_clicked = self.tablewidget.cellDoubleClicked
        cell_clicked.connect(self.server_choosed)

        self.game_client.writeMsg(["FindGame"])
示例#2
0
    def __init__(self, rows, cols, win_lane, parent=None, sock=None, create=True, IP=""):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("The Network Game")
        self.buttons = []
        self.char = ""
        self.game_client = None
        if sock == None:
            self.game_client = GameClient(self)
        else:
            self.game_client = sock
            self.game_client.dialog = self

        self.game_desk = GameDesk(rows, cols, win_lane)

        self.grid = QtGui.QGridLayout()
        self.grid.setSpacing(0)

        for row in range(0, rows):
            for col in range(0, cols):
                button = GameButton(row, col)
                button.setEnabled(False)
                button.clicked.connect(self.gameButtonClicked)
                self.buttons.append(button)
                self.grid.addWidget(button, row, col)

        self.setLayout(self.grid)

        if create:
            msg = ["CreateGame", str(rows), str(cols), str(win_lane)]
            self.game_client.writeMsg(msg)
        else:
            msg = ["ConnectToGame", IP]
            self.game_client.writeMsg(msg)
示例#3
0
class MyTable(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("Server's list")
        self.setFixedSize(440, 250)
        self.filled_rows = 0
        self.game_client = GameClient(self)

        self.tablewidget = QtGui.QTableWidget(1, 4, self)
        self.tablewidget.setFixedSize(440, 250)
        self.tablewidget.setSelectionBehavior(
            QtGui.QAbstractItemView.SelectRows)

        HeaderIp = QtGui.QTableWidgetItem("IP")
        HeaderRow = QtGui.QTableWidgetItem("Row")
        HeaderCol = QtGui.QTableWidgetItem("Col")
        HeaderConnect = QtGui.QTableWidgetItem("Win line")

        self.tablewidget.setHorizontalHeaderItem(0, HeaderIp)
        self.tablewidget.setHorizontalHeaderItem(1, HeaderRow)
        self.tablewidget.setHorizontalHeaderItem(2, HeaderCol)
        self.tablewidget.setHorizontalHeaderItem(3, HeaderConnect)

        cell_clicked = self.tablewidget.cellDoubleClicked
        cell_clicked.connect(self.server_choosed)

        self.game_client.writeMsg(["FindGame"])

    def fillTable(self, msg):
        print msg
        for game in msg:
            parse_game = game.split('|')

            ip = QtGui.QTableWidgetItem(parse_game[0])
            row = QtGui.QTableWidgetItem(parse_game[1])
            col = QtGui.QTableWidgetItem(parse_game[2])
            win_line = QtGui.QTableWidgetItem(parse_game[3])

            self.tablewidget.setItem(self.filled_rows, 0, ip)
            self.tablewidget.setItem(self.filled_rows, 1, row)
            self.tablewidget.setItem(self.filled_rows, 2, col)
            self.tablewidget.setItem(self.filled_rows, 3, win_line)

            self.filled_rows += 1
            self.tablewidget.setRowCount(self.tablewidget.rowCount() + 1)

    def server_choosed(self, row, col):
        ip = self.tablewidget.item(row, 0).text()
        game_row = int(self.tablewidget.item(row, 1).text())
        game_col = int(self.tablewidget.item(row, 2).text())
        win_lane = int(self.tablewidget.item(row, 3).text())

        ngd = NetGameDialog(game_row, game_col, win_lane, self,
                            self.game_client, False, ip)

        self.setHidden(True)
        ngd.exec_()
        self.close()
示例#4
0
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("Server's list")
        self.setFixedSize(440,250)
        self.filled_rows = 0
        self.game_client = GameClient(self)

        self.tablewidget=QtGui.QTableWidget(1,4,self)
        self.tablewidget.setFixedSize(440,250)
        self.tablewidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)

        HeaderIp=QtGui.QTableWidgetItem("IP")
        HeaderRow=QtGui.QTableWidgetItem("Row")
        HeaderCol=QtGui.QTableWidgetItem("Col")
        HeaderConnect=QtGui.QTableWidgetItem("Win line")

        self.tablewidget.setHorizontalHeaderItem(0,HeaderIp)
        self.tablewidget.setHorizontalHeaderItem(1,HeaderRow)
        self.tablewidget.setHorizontalHeaderItem(2,HeaderCol)
        self.tablewidget.setHorizontalHeaderItem(3,HeaderConnect)

        cell_clicked = self.tablewidget.cellDoubleClicked
        cell_clicked.connect(self.server_choosed)

        self.game_client.writeMsg(["FindGame"])
示例#5
0
 def __init__(self):
     mapFile = 'images/world.tif'
     #self.view = WorldView(controller=self, mapFile=mapFile, mapSize=self.mapSize)
     self.view = WorldView(controller=self)
     self.map = Map(mapFile, screenSize=self.view.screenSize)
     self.view.map = self.map
     self.landmark = None
     self.landmarks = None
     self.score = 0
     self.maximumDistance = 1000
     self.timer = None
     self.worstGuess = None
     self.client = GameClient()
     self.deferred = defer.Deferred()
     self.setRounds()
     self.crops = {'world':(-180.0, 90.0, 180.0, -90.0),
                   'us':(-125, 52, -65, 22),
                   'europe':(-25, 72, 51, 34)
               }
示例#6
0
class ScriptManager(Singleton):
    def __init__(self):
        self.game_client = None

    def initialize(self, core_manager):
        logger.info("ScriptManager::initialize")

        self.game_client = GameClient()
        self.game_client.initialize(core_manager)

    def exit(self):
        if self.game_client is not None:
            self.game_client.exit()
        self.game_client = None

    def update(self, delta):
        self.game_client.update(delta)
示例#7
0
    def initialize(self, core_manager):
        logger.info("ScriptManager::initialize")

        self.game_client = GameClient()
        self.game_client.initialize(core_manager)
    def __init__(self):
        self.yourturn = False
        self.player = Player.WHITE
        self.pending_drawings = None

        self.widgets = None
        self.window = None
        self.drawingarea = None
        self.toolbuttonShowHint = None

        self.background = None
        self.white = None
        self.black = None
        self.hint = None
        self.scaledbackground = None
        self.scaledwhite = None
        self.scaledblack = None
        self.scaledhint = None

        self.width = None
        self.height = None
        self.size = None
        self.ratio = None
        self.cellsize = None
        self.shift_x = None
        self.shift_y = None
        self.shift_border = None

        self.selection_row = None
        self.selection_column = None
        self.selection_valid = False

        self.request = GameClient()
        self.request.indication = self
        # Load widgets from Glade file
        self.widgets = gtk.glade.XML("interface.glade")

        # Shorcuts for exhaustive use of widgets
        self.window = self.widgets.get_widget("windowMain")
        self.drawingarea = self.widgets.get_widget("drawingarea")
        self.toolbuttonShowHint = self.widgets.get_widget("toolbuttonShowHint")

        # Show main window
        # self.window.maximize()
        self.window.show()

        # Initialize
        self.pending_drawings = list()
        self.drawingarea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(0, 0, 0))
        self.load_resources()
        self.resize_drawing_area(None, None)
        self.update_status_bar()
        self.connected = False
        # Connect signals to slots
        dic = {
            "on_imagemenuitemConnect_activate": self.show_dialog_connect,
            "on_imagemenuitemDisconnect_activate": self.disconnect,
            "on_imagemenuitemAbout_activate": self.show_dialog_about,
            "on_toolbuttonConnect_clicked": self.show_dialog_connect,
            "on_toolbuttonDisconnect_clicked": self.disconnect,
            "on_windowMain_destroy": self.quit,
            "on_imagemenuitemQuit_activate": self.quit,
            "on_buttonAboutClose_clicked": self.hide_dialog_about,
            "on_buttonConnectCancel_clicked": self.hide_dialog_connect,
            "on_buttonConnectOk_clicked": self.connect,
            "on_drawingarea_expose_event": self.draw,
            "on_drawingarea_size_allocate": self.resize_drawing_area,
            "on_drawingarea_button_press_event": self.clicked,
            "on_drawingarea_motion_notify_event": self.moved,
            "on_toolbuttonShowHint_toggled": self.draw,
        }

        self.widgets.signal_autoconnect(dic)
        self.widgets.get_widget("dialogAbout").connect("delete-event", lambda w, e: w.hide() or True)
        self.widgets.get_widget("dialogConnect").connect("delete-event", lambda w, e: w.hide() or True)
        self.widgets.get_widget("dialogConnecting").connect("delete-event", lambda w, e: w.hide() or True)
        self.widgets.get_widget("dialogDisconnection").connect("delete-event", lambda w, e: w.hide() or True)
        self.set_ui_disconnected_state()
class ReversiGUI(IGameClientInd):
    def __init__(self):
        self.yourturn = False
        self.player = Player.WHITE
        self.pending_drawings = None

        self.widgets = None
        self.window = None
        self.drawingarea = None
        self.toolbuttonShowHint = None

        self.background = None
        self.white = None
        self.black = None
        self.hint = None
        self.scaledbackground = None
        self.scaledwhite = None
        self.scaledblack = None
        self.scaledhint = None

        self.width = None
        self.height = None
        self.size = None
        self.ratio = None
        self.cellsize = None
        self.shift_x = None
        self.shift_y = None
        self.shift_border = None

        self.selection_row = None
        self.selection_column = None
        self.selection_valid = False

        self.request = GameClient()
        self.request.indication = self
        # Load widgets from Glade file
        self.widgets = gtk.glade.XML("interface.glade")

        # Shorcuts for exhaustive use of widgets
        self.window = self.widgets.get_widget("windowMain")
        self.drawingarea = self.widgets.get_widget("drawingarea")
        self.toolbuttonShowHint = self.widgets.get_widget("toolbuttonShowHint")

        # Show main window
        # self.window.maximize()
        self.window.show()

        # Initialize
        self.pending_drawings = list()
        self.drawingarea.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(0, 0, 0))
        self.load_resources()
        self.resize_drawing_area(None, None)
        self.update_status_bar()
        self.connected = False
        # Connect signals to slots
        dic = {
            "on_imagemenuitemConnect_activate": self.show_dialog_connect,
            "on_imagemenuitemDisconnect_activate": self.disconnect,
            "on_imagemenuitemAbout_activate": self.show_dialog_about,
            "on_toolbuttonConnect_clicked": self.show_dialog_connect,
            "on_toolbuttonDisconnect_clicked": self.disconnect,
            "on_windowMain_destroy": self.quit,
            "on_imagemenuitemQuit_activate": self.quit,
            "on_buttonAboutClose_clicked": self.hide_dialog_about,
            "on_buttonConnectCancel_clicked": self.hide_dialog_connect,
            "on_buttonConnectOk_clicked": self.connect,
            "on_drawingarea_expose_event": self.draw,
            "on_drawingarea_size_allocate": self.resize_drawing_area,
            "on_drawingarea_button_press_event": self.clicked,
            "on_drawingarea_motion_notify_event": self.moved,
            "on_toolbuttonShowHint_toggled": self.draw,
        }

        self.widgets.signal_autoconnect(dic)
        self.widgets.get_widget("dialogAbout").connect("delete-event", lambda w, e: w.hide() or True)
        self.widgets.get_widget("dialogConnect").connect("delete-event", lambda w, e: w.hide() or True)
        self.widgets.get_widget("dialogConnecting").connect("delete-event", lambda w, e: w.hide() or True)
        self.widgets.get_widget("dialogDisconnection").connect("delete-event", lambda w, e: w.hide() or True)
        self.set_ui_disconnected_state()

    def set_request(self, request):
        self.request = request

    def run(self):
        gtk.threads_enter()
        gtk.main()
        gtk.threads_leave()

    def quit(self, widget):
        self.request.shutdown_req()
        gtk.main_quit()

    def show_dialog_connect(self, widget):
        self.widgets.get_widget("dialogConnect").show()

    def hide_dialog_connect(self, widget):
        self.widgets.get_widget("dialogConnect").hide()

    def show_dialog_about(self, widget):
        self.widgets.get_widget("dialogAbout").show()

    def hide_dialog_about(self, widget):
        self.widgets.get_widget("dialogAbout").hide()

    def connect(self, widget):
        ip = self.widgets.get_widget("entryIp").get_text()
        port = self.widgets.get_widget("spinbuttonPort").get_value_as_int()
        if self.request.connect_req(ip, port):
            self.widgets.get_widget("dialogConnect").hide()
            response = self.widgets.get_widget("dialogConnecting").run()
            if response == gtk.RESPONSE_CANCEL:
                response = self.widgets.get_widget("dialogConnecting").hide()
                self.request.disconnect_req()
                self.request.shutdown_req()
                self.set_ui_disconnected_state()
        self.draw()

    def disconnect(self, widget):
        self.set_ui_disconnected_state()
        self.request.disconnect_req()
        self.request.shutdown_req()

    def load_resources(self):
        self.background = gtk.gdk.pixbuf_new_from_file("res/background.png")
        self.white = gtk.gdk.pixbuf_new_from_file("res/white.png")
        self.black = gtk.gdk.pixbuf_new_from_file("res/black.png")
        self.hint = gtk.gdk.pixbuf_new_from_file("res/hint.png")

    # Scales images every time the area is resized and stores some variables to be used in draw method
    def resize_drawing_area(self, widgets, events):
        self.width, self.height = self.drawingarea.window.get_size()
        self.size = max(1, min(self.width, self.height))
        self.ratio = self.size / float(self.background.get_width())
        self.cellsize = self.white.get_width() * self.ratio

        self.scaledbackground = self.background.scale_simple(
            int(round(self.size)), int(round(self.size)), gtk.gdk.INTERP_BILINEAR
        )
        self.scaledwhite = self.white.scale_simple(
            int(round(self.cellsize)), int(round(self.cellsize)), gtk.gdk.INTERP_BILINEAR
        )
        self.scaledblack = self.black.scale_simple(
            int(round(self.cellsize)), int(round(self.cellsize)), gtk.gdk.INTERP_BILINEAR
        )
        self.scaledhint = self.hint.scale_simple(
            int(round(self.cellsize)), int(round(self.cellsize)), gtk.gdk.INTERP_BILINEAR
        )

        self.shift_x = abs(self.width - self.scaledbackground.get_width()) / 2.0
        self.shift_y = abs(self.height - self.scaledbackground.get_height()) / 2.0
        self.shift_border = 96 * self.ratio  # 96px is the width of the border built-in the image

    def draw(self, widget=None, events=None):
        self.drawingarea.window.draw_pixbuf(
            None, self.scaledbackground, 0, 0, int(round(self.shift_x)), int(round(self.shift_y))
        )
        for i in range(self.request.board_model.get_size()):
            for j in range(self.request.board_model.get_size()):
                player = self.request.board_model.get(i, j)
                if player == Player.WHITE:
                    self.draw_cell(i, j, self.scaledwhite)
                elif player == Player.BLACK:
                    self.draw_cell(i, j, self.scaledblack)
                elif (
                    self.yourturn
                    and self.toolbuttonShowHint.get_active()
                    and GameLogic.is_valid_position(self.request.board_model, i, j, self.player)
                ):
                    self.draw_cell(i, j, self.scaledhint)

        if (
            self.yourturn
            and self.selection_row is not None
            and self.selection_column is not None
            and self.selection_valid
        ):
            self.drawingarea.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
            self.draw_cell(
                self.selection_row,
                self.selection_column,
                self.scaledwhite if self.player == Player.WHITE else self.scaledblack,
            )
        else:
            self.drawingarea.window.set_cursor(None)

    def draw_cell(self, row, column, image):
        self.drawingarea.window.draw_pixbuf(
            None,
            image,
            0,
            0,
            int(round(self.shift_x + self.shift_border + column * self.cellsize)),
            int(round(self.shift_y + self.shift_border + row * self.cellsize)),
        )

    def moved(self, widget, event):
        if self.connected is False:
            return

        if len(self.pending_drawings) > 0:
            return

        previous_row = self.selection_row
        previous_column = self.selection_column
        previous_valid = self.selection_valid
        noshift_x = event.x - self.shift_x - self.shift_border
        noshift_y = event.y - self.shift_y - self.shift_border
        if (
            0 <= noshift_x
            and noshift_x < self.size - 2 * self.shift_border
            and 0 <= noshift_y
            and noshift_y < self.size - 2 * self.shift_border
        ):
            self.selection_column = int((noshift_x / self.cellsize) % 8.0)
            self.selection_row = int((noshift_y / self.cellsize) % 8.0)
            self.selection_valid = (
                self.request.board_model.get(self.selection_row, self.selection_column) == Player.EMPTY
            )
            # GameLogic.is_valid_position(self.request.board_model, self.selection_row, self.selection_column, self.player)
        else:
            self.selection_column = None
            self.selection_row = None
            self.selection_valid = False
        if previous_valid != self.selection_valid or (
            (previous_row != self.selection_row or previous_column != self.selection_column) and self.selection_valid
        ):
            if self.selection_valid and previous_valid is False:
                self.drawingarea.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
                self.draw_cell(
                    self.selection_row,
                    self.selection_column,
                    self.scaledwhite if self.player == Player.WHITE else self.scaledblack,
                )
            else:
                self.draw()

    def clicked(self, widget, event):
        if self.selection_row is not None and self.selection_column is not None:
            self.request.place_req(self.selection_row, self.selection_column)
            self.yourturn = False
            self.update_status_bar()

    def draw_affected_positions(self):
        if len(self.pending_drawings) == 0:
            self.update_status_bar()
            if self.toolbuttonShowHint.get_active():
                self.draw()
            return False
        else:
            player, [row, column] = self.pending_drawings.pop(0)
            print "pending", row, column
            self.draw_cell(row, column, self.scaledwhite if player == Player.WHITE else self.scaledblack)
            return True

    def update_status_bar(self):
        white_count, black_count = self.request.board_model.count_disks()
        if self.player == Player.WHITE:
            self.widgets.get_widget("labelWhiteCount").set_text("You (" + str(white_count) + " disks)")
            self.widgets.get_widget("labelBlackCount").set_text("Opponent (" + str(black_count) + " disks)")
        else:
            self.widgets.get_widget("labelWhiteCount").set_text("Opponent (" + str(white_count) + " disks)")
            self.widgets.get_widget("labelBlackCount").set_text("You (" + str(black_count) + " disks)")
        self.widgets.get_widget("labelTurn").set_text("Your turn" if self.yourturn else "Opponent's turn")

    def update_board(self, player, changed_positions):
        # self.pending_drawings += changed_positions
        self.pending_drawings += [[player, position] for position in changed_positions]
        print self.pending_drawings
        gobject.timeout_add(100, self.draw_affected_positions)
        self.drawingarea.window.set_cursor(None)
        self.selection_row = None
        self.selection_column = None
        self.selection_valid = False

    def set_ui_disconnected_state(self):
        self.connected = False
        self.widgets.get_widget("toolbuttonConnect").set_sensitive(True)
        self.widgets.get_widget("toolbuttonDisconnect").set_sensitive(False)
        self.widgets.get_widget("imagemenuitemConnect").set_sensitive(True)
        self.widgets.get_widget("imagemenuitemDisconnect").set_sensitive(False)
        self.widgets.get_widget("imagemenuitemDisconnect").set_sensitive(False)
        self.widgets.get_widget("toolbuttonShowHint").set_sensitive(False)
        self.widgets.get_widget("toolbuttonShowHint").set_active(False)

    def connection_ok(self, player):
        self.player = player
        self.connected = True
        self.widgets.get_widget("dialogConnecting").hide()
        self.widgets.get_widget("toolbuttonConnect").set_sensitive(False)
        self.widgets.get_widget("toolbuttonDisconnect").set_sensitive(True)
        self.widgets.get_widget("imagemenuitemConnect").set_sensitive(False)
        self.widgets.get_widget("imagemenuitemDisconnect").set_sensitive(True)
        self.widgets.get_widget("toolbuttonShowHint").set_sensitive(True)
        self.update_status_bar()

    def updated_board(self, player, changed_positions):
        self.update_board(player, changed_positions)

    def winner(self, winner):
        self.set_ui_disconnected_state()
        self.request.disconnect_req()
        self.request.shutdown_req()
        winner_dialog = None
        if winner == Player.EMPTY:
            winner_dialog = gtk.MessageDialog(
                parent=None,
                flags=gtk.DIALOG_MODAL,
                type=gtk.MESSAGE_INFO,
                buttons=gtk.BUTTONS_OK,
                message_format="Draw",
            )
        else:
            if self.player == winner:
                winner_dialog = gtk.MessageDialog(
                    parent=None,
                    flags=gtk.DIALOG_MODAL,
                    type=gtk.MESSAGE_INFO,
                    buttons=gtk.BUTTONS_OK,
                    message_format="You won!",
                )
            else:
                winner_dialog = gtk.MessageDialog(
                    parent=None,
                    flags=gtk.DIALOG_MODAL,
                    type=gtk.MESSAGE_INFO,
                    buttons=gtk.BUTTONS_OK,
                    message_format="You lost",
                )

        winner_dialog.connect("response", lambda widget, response_id: winner_dialog.hide())
        winner_dialog.show()

    def turn(self):
        self.yourturn = True
        self.update_status_bar()

    def place_error(self):
        self.drawingarea.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.X_CURSOR))
        gobject.timeout_add(500, lambda: self.drawingarea.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.X_CURSOR)))

    def disconnection(self):
        self.widgets.get_widget("dialogConnecting").hide()
        if self.connected:
            self.connected = False
            self.set_ui_disconnected_state()
            dialog = gtk.MessageDialog(
                parent=None,
                flags=gtk.DIALOG_MODAL,
                type=gtk.MESSAGE_INFO,
                buttons=gtk.BUTTONS_OK,
                message_format="Disconnected from server",
            )
            dialog.connect("response", lambda widget, response_id: dialog.destroy() or True)
            dialog.show()

    # IGameClientInd implementation
    def connection_ok_ind(self, player):
        gobject.idle_add(self.connection_ok, player)

    def updated_board_ind(self, player, changed_positions):
        print "updated_board_ind", player, changed_positions
        gobject.idle_add(self.updated_board, player, changed_positions)

    def winner_ind(self, winner):
        gobject.idle_add(self.winner, winner)

    def turn_ind(self):
        gobject.idle_add(self.turn)

    def place_error_ind(self):
        gobject.idle_add(self.place_error)

    def disconnection_ind(self):
        gobject.idle_add(self.disconnection)
示例#10
0
class NetGameDialog(QtGui.QDialog):
    def __init__(self, rows, cols, win_lane, parent=None, sock=None, create=True, IP=""):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("The Network Game")
        self.buttons = []
        self.char = ""
        self.game_client = None
        if sock == None:
            self.game_client = GameClient(self)
        else:
            self.game_client = sock
            self.game_client.dialog = self

        self.game_desk = GameDesk(rows, cols, win_lane)

        self.grid = QtGui.QGridLayout()
        self.grid.setSpacing(0)

        for row in range(0, rows):
            for col in range(0, cols):
                button = GameButton(row, col)
                button.setEnabled(False)
                button.clicked.connect(self.gameButtonClicked)
                self.buttons.append(button)
                self.grid.addWidget(button, row, col)

        self.setLayout(self.grid)

        if create:
            msg = ["CreateGame", str(rows), str(cols), str(win_lane)]
            self.game_client.writeMsg(msg)
        else:
            msg = ["ConnectToGame", IP]
            self.game_client.writeMsg(msg)

    def myTurn(self, char):
        self.char = char

        for b in self.buttons:
            b.setEnabled(True)
        reply = QtGui.QMessageBox.information(self, "Message", "Your turn!", QtGui.QMessageBox.Yes)

    def gameButtonClicked(self):
        for b in self.buttons:
            b.setEnabled(False)

        sender = self.sender()
        x = sender.pos_x
        y = sender.pos_y

        self.makeTurn(x, y, self.char, sender, True)

        msg = ["NewTurn", str(x), str(y), self.char]
        self.game_client.writeMsg(msg)

    def makeTurn(self, x, y, char, button=None, my_turn=False):
        x=int(x)
        y=int(y)
        if button == None:
            for b in self.buttons:
                #print b.pos_x,b.pos_y
                #print x,y
                if int(b.pos_x) == int(x) and int(b.pos_y) == int(y):
                    button = b


        label = QtGui.QLabel(char)
        label.setFixedSize(25, 25)
        label.setAlignment(QtCore.Qt.AlignCenter)

        if char == "X":
            label.setStyleSheet("QLabel{color: green}")
        else:
            label.setStyleSheet("QLabel{color: red}")
        font = label.font()
        font.setPointSize(20)
        font.setBold(True)

        label.setFont(font)
        button.close()
        self.grid.addWidget(label, x, y, QtCore.Qt.AlignCenter)

        if self.game_desk.newTurn(x, y, char):
            reply = QtGui.QMessageBox.information(self, "Message", (char + " WON!"), QtGui.QMessageBox.Yes)
            #self.game_client.my_sock.disconnect()

            self.close()

        if not my_turn:
            if char == "X":
                self.myTurn("O")
            else:
                self.myTurn("X")
示例#11
0
def PlayTheGame():
    print("PLAY TIME")
    GameClient()
示例#12
0
def connect(host, port):
	global client
	client = GameClient(host, port)
示例#13
0
class Geography:
    def __init__(self):
        mapFile = 'images/world.tif'
        #self.view = WorldView(controller=self, mapFile=mapFile, mapSize=self.mapSize)
        self.view = WorldView(controller=self)
        self.map = Map(mapFile, screenSize=self.view.screenSize)
        self.view.map = self.map
        self.landmark = None
        self.landmarks = None
        self.score = 0
        self.maximumDistance = 1000
        self.timer = None
        self.worstGuess = None
        self.client = GameClient()
        self.deferred = defer.Deferred()
        self.setRounds()
        self.crops = {'world':(-180.0, 90.0, 180.0, -90.0),
                      'us':(-125, 52, -65, 22),
                      'europe':(-25, 72, 51, 34)
                  }
        
    def setRounds(self):
        self.gameOver = False
        self.rounds = ['africa', 'world capitals', 'world', 'us', 'europe']
        self.roundNumber = 0
        
        
    def start(self):
        self.nextRound("Choose the position of the given city.  If you miss by more than %i km, the round is over" % self.maximumDistance)
        reactor.run()
        
    def quit(self):
        reactor.stop()
    
    
    def mouseEvent(self, event):
        if self.landmarks == None or len(self.landmarks) == 0 or self.landmark == None:
            print 'do nothing'
        elif not self.timeLoop.running:
            self.nextRound("Sorry, you didn't guess in time")
        elif self.timeLoop.running:
            print 'running'
            self.timeLoop.stop()
            answer = (event.x, event.y)
            distance = self.map.getDistance(answer, self.landmark)
            if self.worstGuess is None:
                self.worstGuess = distance
            elif distance > self.worstGuess:
                self.worstGuess = distance
            self.view.deleteLines()
            self.view.drawLines('blue', (event.x, event.y))
            x, y = self.map.mapToScreen(self.landmark['lat'], self.landmark['long'])
            self.view.drawLines('red', (x, y))
            self.view.drawCircle('red', (x, y), 25)
            self.view.answer.set("Distance: %d km" % int(distance))
            if distance > self.maximumDistance:
                self.nextRound("Sorry, you missed by more than %i km" % self.maximumDistance)
            else:
                self.view.nextRound.set('%i questions left' % len(self.landmarks))       
                time = self.time
                # calculate score
                score = self.calculateScore(time, distance)
                self.score += score
                self.view.scoreText.set("Total Score: %i" % int(self.score))
                self.view.showMessage("Score: %i Total: %i" % (int(score),  int(self.score)))
                self.getQuestion()
                              
                
    def nextRound(self, message):
        if len(self.rounds) > 0:
            self.landmarks = None
            round = self.rounds.pop()
            crop = self.crops[round]
            self.map.crop(crop)
            self.view.makeImage()
            self.roundNumber += 1
            message = message + "\n\nRound %i\n%s: The 50 most populus cities" % (self.roundNumber, round.capitalize())
            try:
                self.getLandmarks(round)
            except ConnectionError:
                self.view.showMessage("Sorry, the stupid game server is not running.  Quitting game NOW!")
                self.quit()
            self.view.showMessage(message)
            self.getQuestion()
        else:
            self.gameOver = True
            self.view.showMessage("Game over, now attempting to post your score to the server")
            try:
                self.postScore()
            except ConnectionError:
                self.view.showMessage("Sorry, the stupid game server is not running.  Quitting game NOW!")
                self.quit()
        
    def getQuestion(self):
        if self.landmarks == None:
            pass
            #self.landmarks = self.getLandmarks('world')
            #self.getQuestion()
        elif len(self.landmarks) > 0:
            self.view.deleteLines()
            self.getLandmark()
            self.view.question.set("%s, %s" % (self.landmark['name'], self.landmark['country']))
            self.view.answer.set("")
            self.time = 5
            self.timeLoop = task.LoopingCall(self.updateTime)
            self.timeLoop.start(0.1)
        else:
            self.nextRound("Good job, you got all 50!")
        
    def updateTime(self):
        if self.time <= 0:
            self.timeLoop.stop()
        else:
            self.time -= 0.1
            self.view.updateProgressbar(self.time)
            
    def restart(self):
        """ """
        if self.gameOver:
            self.numQuestions = 20
            self.score = 0
            self.view.deleteLines()
            self.view.answer.set("")
            self.view.scoreText.set('')
            self.view.question.set('')
            self.gameOver = False
            
    def postScore(self):
        name = self.view.nameInput.get()
        if name == '':
            name = 'anonymous'
        data = "%s %i %.1f" % (name, int(self.score), float(self.worstGuess))
        listOfScores = self.client.addScore(data)
        scores = "High Scores: \n"
        scores += listOfScores
        self.view.scoresText.set(scores)
        self.view.showScores(scores)
        
    def getLandmarks(self, difficulty):
        try:
            self.landmarks = self.client.getLandmarks(difficulty)
        except ConnectionError:
            self.view.showMessage("Sorry, the stupid game server is not running.  Quitting game NOW!")
            self.quit()
        return self.deferred
        
        
    def getLandmark(self):
        self.landmark = self.landmarks.pop()
            
    def calculateScore(self, time, distance):
        if distance > 2500:
            return 0.0
        score = 1000 - pow(distance, 1.2)
        timeBonus = 100 * (5 - time)
        if score < 0:
            score = 0
        score = score + timeBonus
        #self.view.updateNextRoundBar(score)
        return score
示例#14
0
class MyTable(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("Server's list")
        self.setFixedSize(440,250)
        self.filled_rows = 0
        self.game_client = GameClient(self)

        self.tablewidget=QtGui.QTableWidget(1,4,self)
        self.tablewidget.setFixedSize(440,250)
        self.tablewidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)

        HeaderIp=QtGui.QTableWidgetItem("IP")
        HeaderRow=QtGui.QTableWidgetItem("Row")
        HeaderCol=QtGui.QTableWidgetItem("Col")
        HeaderConnect=QtGui.QTableWidgetItem("Win line")

        self.tablewidget.setHorizontalHeaderItem(0,HeaderIp)
        self.tablewidget.setHorizontalHeaderItem(1,HeaderRow)
        self.tablewidget.setHorizontalHeaderItem(2,HeaderCol)
        self.tablewidget.setHorizontalHeaderItem(3,HeaderConnect)

        cell_clicked = self.tablewidget.cellDoubleClicked
        cell_clicked.connect(self.server_choosed)

        self.game_client.writeMsg(["FindGame"])

    def fillTable(self, msg):
        print msg
        for game in msg:
            parse_game = game.split('|')

            ip = QtGui.QTableWidgetItem(parse_game[0])
            row = QtGui.QTableWidgetItem(parse_game[1])
            col = QtGui.QTableWidgetItem(parse_game[2])
            win_line = QtGui.QTableWidgetItem(parse_game[3])

            self.tablewidget.setItem(self.filled_rows, 0, ip)
            self.tablewidget.setItem(self.filled_rows, 1, row)
            self.tablewidget.setItem(self.filled_rows, 2, col)
            self.tablewidget.setItem(self.filled_rows, 3, win_line)

            self.filled_rows +=1
            self.tablewidget.setRowCount(self.tablewidget.rowCount()+1)

    def server_choosed(self, row, col):
        ip = self.tablewidget.item(row, 0).text()
        game_row = int(self.tablewidget.item(row, 1).text())
        game_col = int(self.tablewidget.item(row, 2).text())
        win_lane = int(self.tablewidget.item(row, 3).text())

        ngd = NetGameDialog(game_row,
                            game_col,
                            win_lane,
                            self,
                            self.game_client,
                            False,
                            ip)

        self.setHidden(True)
        ngd.exec_()
        self.close()
        print("Player One: Type 1 for Manual Player, 2 for Random Player, 3 for AB Pruning, 4 for MiniMax, 5 for Monte Carlo")
        self.player1 = int(raw_input("Enter number here: "))
        print("Player Two: Type 1 for Manual Player, 2 for Random Player, 3 for AB Pruning, 4 for MiniMax, 5 for Monte Carlo")
        self.player2 = int(raw_input("Enter number here: "))
        self.playAmount = int(raw_input("How many times would you like to play?: "))
        self.names = ["ManualPlayer","Random","AlphaBeta","MiniMax","MonteCarlo"]

    def getStats(self):
        print("Player One won " + str(self.p1Count) + " time(s).")
        print("Player Two won " + str(self.p2Count) + " time(s).")
        print("There were " + str(self.drawCount) + " draws.")
    
        


if __name__ == "__main__":
    g = GameClientRunner()
    for index in range(g.playAmount):
        gc = GameClient(g.player1, g.player2)
        winner = gc.playGame()
        if(winner == 1):
            g.p1Count += 1
        elif(winner == -1):
            g.p2Count += 1
        else:
            g.drawCount += 1
        print(index)
    performancePlotter.plotMatchup((g.p1Count,g.p2Count,g.drawCount,g.names[g.player1-1],g.names[g.player2-1]))
    g.getStats()

示例#16
0
import random
import time
import pygame

from GameClient import GameClient

pygame.init()
pygame.display.set_caption("Snake")
random.seed(time.time())
game = GameClient()
game.play()
pygame.quit()