Ejemplo n.º 1
0
    def doActionDiscard(self, action: Action):
        """
        카드 버리기 Action 을 수행하는 함수
        :param action: 수행할 action. type 은 무조건 2이어야 한다.
        """
        assert action.getActionType() == 2, "<discard> must be action type 2"

        playerDeck = self.playerDecks[self.currentPlayerIndex]
        cardIndex = action.getCardIndex()

        card = playerDeck.getCardOrNone(cardIndex)
        discardedCardCounter = self.getDiscardedCardCounter(card.getColor())
        discardedCardCounter[card.getNumber()] += 1
        self.increaseHintToken()

        print("%d번 플레이어가 %s 카드를 버렸습니다." %
              (self.currentPlayerIndex, card))  # DEBUG
        print("힌트 토큰이 하나 증가합니다.(8 이상이면 증가하지 않음)")  # DEBUG
        playerDeck.useCard(cardIndex)
        if not self.isCardsEmpty():
            self.giveOneCard(self.currentPlayerIndex)
            # print("%d번 플레이어가 새로운 카드를 받았습니다." % self.currentPlayerIndex)  # DEBUG
            if self.isCardsEmpty():
                if self.lastPlayerIndex < 0:
                    self.lastPlayerIndex = self.currentPlayerIndex
Ejemplo n.º 2
0
    def doAction(self, action: Action):
        """
        (구) Action 을 수행하는 함수
        기존 CUI 테스트 코드를 유지하기 위해 남겨둔 상태. 현재는 각 Action 별로 함수가 작성되어 있다.
        :param action: 수행할 동작
        :return: 각 Action 을 처리하는 함수의 return 값을 반환한다. 즉 actionType을 점검하지 않으면 어떤 return 값을 가지는지
                 확신할 수 없으니 주의할 것. 반환 값이 있을 수도 있고 없을 수도 있다.
        """

        if action.getActionType() == 1:  # 카드내기 (Play)
            return self.doActionPlay(action)
        elif action.getActionType() == 2:  # 버리기   (Discard)
            self.doActionDiscard(action)
        elif action.getActionType() == 3:  # 힌트주기
            return self.doActionHint(action)
Ejemplo n.º 3
0
    def giveHint(self, id):
        '''
        :return: 힌트에 대한 정보를 줄 것. 플레이어 번호 + 힌트를 str로 넘긴다.
        '''
        colorDict = {5: "R", 6: "G", 7: "B", 8: "W", 9: "Y"}
        for button in self.buttonGroup.buttons():
            if button is self.buttonGroup.button(id):
                # print("{}번째 플레이어에게 {}로 힌트를 주었습니다.".format(self.playerNum, button.text())) # DEBUG
                # 숫자 버튼이면?
                if 0 <= id <= 4:
                    hint, correspondedIndexes = self.gm.doAction(
                        Action(3, Hint(id + 1), self.playerNum))
                    self.client.sendAction("//3" + str(id + 1) +
                                           str(self.playerNum))
                    endFlag = self.gm.nextTurn()
                    self.close()
                if 5 <= id <= 9:
                    hint, correspondedIndexes = self.gm.doAction(
                        Action(3, Hint(colorDict[id]), self.playerNum))
                    self.client.sendAction("//3" + colorDict[id] +
                                           str(self.playerNum))
                    endFlag = self.gm.nextTurn()
                    self.close()
                # ~가 없다는 힌트 줄 때
                if len(correspondedIndexes) != 0:
                    notice = "%d번 플레이어가 %d번 플레이어에게 \n %s번째 카드가 %s임을 알려주었습니다.\n" \
                             "힌트 토큰이 하나 감소합니다." % (self.gm.currentPlayerIndex - 1, self.playerNum, correspondedIndexes, hint)
                # ~가 있다는 힌트 줄 때
                else:
                    notice = "%d번 플레이어가 %d번 플레이어에게 \n %s 카드가 없음을 알려주었습니다.\n" \
                             "힌트 토큰이 하나 감소합니다." % (self.gm.currentPlayerIndex - 1, self.playerNum, hint)
                if endFlag or self.gm.currentPlayerIndex == self.gm.lastPlayerIndex:
                    print("힌트 주기로 게임 끝")  # DEBUG
                    notice = "게임 종료!\n" \
                             "최종 점수: %d점" % (self.gm.calculateScore())
                    time.sleep(5)
                    self.hanabiGui.close()
                self.notice.setText(notice)

                self.hintTokenList[self.gm.getHintToken()].setText("X")
                if self.gm.getHintToken():
                    pass
                else:
                    self.btnGiveHint.setEnabled(False)
