class GUI(QWidget): def __init__(self): super().__init__() self.warning = QMessageBox() # Button self.startButton = basicButton('게임시작', self.startClicked) self.howToPlayButton = basicButton('게임방법', self.howClicked) self.exitButton = basicButton('게임종료', self.exitClicked) self.oneToHun1 = QPushButton('99\n\n↑\n\n1') self.oneToHun2 = QPushButton('99\n\n↑\n\n1') self.hunToOne1 = QPushButton('100\n\n↓\n\n2') self.hunToOne2 = QPushButton('100\n\n↓\n\n2') self.downCard = [] for i in range(4): self.downCard.append(downCard('', i, self.downCardClicked)) self.dummyDeck = QPushButton('남은 카드 수\n\n') self.dummyDeck.setFixedHeight(100) self.dummyDeck.setFixedWidth(80) self.turnEndButton = basicButton('턴 종료', self.turnEndClicked) self.turnEndButton.setFixedWidth(120) self.handCard = [] for i in range(8): self.handCard.append(handCard('', self.handCardClicked)) # Layout menuLayout = QHBoxLayout() menuLayout.addWidget(self.startButton) menuLayout.addWidget(self.howToPlayButton) menuLayout.addWidget(self.exitButton) basicCardLayout = QHBoxLayout() basicCardLayout.addWidget(self.oneToHun1) basicCardLayout.addWidget(self.oneToHun2) basicCardLayout.addWidget(self.hunToOne1) basicCardLayout.addWidget(self.hunToOne2) downCardLayout = QHBoxLayout() for i in range(4): downCardLayout.addWidget(self.downCard[i]) downLayout = QVBoxLayout() downLayout.addLayout(basicCardLayout) downLayout.addLayout(downCardLayout) dummyLayout = QHBoxLayout() dummyLayout.addWidget(self.dummyDeck) turnEndLayout = QVBoxLayout() turnEndLayout.addLayout(dummyLayout) turnEndLayout.addWidget(self.turnEndButton) settingLayout = QHBoxLayout() settingLayout.addLayout(downLayout) settingLayout.addStretch() settingLayout.addLayout(turnEndLayout) settingLayout.addStretch() handCardLayout = QHBoxLayout() for i in range(8): handCardLayout.addWidget(self.handCard[i]) mainLayout = QVBoxLayout() mainLayout.addLayout(menuLayout) mainLayout.addLayout(settingLayout) mainLayout.addLayout(handCardLayout) self.setLayout(mainLayout) self.setWindowTitle('The Game') self.setGeometry(300, 100, 600, 400) self.show() self.gameStart() def gameStart(self): self.dummy = Dummy() self.handCardList = self.dummy.getHandCardList() self.putCard = PutCard(self.handCardList) self.downCardList = self.putCard.getDownCardList() for i in range(4): downCardNum = str(self.downCardList[i]) self.downCard[i].setText(downCardNum) for i in range(8): handCardNum = str(self.handCardList[i]) self.handCard[i].setText(handCardNum) self.dummyDeck.setText('남은 카드 수\n\n'+ str(self.dummy.countDeck())) # esc눌러서 게임종료 def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: Endkey = self.warning.question(self, '', "정말로 종료하시겠습니까?", self.warning.Yes | self.warning.No) if Endkey == self.warning.Yes: self.close() elif Endkey== self.warning.No: pass #정말 종료하시겠습니까? self.close() #게임시작 def startClicked(self): self.gameStart() #게임방법 def howClicked(self): self.warning.question(self, '게임방법', '# 게임의 진행\n' + '2~98까지의 숫자카드 98장을 잘 섞어 더미를 만들고 플레이어에게 8장을 나누어 줍니다.' + '한 차례에 최소 2장의 카드를 내려놓아야합니다.' + '원한다면 더 많은 카드를 내려놓을 수 있습니다.' + '카드를 내려놓을 때는 한 번에 한 장씩 내려놓아야 하며, 내려놓을 때마다 원하는 위치를 선택한 뒤, 내려고하는 카드를 선택합니다.' + '오름차순 위치에 카드를 놓을 때는 반드시 이전에 놓인 카드보다 높은 숫자를 놓아야 합니다.' + '내림차순 위치는 오름차순 위치와 반대로 이전에 놓인 카드보다 낮은 숫자를 놓아야 합니다.'+ '카드를 조건에 맞게 내려놓았다면 차례를 마칠 수 있습니다.' '차례를 종료하면 이번에 내려놓은 만큼의 카드를 더미에서 가져옵니다.\n\n' + '#되돌리기 규칙\n' + '일반적으로는 열마다 정해진 규칙대로 카드를 놓아야 하지만, 되돌리기 규칙에 해당하는 카드는 일반 규칙을 무시하고 놓을 수 있습니다.' + '-오름차순 위치: 현재 위치에 표시된 카드보다 정확히 10이 낮은 카드를 낼 수 있습니다.' + '-내림차순 위치: 현재 위치에 표시된 카드보다 정확히 10이 높은 카드를 낼 수 있습니다.\n\n' + '#게임의 종료\n' + '숫자 카드 더미가 떨어지면, 더 이상 카드를 뽑지 않고 게임을 진행합니다.'+ '만약 한 차례에 놓아야 하는 최소한의 카드를 내려놓을 수 없다면(카드 더미가 남아있다면 2장, 카드 더미가 없다면 1장)'+ '게임은 즉시 종료되고 플레이어는 게임에서 패배합니다.'+ '만약 플레이어가 자신의 카드를 전부 내려놓았다면, 플레이어들의 승리입니다.' , QMessageBox.Yes) #게임종료 def exitClicked(self): #정말 종료하시겠습니까? Endkey = self.warning.question(self, '', "정말로 종료하시겠습니까?", self.warning.Yes | self.warning.No) if Endkey== self.warning.Yes: self.close() elif Endkey== self.warning.No: pass self.close() #턴 종료 def turnEndClicked(self): self.putCount = self.putCard.getPutCount() self.handCardList = self.dummy.getHandCardList() if self.putCount >= 2: self.dummy.takeCard(self.handCardList) self.deckNum = self.dummy.countDeck() self.dummyDeck.setText('남은 카드 수\n\n' + str(self.deckNum)) for i in range(8): self.handCard[i].setText(self.handCardList[i]) self.handCard[i].setEnabled(False) self.putCard.resetPutCount() if self.putCard.guess(self.handCardList, self.deckNum) == False: #여긴 덱 장수 신경안씀 self.warning.question(self, 'Game Over', 'You lose', QMessageBox.Yes) #self.startClicked() #게임 자동초기화 else: pass else: self.warning.question(self, 'Error', '두 장 이상의 카드를 옮긴 후 종료 할 수 있습니다.', QMessageBox.Yes) self.dummyDeck.setText('남은 카드 수\n\n' + str(self.dummy.countDeck())) # 내려놓아진 패 def downCardClicked(self): self.downLocation = self.sender() for i in range(8): self.handCard[i].setEnabled(True) # 사용자의 덱에 있는 카드 def handCardClicked(self): self.holdNum = self.sender() try: downNum = int(self.downLocation.text()) holdNum = int(self.holdNum.text()) if self.putCard.checkPut(downNum, holdNum, self.downLocation.label): num = self.dummy.takenCard(self.holdNum.text()) self.downLocation.setText(num) self.holdNum.setText('') for i in range(8): self.handCard[i].setEnabled(False) self.handCardList = self.dummy.getHandCardList() self.deckNum = self.dummy.countDeck() if self.deckNum == 0 and self.handCardList.count('')== 8: self.warning.question(self, 'Game Over', 'You Win (ノ゚▽゚)ノ', QMessageBox.Yes) #self.startClicked() #게임 자동초기화 elif self.putCard.guess(self.handCardList, self.deckNum)== False and self.deckNum == 0: self.warning.question(self, 'Game Over', 'You lose', QMessageBox.Yes)#여기선 덱이 0장일때만 승패관리함 #self.startClicked() #게임 자동초기화 else: pass except: self.warning.question(self, 'Error', '이미 낸 카드입니다.', QMessageBox.Yes)