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()
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")
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()