Ejemplo n.º 4
0
    def discardCard(self, id):
        '''
        :param id: 몇 번째 카드를 버릴 건지
        :return: 버릴 카드 정보 반환
        '''
        for button in self.buttonGroup.buttons():
            if button is self.buttonGroup.button(id):
                # print("{}번 플레이어가 {}번째 카드를 버렸습니다.".format(self.gm.currentPlayerIndex, id + 1)) # DEBUG

                # 버려진 카드
                cardDiscarded = self.gm.playerDecks[self.gm.currentPlayerIndex].getCardOrNone(id)

                # 게임 진행
                self.gm.doActionDiscard(Action(2, id))

                # 새로 표시할 카드
                card = self.gm.playerDecks[self.gm.currentPlayerIndex].getCardOrNone(id)

                if card == None:
                    self.deckList[self.gm.currentPlayerIndex][id].setText("None")
                    SetCardDesign("mine", self.deckList[self.gm.currentPlayerIndex][id])
                else:
                    # 현재 하나의 gui 에서 플레이할 때 확이하기 위해 남겨둠. 추후 서버 통합시 유저의 카드 확인 불가.
                    self.deckList[self.gm.currentPlayerIndex][id].setText(str(card))
                    SetCardDesign(card.getColor(), self.deckList[self.gm.currentPlayerIndex][id])

                # 덱이 비지 않았다면
                if not self.gm.isCardsEmpty():
                    notices = ("%d번 플레이어가 %s 카드를 버렸습니다.\n 힌트 토큰이 하나 증가합니다. (8 이상이면 증가하지 않음)" %
                               (self.gm.currentPlayerIndex, str(cardDiscarded)))
                # 덱이 비었다면
                else:
                    notices = ("%d번 플레이어가 %s 카드를 버렸습니다.\n 힌트 토큰이 하나 증가합니다. (8 이상이면 증가하지 않음)\n "
                               "카드가 전부 떨어졌습니다. 다음 %d번 플레이어의 차례를 마치면 게임이 끝납니다." %
                               (self.gm.currentPlayerIndex, str(cardDiscarded), (self.gm.currentPlayerIndex + 3) % 4))

                # notice 갱신
                self.notice.setText(notices)

                # 힌트 주기 버튼 갱신
                self.btnGiveHint.setEnabled(True)

                # 힌트 토큰 갱신
                self.hintTokenList[self.gm.getHintToken() - 1].setText("O")

                # 남은 카드 장수 갱신
                self.remainDeck.setText("남은 카드 \n%d" % len(self.gm.cards))

                # thrownCard 갱신
                self.thrownCardList[self.colorDict[cardDiscarded.getColor()]][cardDiscarded.getNumber() - 1].\
                    setText(str(self.gm.getDiscardedCardCounter(cardDiscarded.getColor())[cardDiscarded.getNumber()]))

                # 게임 진행
                self.gm.nextTurn()
                self.close()
