class EndtoendGame(QWidget): def __init__(self, parent = None): super().__init__(parent) self.guess = Guess() self.guess.test() self.endtoend = Endtoend() self.gameStart = False self.setGeometry(750, 300, 500, 400) self.setWindowTitle('End-TO-End') # label self.status = QLabel("") self.status.setFixedHeight(30) self.status.setAlignment(Qt.AlignCenter) font1 = self.status.font() font1.setPointSize(13) self.status.setFont(font1) self.inputword = QLabel('단어입력 : ', self) self.lastword = QLabel('이전 단어 : ', self) self.lastword.setFixedHeight(15) self.lastword.setAlignment(Qt.AlignCenter) font2 = self.lastword.font() font2.setPointSize(10) self.lastword.setFont(font2) self.showaipoint = QLabel('CPU 점수: ') font3 = self.showaipoint.font() font3.setPointSize(10) self.showaipoint.setFont(font3) self.showmypoint = QLabel('내 점수: ') font4 = self.showmypoint.font() font4.setPointSize(10) self.showmypoint.setFont(font2) # QLineEdit self.showword = QLineEdit() self.showword.setReadOnly(True) font5 = self.showword.font() font5.setPointSize(20) self.showword.setFont(font5) self.showword.setFixedHeight(50) self.showword.setFixedWidth(350) self.showword.setAlignment(Qt.AlignCenter) self.myrecord = QLineEdit() self.myrecord.setReadOnly(True) self.myrecord.setFixedHeight(30) self.myrecord.setAlignment(Qt.AlignCenter) self.airecord = QLineEdit() self.airecord.setReadOnly(True) self.airecord.setFixedHeight(30) self.airecord.setAlignment(Qt.AlignCenter) self.writeword = QLineEdit() self.writeword.setFixedHeight(40) self.writeword.setFixedWidth(200) self.writeword.setMaxLength(52) # QTextEdit self.character = QTextEdit() self.character.setReadOnly(True) self.character.setAlignment(Qt.AlignLeft) font6 = self.character.font() font6.setFamily('Courier New') self.character.setFont(font6) self.character.setText(self.endtoend.text[0]) # Button newGame self.newGame = QToolButton() self.newGame.setText('새 게임') self.newGame.clicked.connect(self.startGame) self.newGame.setFixedHeight(40) self.newGame.setFixedWidth(80) self.enter = QToolButton() self.enter.setText('Enter') self.enter.clicked.connect(self.pressedEnter) self.enter.setFixedHeight(40) # Message Box self.endmessage = QMessageBox() # QHbox1 hbox1 = QHBoxLayout() hbox1.addStretch(1) hbox1.addWidget(self.showaipoint) hbox1.addWidget(self.airecord) hbox1.addStretch(1) hbox1.addWidget(self.showmypoint) hbox1.addWidget(self.myrecord) hbox1.addStretch(1) # QHbox2 hbox2 = QHBoxLayout() hbox2.addStretch(1) hbox2.addWidget(self.showword) hbox2.addStretch(1) # QHbox3 hbox3 = QHBoxLayout() hbox3.addStretch(1) hbox3.addWidget(self.inputword) hbox3.addWidget(self.writeword) hbox3.addWidget(self.enter) hbox3.addStretch(1) hbox3.addWidget(self.newGame) # QVbox vbox = QVBoxLayout() vbox.addWidget(self.status) vbox.addLayout(hbox2) vbox.addWidget(self.lastword) vbox.addLayout(hbox1) vbox.addWidget(self.character) vbox.addLayout(hbox3) self.setLayout(vbox) self.startGame() def timeout(self): self.settime -= 1 self.status.setText(str(self.settime)) if self.settime == 0 and self.gameStart == False: self.settime = 15 self.gameStart = True self.writeword.setDisabled(False) elif self.settime == 0 and self.gameStart == True: self.gameOver = True self.timer = None self.status.setText('Time Over') self.showword.setText(self.guess.botsword(self.firstword)) self.enter.setDisabled(True) # 메세지박스 설정 if self.yourscore > self.myscore: self.endmessage.setText('패배하셨습니다.') elif self.yourscore < self.myscore: self.endmessage.setText('승리하셨습니다!') elif self.yourscore == self.myscore: self.endmessage.setText('동점입니다!') self.endmessage.exec_() def startGame(self): # 타이머 초기화 self.settime = 4 self.maxtime = 15 self.timer = QTimer() self.timer.timeout.connect(self.timeout) self.timer.start(1000) self.gameStart = False self.enter.setDisabled(False) # 입력창 초기화 self.writeword.setDisabled(True) self.character.setText(self.endtoend.text[0]) self.myscore = 0 self.yourscore = 0 self.guess.usedword = [] self.lastword.setText('이전 단어 : ') # 첫 단어 불러오기 self.firstword = self.guess.game_start() # gameOver False 설정 self.gameOver = False # 처음 시작할시 컴퓨터가 단어를 제시하도록 하는 부분 self.showword.setText(self.firstword) self.guess.what_have_we_done(self.firstword) # if len(self.firstword) > 1: # self.yourscore += len(self.firstword) * 4 # 점수판 초기화된 점수 입력 self.myrecord.setText(str(self.myscore)) self.airecord.setText(str(self.yourscore)) self.writeword.clear() self.status.setText('게임을 시작합니다.') def pressedEnter(self): self.usedword = self.guess.usedword self.settime = self.maxtime self.maxtime -= 1 if self.settime == 0: self.gameOver = True self.status.setText('Time Over') enterword = self.writeword.text() self.writeword.clear() if len(enterword) > 1: print(1) # 예외처리 if self.guess.isitin(enterword) == False: self.status.setText('불가능합니다.' + '2') print(3) elif self.guess.useingword(enterword) == False: self.status.setText('이미 사용한 단어입니다.') print(5) elif self.guess.botsword(enterword) == False: print(4) self.status.setText('존재하지 않는 단어입니다.') elif enterword in self.usedword: print(6) self.status.setText('이미 입력한 단어입니다.') elif self.showword.text()[-1] != enterword[0]: self.status.setText("잘못된 입력입니다.") # 모든 오류 일어나지 않았을때 실행 else: self.myscore += len(enterword) * 4 self.myrecord.setText(str(self.myscore)) last = self.guess.what_have_we_done(enterword) self.lastword.setText("이전 단어 : "+ ' - '.join(last)) # 컴퓨터가 새로운 단어를 입력 self.aiword = self.guess.botsword(enterword) self.showword.setText(self.aiword) self.yourscore += len(self.aiword) * 4 self.guess.what_have_we_done(self.aiword) self.airecord.setText(str(self.yourscore)) self.status.setText('당신의 차례입니다.') # 점수에 따라 character창의 점수가 바뀜 if self.yourscore > self.myscore: self.character.setText(self.endtoend.text[1]) elif self.yourscore < self.myscore: self.character.setText(self.endtoend.text[2]) elif self.yourscore == self.myscore: self.character.setText(self.endtoend.text[0]) elif len(enterword) == 1: self.status.setText('2글자 이상 입력해주세요.') else: self.status.setText('공백은 입력할 수 없습니다.')