class TableWindow(QWidget): """ Визуализира играта. """ def __init__(self): super(TableWindow, self).__init__() self.cols = [] self.pc = Computer("B") self.vsPC = True self.win_dialog = WinDialog() self.compuret_win = ComputerWinDialog() self.first_player_time = Timer() self.first_player_time.start() self.col_one_edit = QTextEdit() self.col_one_edit.setReadOnly(True) self.col_two_edit = QTextEdit() self.col_two_edit.setReadOnly(True) self.col_three_edit = QTextEdit() self.col_three_edit.setReadOnly(True) self.col_four_edit = QTextEdit() self.col_four_edit.setReadOnly(True) self.col_five_edit = QTextEdit() self.col_five_edit.setReadOnly(True) self.col_six_edit = QTextEdit() self.col_six_edit.setReadOnly(True) self.col_seven_edit = QTextEdit() self.col_seven_edit.setReadOnly(True) self.col_eight_edit = QTextEdit() self.col_eight_edit.setReadOnly(True) self.col_nine_edit = QTextEdit() self.col_nine_edit.setReadOnly(True) self.col_ten_edit = QTextEdit() self.col_ten_edit.setReadOnly(True) self.col_one_edit = QTextEdit() self.col_one_edit.setReadOnly(True) label_on_turn = QLabel() label_on_turn.setText("On turn:") self.player = QLabel() self.player.setText("R") self.player_time = QLabel() self.player_time.setText("Time player R:") self.player_game_time = QLabel() self.player_game_time.setText(" ") self.adding_to_vector() self.onTurn = 1 self.t = Table() self.read_table() firstButton = QPushButton("&") firstButton.setFocusPolicy(Qt.NoFocus) firstButton.clicked.connect(self.first_button_clicked) secondButton = QPushButton("&") secondButton.setFocusPolicy(Qt.NoFocus) secondButton.clicked.connect(self.second_button_clicked) thirdButton = QPushButton("&") thirdButton.setFocusPolicy(Qt.NoFocus) thirdButton.clicked.connect(self.third_button_clicked) fourthButton = QPushButton("&") fourthButton.setFocusPolicy(Qt.NoFocus) fourthButton.clicked.connect(self.fourth_button_clicked) fifthButton = QPushButton("&") fifthButton.setFocusPolicy(Qt.NoFocus) fifthButton.clicked.connect(self.fifth_button_clicked) sixthButton = QPushButton("&") sixthButton.setFocusPolicy(Qt.NoFocus) sixthButton.clicked.connect(self.sixth_button_clicked) seventhButton = QPushButton("&") seventhButton.setFocusPolicy(Qt.NoFocus) seventhButton.clicked.connect(self.seventh_button_clicked) eighthButton = QPushButton("&") eighthButton.setFocusPolicy(Qt.NoFocus) eighthButton.clicked.connect(self.eighth_button_clicked) ninthButton = QPushButton("&") ninthButton.setFocusPolicy(Qt.NoFocus) ninthButton.clicked.connect(self.ninth_button_clicked) tenthButton = QPushButton("&") tenthButton.setFocusPolicy(Qt.NoFocus) tenthButton.clicked.connect(self.tenth_button_clicked) layout = QGridLayout() layout.addWidget(firstButton, 0, 0) layout.addWidget(secondButton, 0, 1) layout.addWidget(thirdButton, 0, 2) layout.addWidget(fourthButton, 0, 3) layout.addWidget(fifthButton, 0, 4) layout.addWidget(sixthButton, 0, 5) layout.addWidget(seventhButton, 0, 6) layout.addWidget(eighthButton, 0, 7) layout.addWidget(ninthButton, 0, 8) layout.addWidget(tenthButton, 0, 9) layout.addWidget(self.col_one_edit, 1, 0) layout.addWidget(self.col_two_edit, 1, 1) layout.addWidget(self.col_three_edit, 1, 2) layout.addWidget(self.col_four_edit, 1, 3) layout.addWidget(self.col_five_edit, 1, 4) layout.addWidget(self.col_six_edit, 1, 5) layout.addWidget(self.col_seven_edit, 1, 6) layout.addWidget(self.col_eight_edit, 1, 7) layout.addWidget(self.col_nine_edit, 1, 8) layout.addWidget(self.col_ten_edit, 1, 9) layout.addWidget(label_on_turn, 2, 0) layout.addWidget(self.player, 2, 1) layout.addWidget(self.player_time, 2, 2) layout.addWidget(self.player_game_time, 2, 3) self.setLayout(layout) self.setWindowTitle("Connect Four") self.resize(550, 450) def adding_to_vector(self): """Добавя бутоните към масив от позициите на който може да се постави елемента""" self.cols.append(self.col_one_edit) self.cols.append(self.col_two_edit) self.cols.append(self.col_three_edit) self.cols.append(self.col_four_edit) self.cols.append(self.col_five_edit) self.cols.append(self.col_six_edit) self.cols.append(self.col_seven_edit) self.cols.append(self.col_eight_edit) self.cols.append(self.col_nine_edit) self.cols.append(self.col_ten_edit) def read_table(self): """Прочита таблицата от Table и я попълва в UI-a. Ако има победител, пуска нов прозер. """ result = "" i = 0 for col in self.cols: for j in range(0, len(self.t.matrix)): result += self.t.matrix[j][i] + "\n-\n" i += 1 col.setText(result) result = "" if self.t.has_winner(): if self.t.get_winner() == Table.RED: print(self.first_player_time.stop()) self.player_game_time.setText(str(self.first_player_time.stop())) self.win_dialog.show() else: self.compuret_win.show() def first_button_clicked(self): """Метод, който се извиква при натискането на първия бутон. Извършва ход в играта на позиция 0. """ if self.onTurn == 1: self.t.commit_turn(0, "R") self.first_player_time.sleep() if self.vsPC: pos = self.pc.get_turn(self.t.matrix) self.t.commit_turn(pos, "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(0, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def second_button_clicked(self): """Метод, който се извиква при натискането на втория бутон. Извършва ход в играта на позиция 1. """ if self.onTurn == 1: self.t.commit_turn(1, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(1, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def third_button_clicked(self): """Метод, който се извиква при натискането на третия бутон. Извършва ход в играта на позиция 2. """ if self.onTurn == 1: self.t.commit_turn(2, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(2, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def fourth_button_clicked(self): """Метод, който се извиква при натискането на четвътия бутон. Извършва ход в играта на позиция 3. """ if self.onTurn == 1: self.t.commit_turn(3, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(3, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def fifth_button_clicked(self): """Метод, който се извиква при натискането на петия бутон. Извършва ход в играта на позиция 4. """ if self.onTurn == 1: self.t.commit_turn(4, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(4, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def sixth_button_clicked(self): """Метод, който се извиква при натискането на шестия бутон. Извършва ход в играта на позиция 5. """ if self.onTurn == 1: self.t.commit_turn(5, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(5, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def seventh_button_clicked(self): """Метод, който се извиква при натискането на седмия бутон. Извършва ход в играта на позиция 6. """ if self.onTurn == 1: self.t.commit_turn(6, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(6, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def eighth_button_clicked(self): """Метод, който се извиква при натискането на осмият бутон. Извършва ход в играта на позиция 7. """ if self.onTurn == 1: self.t.commit_turn(7, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(7, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def ninth_button_clicked(self): """Метод, който се извиква при натискането на деветия бутон. Извършва ход в играта на позиция 8. """ if self.onTurn == 1: self.t.commit_turn(8, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(8, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table() def tenth_button_clicked(self): """Метод, който се извиква при натискането на десетия бутон. Извършва ход в играта на позиция 9. """ if self.onTurn == 1: self.t.commit_turn(9, "R") self.first_player_time.sleep() if self.vsPC: self.t.commit_turn(self.pc.get_turn( self.t.matrix), "B") self.first_player_time.start() else: self.onTurn = 2 self.player.setText("B") else: self.t.commit_turn(9, "B") self.player.setText("R") self.onTurn = 1 self.first_player_time.start() self.read_table()