Ejemplo n.º 5
0
    def doActionPlay(self, action: Action):
        """
        카드내기 Action 을 수행하는 함수
        :param action: 수행할 action. type 은 무조건 1이어야 한다.
        :return: play 에 성공했는지 여부를 반환한다. 카드를 내는데 성공하면 True, 실패하면 False
        """
        assert action.getActionType() == 1, "<play> must be action type 1"

        playerDeck = self.playerDecks[self.currentPlayerIndex]
        cardIndex = action.getCardIndex()

        card = playerDeck.getCardOrNone(cardIndex)
        playedCards = self.getPlayedCards(card.getColor())

        print("%d번 플레이어가 %s 카드를 냈습니다." %
              (self.currentPlayerIndex, card))  # DEBUG
        if card.getNumber() - 1 == len(
                playedCards):  # 해당색의 카드를 카드를 줄지어 낼 수 있는 경우
            playedCards.append(card)
            didPlay = True
            print("Play 성공!")  # DEBUG
        else:
            discardedCardCounter = self.getDiscardedCardCounter(
                card.getColor())
            discardedCardCounter[card.getNumber()] += 1
            print("Play 실패! 라이프 토큰이 하나 감소합니다.")  # DEBUG
            self.decreaseLifeToken()
            didPlay = False

        playerDeck.useCard(cardIndex)
        if self.isGameEnd():
            return

        if not self.isCardsEmpty():
            self.giveOneCard(self.currentPlayerIndex)
            # print("%d번 플레이어가 새로운 카드를 받았습니다." % self.currentPlayerIndex)  # DEBUG
            if self.isCardsEmpty():
                if self.lastPlayerIndex < 0:
                    self.lastPlayerIndex = self.currentPlayerIndex
                    # print("카드가 전부 떨어졌습니다. 다음 %d번 플레이어의 차례를 마치면 게임이 끝납니다." % (self.currentPlayerIndex - 1))  # DEBUG

        return didPlay
Ejemplo n.º 6
0
    def doActionHint(self, action: Action):
        """
        힌트주기 Action 을 수행하는 함수
        :param action: 수행할 action. type 은 무조건 3이어야 한다.
        :return: 힌트: Hint, 힌트 대상 인덱스: int, 힌트에 해당하는 카드 인덱스 리스트: List
        """
        assert action.getActionType() == 3, "<hint> must be action type 3"

        targetIndex = action.getTargetIndex()
        assert targetIndex is not self.currentPlayerIndex
        correspondedIndexes = []

        for i in range(4):
            card = self.playerDecks[targetIndex].getCardOrNone(i)
            if card is not None:
                if card.isCorrespondedHint(action.getHint()):
                    correspondedIndexes.append(i)

        self.decreaseHintToken()
        return action.getHint(), correspondedIndexes
Ejemplo n.º 7
0
def gametestManual():

    gm = GameManager(initCards(5), 0, 0)
    gm.client.connectWithServer()
    gm.distributeCards()
    printBoard(gm)

    while True:
        a = gm.client.run()
        print(a)

        if len(a)==3:
            if a[1] in ['1','2','3','4','5']:
                gm.doAction(Action(int(a[0]), Hint(int(a[1])), int(a[2]) ))
            else:
                gm.doAction(Action(int(a[0]), Hint(str(a[1])), int(a[2])))

        elif len(a)==2:
            gm.doAction(Action(int(a[0]), int(a[1])))

        nextTurn(gm)
Ejemplo n.º 8
0
    def discardCard(self, _id):
        '''
        :param _id: 몇 번째 카드를 버릴 건지
        :return: 버릴 카드 정보 반환
        '''
        for button in self.buttonGroup.buttons():
            if button is self.buttonGroup.button(_id):
                # 버려진 카드
                cardDiscarded = self.gm.playerDecks[
                    self.gm.currentPlayerIndex].getCardOrNone(_id)

                # 게임 진행
                self.gm.doActionDiscard(Action(2, _id))

                # Notice update
                if not self.gm.isCardsEmpty():
                    notice = (
                        "%d번 플레이어가 %s 카드를 버렸습니다.\n 힌트 토큰이 하나 증가합니다. (8 이상이면 증가하지 않음)"
                        % (self.gm.currentPlayerIndex, str(cardDiscarded)))

                else:
                    notice = (
                        "%d번 플레이어가 %s 카드를 버렸습니다.\n 힌트 토큰이 하나 증가합니다. (8 이상이면 증가하지 않음)\n "
                        "카드가 전부 떨어졌습니다. 다음 %d번 플레이어의 차례를 마치면 게임이 끝납니다." %
                        (self.gm.currentPlayerIndex, str(cardDiscarded),
                         self.gm.lastPlayerIndex))

                # 힌트 주기 버튼 갱신
                self.btnGiveHint.setEnabled(True)

                # 게임 진행
                endFlag = self.gm.nextTurn()
                self.hanabiGUI.updateMainWindow()

                if endFlag == None:
                    pass
                if endFlag == 1 or self.gm.getLifeToken(
                ) == 0 or self.gm.currentPlayerIndex == self.gm.lastPlayerIndex:
                    print("카드 버리기로 게임 끝")  # DEBUG
                    notice = "게임 종료!\n" \
                             "최종 점수: %d점" % (self.gm.calculateScore())
                    time.sleep(3)
                    self.hanabiGui.close()

                # notice 갱신
                self.notice.setText(notice)
                self.close()
Ejemplo n.º 9
0
    def playCard(self, id):
        '''
                :param id: 몇 번째 카드를 낼 건지
                '''
        for button in self.buttonGroup.buttons():
            if button is self.buttonGroup.button(id):

                # 카드의 색 및 숫자
                playedCard = self.gm.playerDecks[self.gm.currentPlayerIndex].getCardOrNone(id)
                color = playedCard.getColor()
                number = playedCard.getNumber()
                # print("{}번 플레이어가 {}번째 카드를 냈습니다.".format(self.gm.currentPlayerIndex, id + 1)) # DEBUG
                '''
                카드 배치 성공 여부에 따라 행동이 달라짐. 
                성공했다면 playedCardList를, 실패했다면 discardedCardList 를 조작해주어야 함.
                우선 doAction 함수의 카드를 내는 부분에만 early return 을 넣어주어 성공 여부를 구분했음.
                1) 이를 개선할 방법이 있는지 알아봐야 함.
                2) 버려진 카드와 배치된 카드를 받아올 가장 효율적인 방법을 알아야 함.
                2-1) 현재까지 파악한 바로는 카드 색으로만 list 를 다루는 걸로 확인되는데, 숫자까지 구분해 digit 개념으로 리스트를 
                    따로 만들거나 ui 표시를 위한 리스트를 따로 만드는 것이 좋아보임.
                '''
                '''
                2020.08.17 updated
                기존의 doAction함수가 변경되면서 doActionPlay를 사용함. 
                입력값은 기존과 동일하고, 반환값으로 올바르게 냈는지 여부를 반환함.
                '''
                # 게임 진행 및 flag 설정
                flag = self.gm.doActionPlay(Action(1, id))
                self.client.sendAction("//" + "1" + str(id))
                # 카드 놓는 데에 성공했으면
                if flag:
                    # 낸 카드 ui 갱신
                    self.droppedCardList[self.colorDict[color]].setText(str(len(self.gm.getPlayedCards(color))))
                    # 남은 덱이 있으면
                    if not self.gm.isCardsEmpty():
                        notice = "Play 성공!\n" \
                                 "%d번째 플레이어가 %s 카드를 냈습니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다." % (self.gm.currentPlayerIndex, str(playedCard),
                                                               self.gm.currentPlayerIndex)
                    # 남은 덱이 없으면
                    else:
                        notice = "Play 성공!\n" \
                                 "%d번째 플레이어가 %s 카드를 냈습니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다\n" \
                                 "카드가 전부 떨어졌습니다. \n" \
                                 "다음 %d번째 플레이어의 차례를 마치면 게임을 끝냅니다." \
                                 % (self.gm.currentPlayerIndex, str(playedCard), self.gm.currentPlayerIndex,
                                   (self.gm.currentPlayerIndex + 3) % 4)


                # 카드 놓는 데에 실패했으면
                else:
                    # 버려진 카드 갱신
                    self.thrownCardList[self.colorDict[color]][number - 1].\
                        setText(str(self.gm.getDiscardedCardCounter(color)[number]))
                    self.lifeTokenList[self.gm.getLifeToken()].setText("X")
                    # 남은 덱이 있으면
                    if not self.gm.isCardsEmpty():
                        notice = "Play 실패!\n" \
                                 "라이프 토큰이 하나 감소합니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다.\n" % (self.gm.currentPlayerIndex)

                    # 남은 덱이 없으면
                    else:
                        notice = "Play 실패!\n" \
                                 "라이프 토큰이 하나 감소합니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다.\n" \
                                 "카드가 전부 떨어졌습니다.\n" \
                                 "다음 %d번째 플레이어의 차례를 마치면 게임을 끝냅니다." % (self.gm.currentPlayerIndex,
                                                                      (self.gm.currentPlayerIndex + 3) % 4)

                # 카드 낸 후 남은 카드 갱신
                self.remainDeck.setText("남은 카드 \n%d" % len(self.gm.cards))

                # 새로 표시할 카드
                card = self.gm.playerDecks[self.gm.currentPlayerIndex].getCardOrNone(id)
                if card == None:
                    self.deckList[self.gm.currentPlayerIndex][id].setText("None")
                    SetCardDesign("mine", self.deckList[self.gm.currentPlayerIndex][id])
                else:
                    # 현재 하나의 gui 에서 플레이할 때 확이하기 위해 남겨둠. 추후 서버 통합시 유저의 카드 확인 불가.
                    self.deckList[self.gm.currentPlayerIndex][id].setText(str(card))
                    SetCardDesign(card.getColor(), self.deckList[self.gm.currentPlayerIndex][id])

                endFlag = self.gm.nextTurn()

                if endFlag == None:
                    pass
                if endFlag == 1 or self.gm.getLifeToken() == 0 or self.gm.currentPlayerIndex == self.gm.lastPlayerIndex:
                    print("카드 내기로 게임 끝")  # DEBUG
                    notice = "게임 종료!\n" \
                             "최종 점수: %d점" % (self.gm.calculateScore())
                    self.notice.setText(notice)
                    self.close()

                    # 게임이 끝나면 행동 버튼 눌리지 않게 처리함. 추후 변경 필요
                    self.hanabiGui.isTurn = 0
                # 카드 내기 후 notice 갱신
                self.notice.setText(notice)

                self.close()
Ejemplo n.º 10
0
    def playCard(self, _id):
        for button in self.buttonGroup.buttons():
            if button is self.buttonGroup.button(_id):
                # 카드의 색 및 숫자
                playedCard = self.gm.playerDecks[
                    self.gm.currentPlayerIndex].getCardOrNone(_id)
                color = playedCard.getColor()
                number = playedCard.getNumber()
                # print("{}번 플레이어가 {}번째 카드를 냈습니다.".format(self.gm.currentPlayerIndex, _id + 1)) # DEBUG
                '''
                카드 배치 성공 여부에 따라 행동이 달라짐. 
                성공했다면 playedCardList를, 실패했다면 discardedCardList 를 조작해주어야 함.
                우선 doAction 함수의 카드를 내는 부분에만 early return 을 넣어주어 성공 여부를 구분했음.
                1) 이를 개선할 방법이 있는지 알아봐야 함.
                2) 버려진 카드와 배치된 카드를 받아올 가장 효율적인 방법을 알아야 함.
                2-1) 현재까지 파악한 바로는 카드 색으로만 list 를 다루는 걸로 확인되는데, 숫자까지 구분해 digit 개념으로 리스트를 
                    따로 만들거나 ui 표시를 위한 리스트를 따로 만드는 것이 좋아보임.
                '''
                '''
                2020.08.17 updated
                기존의 doAction함수가 변경되면서 doActionPlay를 사용함. 
                입력값은 기존과 동일하고, 반환값으로 올바르게 냈는지 여부를 반환함.
                '''
                # 게임 진행 및 flag 설정
                flag = self.gm.doActionPlay(Action(1, _id))
                # self.client.sendAction("//" + "1" + str(_id))

                # 카드 놓는 데에 성공했으면
                if flag:
                    # 낸 카드 ui 갱신
                    # 남은 덱이 있으면
                    if not self.gm.isCardsEmpty():
                        notice = "Play 성공!\n" \
                                 "%d번째 플레이어가 %s 카드를 냈습니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다." % (self.gm.currentPlayerIndex, str(playedCard),
                                                               self.gm.currentPlayerIndex)
                    # 남은 덱이 없으면
                    else:
                        notice = "Play 성공!\n" \
                                 "%d번째 플레이어가 %s 카드를 냈습니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다\n" \
                                 "카드가 전부 떨어졌습니다. \n" \
                                 "다음 %d번째 플레이어의 차례를 마치면 게임을 끝냅니다." \
                                 % (self.gm.currentPlayerIndex, str(playedCard), self.gm.currentPlayerIndex,
                                   (self.gm.currentPlayerIndex + 3) % 4)

                # 카드 놓는 데에 실패했으면
                else:
                    if not self.gm.isCardsEmpty():
                        notice = "Play 실패!\n" \
                                 "라이프 토큰이 하나 감소합니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다.\n" % (self.gm.currentPlayerIndex)

                    # 남은 덱이 없으면
                    else:
                        notice = "Play 실패!\n" \
                                 "라이프 토큰이 하나 감소합니다.\n" \
                                 "%d번 플레이어가 새로운 카드를 받았습니다.\n" \
                                 "카드가 전부 떨어졌습니다.\n" \
                                 "다음 %d번째 플레이어의 차례를 마치면 게임을 끝냅니다." % (self.gm.currentPlayerIndex,
                                                                      (self.gm.currentPlayerIndex + 3) % 4)

                endFlag = self.gm.nextTurn()

                if endFlag == None:
                    pass
                if endFlag == 1 or self.gm.getLifeToken(
                ) == 0 or self.gm.currentPlayerIndex == self.gm.lastPlayerIndex:
                    print("카드 내기로 게임 끝")  # DEBUG
                    notice = "게임 종료!\n" \
                             "최종 점수: %d점" % (self.gm.calculateScore())
                    self.notice.setText(notice)
                    self.close()

                    # 게임이 끝나면 행동 버튼 눌리지 않게 처리함. 추후 변경 필요
                    self.hanabiGui.isTurn = 0
                # 카드 내기 후 notice 갱신
                self.notice.setText(notice)
                self.hanabiGui.updateMainWindow()
                self.close()
Ejemplo n.º 11
0
def testGameS1():           # 라이프 토큰을 전부 소비하는 테스트
    gm = GameManager(initCards(5), 0, 2)
    gm.distributeCards()
    printBoard(gm)
    gm.doAction(Action(3, Hint(1), 3))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(5), 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("B"), 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(2), 1))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(2), 1))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 1))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 0))
Ejemplo n.º 12
0
def testGame2():            # 25점 만점 테스트
    gm = GameManager(initCards(5), 0, 0)
    gm.distributeCards()
    printBoard(gm)

    gm.doAction(Action(3, Hint(2), 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(3), 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("B"), 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("R"), 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("R"), 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("R"), 2))        # 힌트가 0이 되는 지점 다음 순서에 힌트사용시 오류발생 확인

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 3))       # 여기서 플레이가 끝나고 점수가 나와야한다. 점수 산출이 이상하였지만 수정

    nextTurn(gm)
Ejemplo n.º 13
0
def testGame1():            # 일반적인 게임 플레이
    gm = GameManager(initCards(3), 0, 0)
    gm.distributeCards()
    printBoard(gm)

    gm.doAction(Action(3, Hint(1), 1))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 3))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("B"), 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 2))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 0))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("G"), 2))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 0))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(5), 3))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(5), 0))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(2), 1))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(2, 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(3), 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(2), 2))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("G"), 2))

    nextTurn(gm)
    gm.doAction(Action(2, 1))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(2), 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("W"), 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("Y"), 2))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(3), 3))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 1))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(3), 1))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(2), 3))

    nextTurn(gm)
    gm.doAction(Action(1, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(3), 1))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(4), 0))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("Y"), 3))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(4), 3))

    nextTurn(gm)
    gm.doAction(Action(2, 2))

    nextTurn(gm)
    gm.doAction(Action(1, 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(5), 1))

    nextTurn(gm)
    gm.doAction(Action(1, 3))

    nextTurn(gm)
Ejemplo n.º 14
0
def testGameS2():           # 버리기만 하는 테스트
    gm = GameManager(initCards(1), 3, 1)
    gm.distributeCards()
    printBoard(gm)
    gm.doAction(Action(3, Hint(1), 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint("G"), 0))

    nextTurn(gm)
    gm.doAction(Action(3, Hint(1), 1))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)
    gm.doAction(Action(2, 3))

    nextTurn(gm)