Пример #1
0
def gameMain():
    word = Word('words.txt')
    guess = Guess(word.randFromDB())
    hangman = Hangman()

    while hangman.remainingLives > 0:

        display = hangman.currentShape()
        print(display)
        display = guess.displayCurrent()
        print('Current: ' + display)
        display = guess.displayGuessed()
        print('Already Used: ' + display)

        guessedChar = input('Select a letter: ')
        if len(guessedChar) != 1:
            print('One character at a time!')
            continue
        if guessedChar in guess.guessedChars:
            print('You already guessed \"' + guessedChar + '\"')
            continue

        success = guess.guess(guessedChar)
        if success == False:
            hangman.decreaseLife()

        if guess.finished() == True:
            print('**** ' + guess.displayCurrent() + ' ****')
            print('Success')
            break
    else:
        print(hangman.currentShape())
        print('word [' + guess.secretWord + ']')
        print('guess [' + guess.displayCurrent() + ']')
        print('Fail')
Пример #2
0
def gameMain():
    word = Word('words.txt')
    guess = Guess(word.randFromDB())
    hangman = Hangman()

    while hangman.remainingLives > 0:

        display = hangman.currentShape()
        print(display)
        display = guess.displayCurrent()
        print('Current: ' + display)
        display = guess.displayGuessed()
        print('Already Used: ' + display)

        success = guess.guess(getChar())
        if success == 1:
            continue
        elif success == 2:
            continue
        elif success == False:
            hangman.decreaseLife()
        
        if guess.finished():
            break

    if guess.finished() == True:
        print('**** ' + guess.displayCurrent() + ' ****')
        print('Success')
    else:
        print(hangman.currentShape())
        print('word [' + guess.secretWord + ']')
        print('guess [' + guess.displayCurrent() + ']')
        print('Fail')
Пример #3
0
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.h = Hangman()

    def tearDown(self):
        pass

    def testCurrentShape(self):
        for i in range(len(self.h.text) - 1, 0, -1):
            self.assertEqual(self.h.currentShape(), self.h.text[i])
            if not i == 0: self.h.decreaseLife()
Пример #4
0
def gameMain():
    word = Word('words.txt')
    guess = Guess(word.randFromDB())

    finished = False
    hangman = Hangman()

    print(hangman.currentShape())
    print(guess.displayGuessed())
    while hangman.is_live():
        guessedChar = input('Select a letter: ')
        system('clear')
        if len(guessedChar) != 1:
            print(hangman.currentShape())
            print(guess.displayCurrent())
            print("tried : [" + guess.displayGuessed() + "]")
            print('One character at a time!')
            continue
        if guess.is_usedChar(guessedChar):
            print(hangman.currentShape())
            print(guess.displayCurrent())
            print("tried : [" + guess.displayGuessed() + "]")
            print('You already guessed \"' + guessedChar + '\"')
            continue

        correct = guess.guess(guessedChar)
        if not correct:
            hangman.decreaseLife()

        if guess.is_finish():
            finished = True
            break

        print(hangman.currentShape())
        print(guess.displayCurrent())
        print("tried : [" + guess.displayGuessed() + "]")


    if finished:
        print(hangman.currentShape())
        print('Success' + '[' + guess.displayGuessWord() + ']')
    else:
        print(hangman.currentShape())
        print('word [' + guess.displayGuessWord() + ']')
        print('guess [' + guess.displayCurrent() + ']')
        print('Fail')
Пример #5
0
def gameMain():
    word = Word('words.txt')
    guess = Guess(word.randFromDB())

    finished = False
    hangman = Hangman()

    while hangman.remainingLives > 0:

        display = hangman.currentShape()
        print(display)
        guess.displayCurrent()
        print("used letter: ")
        print()
        for i in string.ascii_lowercase:
            if i in guess.guessedChars:
                print(colored(i, 'red'), end=' ')
            else:
                print(colored(i, 'green'), end=' ')
        print()
        print()

        guessedChar = input('Select a letter: ')
        if len(guessedChar) != 1:
            print('One character at a time!')
            continue
        if guessedChar in guess.guessedChars:
            print('You already guessed \"' + guessedChar + '\"')
            continue

        success = guess.guess(guessedChar)
        print(success)
        if not success:
            hangman.decreaseLife()
        if guess.finished():
            break

    if guess.finished():
        print(guess.displayCurrent())
        print('Success')
    else:
        print(hangman.currentShape())
        print(guess.secretWord)
        guess.displayCurrent()
        print('Fail')
Пример #6
0
    def gameMain():
        word = Word('words.txt')
        guess = Guess(word.randFromDB())

        print('%d words in DB' % word.count)

        finished = False
        hangman = Hangman()

        while hangman.remainingLives > 0:

            display = hangman.currentShape()
            print(display)
            display = guess.displayCurrent()
            print('Current: ' + display)
            display = guess.displayGuessed()
            print('Already Used: ' + display)

            guessedChar = input("Select a Letter: ")

            if len(guessedChar) == 1:
                if 65 <= ord(guessedChar) <= 90 or 97 <= ord(
                        guessedChar) <= 122:
                    if 65 <= ord(guessedChar) <= 90:
                        guessedChar = chr(ord(guessedChar) + 32)
                    if guessedChar not in guess.used_set:
                        success = guess.guess(guessedChar)
                        if not success:
                            hangman.decreaseLife()

            finished = guess.finished()
            if finished:
                break

        if finished:
            print('Success')
            print('word [' + guess.word + ']')
        else:
            print('word [' + guess.word + ']')
            print("Guess:", end=" ")
            for i in range(len(guess.current)):
                print(guess.current[i], end=" ")
            print()
            print('Fail')
Пример #7
0
class TestHangman(unittest.TestCase):
    def setup(self):
        pass

    def tearDown(self):
        pass

    def testDecreaseLife(self):
        self.g1 = Hangman()
        self.assertEqual(self.g1.remainingLives, 6)
        self.g1.decreaseLife()
        self.assertEqual(self.g1.remainingLives, 5)

    def testCurrentShape(self):
        self.g1 = Hangman()
        self.assertEqual(self.g1.currentShape(), self.g1.text[6])
        self.g1.decreaseLife()
        self.g1.decreaseLife()
        self.assertEqual(self.g1.currentShape(), self.g1.text[4])
Пример #8
0
class TestHangman(unittest.TestCase):
    def setUp(self):
        self.hman = Hangman()

    def tearDown(self):
        pass

    def testDecreaseLife(self):
        remainingLives_prev = self.hman.remainingLives
        self.assertTrue(self.hman.remainingLives)
        self.hman.decreaseLife()
        self.assertNotEqual(remainingLives_prev, self.hman.remainingLives)

    def testCurrentShape(self):
        self.assertEqual(
            self.hman.currentShape(), '''\
   ____
  |    |
  |
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.hman.decreaseLife()
        self.assertEqual(
            self.hman.currentShape(), '''\
   ____
  |    |
  |    o
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
class TestHangman(unittest.TestCase):
    def setUp(self):
        self.h1 = Hangman()

    def tearDown(self):
        pass

    def testDecreaseLife(self):
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 5)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 4)

    def testCurrentShape(self):
        self.assertEqual(
            self.h1.text[0], '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   / \\
 _|_
|   |______
|          |
|__________|\
''')
        self.assertEqual(
            self.h1.text[1], '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   /
 _|_
|   |______
|          |
|__________|\
''')
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.g1 = Guess('default')
        self.g2 = Hangman()

    def tearDown(self):
        pass

    def testDisplayCurrent(self):
        self.assertEqual(self.g1.currentStatus, '_e_____')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')

        self.g1.guess('a')
        self.assertEqual(self.g1.currentStatus, '_e_a___')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ _ ')

        self.g1.guess('t')
        self.assertEqual(self.g1.currentStatus, '_e_a__t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ t ')

        self.g1.guess('u')
        self.assertEqual(self.g1.currentStatus, '_e_au_t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')

        self.g1.guess('f')
        self.assertEqual(self.g1.currentStatus, '_efau_t')
        self.assertEqual(self.g1.displayCurrent(), '_ e f a u _ t ')

        self.g1.guess('d')
        self.assertEqual(self.g1.currentStatus, 'defau_t')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u _ t ')

        self.g1.guess('l')
        self.assertEqual(self.g1.currentStatus, 'default')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u l t ')

    def testDisplayGuessed(self):
        self.assertEqual(self.g1.displayGuessed(), ' e n ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayGuessed(), ' a e n ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t u ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayGuessed(), ' a d e n t u ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f n t u ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f l n t u ')

    def testDecreaseLife(self):
        self.assertEqual(self.g2.remainingLives, 6)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 5)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 4)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 3)
Пример #11
0
class TestHangman(unittest.TestCase):
    def setUp(self):
        self.h1 = Hangman()

    # 기본 목숨은 6개 text = 7개, text-1 = 목숨
    def testDecreaseLife(self):  # DecreaseLife에 대한 테스트
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 5)

    def testCurrentShape(self):  #CurrentShape에 대한 테스트
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
Пример #12
0
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.h1 = Hangman()
        self.h2 = Hangman()

    def tearDown(self):
        pass


    #생성자확인
    def testConstruct(self):
        self.assertEqual(self.h1.remainingLives, 6)

    def testDecreaseLife(self):
        test_life = 6
        #일부러 기존횟수보다 오버해서 테스트, indexOutLange 상황가정
        #remainingLive가 0미만이 되지않도록 수정했음
        for i in range(10):
            self.assertEqual(self.h1.remainingLives, test_life)
            self.assertEqual(self.h1.currentShape(), Hangman.text[test_life])
            self.h1.decreaseLife()

            if test_life > 0:
                test_life -= 1
Пример #13
0
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.g1 = Guess('default')
        self.g2 = Hangman()

    def tearDown(self):
        pass

    def testDisplayCurrent(self):
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ _ ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('1')  # 1일때는 영어가 아니므로 출력이 되면 안된다.
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('&')  # & 기호일때도 영어가 아니므로 출력이 안된다.
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')

    def testDisplayGuessed(self):
        self.assertEqual(self.g1.displayGuessed(), ' e n ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayGuessed(), ' a e n ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t u ')
        self.g1.guess('1')
        self.assertEqual(self.g1.displayGuessed(), ' 1 a e n t u ')
        self.g1.guess('&')
        self.assertEqual(self.g1.displayGuessed(), ' & 1 a e n t u ')

    def testDecreaseLife(self):
        self.assertEqual(self.g2.remainingLives, 7)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 6)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 5)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 4)
        self.g2.decreaseLife()
        self.assertEqual(self.g2.remainingLives, 3)
Пример #14
0
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.g1 = Guess('default')
        self.g2 = Guess('access')  # word that has same letters
        self.h1 = Hangman()
        self.w1 = Word('words.txt')

    def tearDown(self):
        pass

    def testDisplayCurrent(self):
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ _ ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('k')  # letter not in 'default'
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('a')  # already guessed letter (not processed in main)
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayCurrent(), 'd e _ a u _ t ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u _ t ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u l t ')

        self.assertEqual(self.g2.displayCurrent(), '_ _ _ e _ _ ')
        self.g2.guess('a')
        self.assertEqual(self.g2.displayCurrent(), 'a _ _ e _ _ ')
        self.g2.guess('s')
        self.assertEqual(self.g2.displayCurrent(), 'a _ _ e s s ')

    def testDisplayGuessed(self):
        self.assertEqual(self.g1.displayGuessed(), ' e n ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayGuessed(), ' a e n ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t u ')
        self.g1.guess('k')  # letter not in 'default'
        self.assertEqual(self.g1.displayGuessed(), ' a e k n t u ')
        self.g1.guess('a')  # already guessed letter (not processed in main)
        self.assertEqual(self.g1.displayGuessed(), ' a e k n t u ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayGuessed(), ' a d e k n t u ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f k n t u ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f k l n t u ')

        self.assertEqual(self.g2.displayGuessed(), ' e n ')
        self.g2.guess('a')
        self.assertEqual(self.g2.displayGuessed(), ' a e n ')
        self.g2.guess('s')
        self.assertEqual(self.g2.displayGuessed(), ' a e n s ')

    def testGuess(self):
        self.assertEqual(self.g1.guessedChars, {'e', 'n', ''})
        self.assertEqual(self.g1.currentStatus, '_e_____')
        self.assertTrue(self.g1.guess('a'))
        self.assertEqual(self.g1.guessedChars, {'a', 'e', 'n', ''})
        self.assertEqual(self.g1.currentStatus, '_e_a___')
        self.assertTrue(self.g1.guess('f'))
        self.assertEqual(self.g1.guessedChars, {'a', 'e', 'f', 'n', ''})
        self.assertEqual(self.g1.currentStatus, '_efa___')
        self.assertFalse(self.g1.guess('k'))  # letter not in 'default'
        self.assertEqual(self.g1.guessedChars, {'a', 'e', 'f', 'k', 'n', ''})
        self.assertEqual(self.g1.currentStatus, '_efa___')

        self.assertEqual(self.g2.guessedChars, {'e', 'n', ''})
        self.assertEqual(self.g2.currentStatus, '___e__')
        self.assertTrue(self.g2.guess('a'))
        self.assertEqual(self.g2.guessedChars, {'a', 'e', 'n', ''})
        self.assertEqual(self.g2.currentStatus, 'a__e__')
        self.assertTrue(self.g2.guess('s'))
        self.assertEqual(self.g2.guessedChars, {'a', 'e', 'n', 's', ''})
        self.assertEqual(self.g2.currentStatus, 'a__ess')

    def testFinished(self):
        testList = ['d', 'e', 'f', 'a', 'u', 'l', 't']
        for letter in testList:
            self.g1.guess(letter)
        self.assertTrue(self.g1.finished())

    def testHangman(self):
        self.assertEqual(self.h1.remainingLives, 6)
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 5)
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')

    def testWord(self):
        self.assertEqual(self.w1.count, 19184)
        self.assertIn(self.w1.randFromDB(), self.w1.words)
Пример #15
0
class HangmanGame(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Arial')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 8)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('이범석의 행맨')

        # Start a new game on application launch!
        self.startGame()

    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB())
        self.gameOver = False

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            self.message.setText("실패했습니다.")
            return True

        if len(guessedChar) != 1:
            self.message.setText("1글자만 입력할 수 있습니다.")
            return True

        if guessedChar in self.guess.guessedChars:
            self.message.setText('이미 \"' + guessedChar + '\"' + "글자를 입력하였습니다.")
            return True

        if not guessedChar.isalpha():
            self.message.setText("올바른 알파벳을 입력해 주세요.")
            return True
        guessedChar = guessedChar.lower()

        success = self.guess.guess(guessedChar)
        if not success:
            self.hangman.decreaseLife()

        self.message.setText("Life:" + str(self.hangman.getRemainingLives()))
        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())

        if self.guess.finished():
            self.message.setText("성공!")
            self.gameOver = True

        elif self.hangman.getRemainingLives() == 0:
            self.message.setText("실패!" + " 정답은 : " + self.guess.secretWord)
            self.gameOver = True
Пример #16
0
class Testhangman(unittest.TestCase):

    def setUp(self):
        self.g2 = Hangman()
    def testcurrentShape(self):
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.decreaseLife()
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.decreaseLife()
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |    |
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.decreaseLife()
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.decreaseLife()
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.decreaseLife()
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   /
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.decreaseLife()
        self.assertEqual(self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   / \\
 _|_
|   |______
|          |
|__________|\
''')
Пример #17
0
class TestHangman(unittest.TestCase):
    def setUp(self):
        self.h1 = Hangman()

    def tearDown(self):
        pass

    def testInit(self):
        self.assertEqual(self.h1.remainingLives, 6)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 5)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 4)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 3)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 2)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 1)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 0)

    def testCurrentShape(self):
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |
  |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |    |
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   /
 _|_
|   |______
|          |
|__________|\
''')
        self.h1.decreaseLife()
        self.assertEqual(
            self.h1.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   / \\
 _|_
|   |______
|          |
|__________|\
''')
Пример #18
0
class HangmanGame(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database        
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 8)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        #self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()


    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB())
        self.gameOver = False

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            # 메시지 출력하고 - message.setText() - 리턴
            self.message.setText('Game Over')
            return

        # 입력의 길이가 1 인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        if len(guessedChar) != 1:
            self.message.setText('Please enter only one character!')
            return

        # 입력한 문자가 대문자라면 소문자로 변경
        # (주석 처리된 코드 : 아스키 코드표는 빈칸을 취급하지 않기 때문에 이 조건문이 맨 앞에 있으면 오류가 뜸)
        #if 65 <= ord(guessedChar) <= 90:
        #    guessedChar = chr(ord(guessedChar) + 32)
        if guessedChar.upper():
            guessedChar = guessedChar.lower()

        # 이미 사용한 글자인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        if guessedChar in self.guess.guessedChars:
        #if guessedChar in self.guess.displayGuessed():
            self.message.setText('You already guessed \"' + guessedChar + '\"')
            return

        # 알파벳 이외의 다른 모든 경우의 수를 차단
        # (아스키 코드표는 빈칸을 취급하지 않기 때문에 이 조건문이 맨 앞에 있으면 오류가 뜸)
        if ord(guessedChar) <= 64 or 91 <= ord(guessedChar) <= 96 or 123 <= ord(guessedChar):
            self.message.setText('Please enter the alphabet!')
            return

        success = self.guess.guess(guessedChar)
        if success == False:
            # 남아 있는 목숨을 1 만큼 감소
            self.hangman.decreaseLife()
            # 메시지 출력
            self.message.setText('Your guess is wrong...')

        # hangmanWindow 에 현재 hangman 상태 그림을 출력
        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        # currentWord 에 현재까지 부분적으로 맞추어진 단어 상태를 출력
        self.currentWord.setText(self.guess.displayCurrent())
        # guessedChars 에 지금까지 이용한 글자들의 집합을 출력
        self.guessedChars.setText(self.guess.displayGuessed())

        if self.guess.finished():
            # 메시지 ("Success!") 출력하고, self.gameOver 는 True 로
            self.message.setText('Success!')
            self.gameOver = True

        elif self.hangman.getRemainingLives() == 0:
            # 메시지 ("Fail!" + 비밀 단어) 출력하고, self.gameOver 는 True 로
            self.message.setText('Fail! ' + self.guess.secretWord)
            self.gameOver = True
Пример #19
0
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.g1 = Guess('default')
        self.gH = Hangman()
        self.gW = Word('words.txt')

    def tearDown(self):
        pass

    def testDisplayCurrent(self):
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')
        self.g1.guess('v')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ _ ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayCurrent(), 'd e _ a u _ t ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u _ t ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u l t ')

    def testDisplayGuessed(self):
        self.assertEqual(self.g1.displayGuessed(), ' e n ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayGuessed(), ' a e n ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t u ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayGuessed(), ' a d e n t u ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f n t u ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f l n t u ')

    def testHangman(self):
        self.assertEqual(self.gH.remainingLives, 6)
        self.gH.decreaseLife()
        self.assertEqual(self.gH.remainingLives, 5)
        self.gH.decreaseLife()
        self.assertEqual(self.gH.remainingLives, 4)
        self.gH.decreaseLife()
        self.assertEqual(self.gH.remainingLives, 3)
        self.gH.decreaseLife()
        self.assertEqual(self.gH.remainingLives, 2)
        self.gH.decreaseLife()
        self.assertEqual(self.gH.remainingLives, 1)
        self.gH.decreaseLife()
        self.assertEqual(self.gH.remainingLives, 0)

    def testReturn(self):
        self.assertEqual(self.g1.guess('e'), True)
        self.assertEqual(self.g1.guessedChars, {'', 'e', 'n'})
        self.assertEqual(self.g1.currentStatus, '_e_____')
        self.g1.guess('b')
        self.assertEqual(self.g1.guess('b'), False)
        self.assertEqual(self.g1.guessedChars, {'', 'b', 'e', 'n'})
        self.assertEqual(self.g1.currentStatus, '_e_____')
        self.g1.guess('a')
        self.assertEqual(self.g1.guess('a'), True)
        self.assertEqual(self.g1.guessedChars, {'', 'a', 'b', 'e', 'n'})
        self.assertEqual(self.g1.currentStatus, '_e_a___')
        self.g1.guess('t')
        self.assertEqual(self.g1.guess('t'), True)
        self.assertEqual(self.g1.guessedChars, {'', 'a', 'b', 'e', 't', 'n'})
        self.assertEqual(self.g1.currentStatus, '_e_a__t')
        self.g1.guess('u')
        self.assertEqual(self.g1.guess('u'), True)
        self.assertEqual(self.g1.guessedChars,
                         {'', 'a', 'b', 'e', 't', 'u', 'n'})
        self.assertEqual(self.g1.currentStatus, '_e_au_t')
        self.g1.guess('d')
        self.assertEqual(self.g1.guess('d'), True)
        self.assertEqual(self.g1.guessedChars,
                         {'', 'a', 'b', 'd', 'e', 't', 'u', 'n'})
        self.assertEqual(self.g1.currentStatus, 'de_au_t')
        self.g1.guess('f')
        self.assertEqual(self.g1.guess('f'), True)
        self.assertEqual(self.g1.guessedChars,
                         {'', 'a', 'b', 'd', 'e', 'f', 't', 'u', 'n'})
        self.assertEqual(self.g1.currentStatus, 'defau_t')
        self.g1.guess('l')
        self.assertEqual(self.g1.guess('l'), True)
        self.assertEqual(self.g1.guessedChars,
                         {'', 'a', 'b', 'd', 'e', 'f', 't', 'u', 'n', 'l'})
        self.assertEqual(self.g1.currentStatus, self.g1.secretWord)

    def testWord(self):
        self.assertEqual(self.gW.test(), 'default')
Пример #20
0
class HangmanGame(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        self.FONTSIZE = font.pointSize() + 8
        font.setPointSize(font.pointSize() + 8)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()

    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB(30))
        self.gameOver = False

        self.charInput.setDisabled(False)
        self.guessButton.setDisabled(False)
        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()
        self.message.setText("새 게임!")
        font = self.currentWord.font()
        if len(self.currentWord.text()) > 20:
            font.setPointSize(self.FONTSIZE -
                              (int((len(self.currentWord.text()) - 20) / 4) +
                               3))
            self.currentWord.setFont(font)
        else:
            font.setPointSize(self.FONTSIZE)
            self.currentWord.setFont(font)
        self.currentWord.setText(self.guess.displayCurrent())

    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver:
            # 메시지 출력하고 - message.setText() - 리턴
            self.message.setText("이미 끝난 게임입니다.")
            return

        # 입력의 길이가 1 인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        elif len(guessedChar) != 1:
            self.message.setText("알파벳 한글자만 입력하세요.")
            return
        # 이미 사용한 글자인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        elif guessedChar in self.guess.guessedChars:
            self.message.setText("이미 입력된 단어 " + guessedChar)
            return
        success = self.guess.guess(guessedChar)
        if not success:
            # 남아 있는 목숨을 1 만큼 감소
            # 메시지 출력
            self.hangman.decreaseLife()
            self.message.setText(guessedChar + " 는 단어에 없습니다.")

        # hangmanWindow 에 현재 hangman 상태 그림을 출력
        # currentWord 에 현재까지 부분적으로 맞추어진 단어 상태를 출력
        # guessedChars 에 지금까지 이용한 글자들의 집합을 출력

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())

        if self.guess.finished():
            # 메시지 ("Success!") 출력하고, self.gameOver 는 True 로
            self.message.setText("축하합니다!")
            self.charInput.setDisabled(True)
            self.guessButton.setDisabled(True)
            self.gameOver = True

        elif self.hangman.getRemainingLives() == 0:
            # 메시지 ("Fail!" + 비밀 단어) 출력하고, self.gameOver 는 True 로
            self.message.setText("졌습니다. 정답은 " + self.guess.secretWord)
            self.charInput.setDisabled(True)
            self.guessButton.setDisabled(True)
            self.gameOver = True
Пример #21
0
class HangmanGame(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database        
        self.word = Word('words.txt',15) # 최소 15자 이상의 단어만

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 6) # 8로 하면 단어가 넘쳐서 6으로 수정
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 30) # CurrentWord Textbox 의 길이 2->30 수정

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()


    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB())
        self.gameOver = False

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()


    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            self.message.setText("END") #추가:메시지 출력하고 - message.setText() - 리턴
            return

        if len(guessedChar) != 1:
            self.message.setText("하나의 문자만 입력이 가능합니다.") #추가: self.message.setText("하나의 문자만 입력이 가능합니다.")

            return

        if guessedChar in self.guess.guessedChars:
            self.message.setText("시도 해본 문자입니다.") #추가:이미 사용한 글자인지를 판단하고, 아닌 경우 메시지 출력, 리턴
            return




        success = self.guess.guess(guessedChar)
        if success == False:
            self.hangman.decreaseLife()  # 남아 있는 목숨을 1 만큼 감소
            self.message.setText(guessedChar + '는 단어 안에 없습니다.')  #  메시지 출력

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())         # hangmanWindow 에 현재 hangman 상태 그림을 출력
        self.currentWord.setText(self.guess.displayCurrent())         # currentWord 에 현재까지 부분적으로 맞추어진 단어 상태를 출력
        self.guessedChars.setText(self.guess.displayGuessed())         # guessedChars 에 지금까지 이용한 글자들의 집합을 출력


        if self.guess.finished():
            self.message.setText("Success!")  # 메시지 ("Success!") 출력하고, self.gameOver 는 True 로
            self.gameOver = True


        elif self.hangman.getRemainingLives() == 0:
            self.message.setText("Fail! : " + self.guess.secretWord)
            self.gameOver = True
Пример #22
0
class TestHangman(unittest.TestCase):
    def setUp(self):
        self.h1 = Hangman()

    def tearDown(self):
        pass

    def testHangman(self):
        #처음 상태의 목숨 개수
        self.assertEqual(self.h1.remainingLives, 6)
        #점점 줄어드는 목숨
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 5)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 4)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 3)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 2)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 1)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 0)

    def testCurrentShape(self):
        self.assertEqual(self.h1.currentShape(),
                         self.h1.text[self.h1.remainingLives])
        self.h1.decreaseLife()
        self.assertEqual(self.h1.currentShape(), self.h1.text[5])
        self.h1.decreaseLife()
        self.assertEqual(self.h1.currentShape(), self.h1.text[4])
        self.h1.decreaseLife()
        self.assertEqual(self.h1.currentShape(), self.h1.text[3])
        self.h1.decreaseLife()
        self.assertEqual(self.h1.currentShape(), self.h1.text[2])
        self.h1.decreaseLife()
        self.assertEqual(self.h1.currentShape(), self.h1.text[1])
        self.h1.decreaseLife()
        self.assertEqual(self.h1.currentShape(), self.h1.text[0])
Пример #23
0
class HangmanGame(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.word = Word('words.txt')

        #Hangman 상태 표시
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        # 왼쪽 정렬 (그래야 올바르게 보임)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        #고정 폭(fixed-with) 글꼴을 이용.
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # hangmanLayout을 만들고 그 안에 위젯을 배치.
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)
        self.showRemainingLife = QLineEdit()
        self.showRemainingLife.setReadOnly(True)
        #status Layout 만들기.
        statusLayout = QGridLayout()

        #currentWord-사용자가 입력한 단어가 맞는지 표시
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)  #읽기 전용.사용자가 편집불가.
        self.currentWord.setAlignment(Qt.AlignCenter)  #가운데 정렬.
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 8)  #글꼴 크기.
        self.currentWord.setFont(font)
        # statusLayout에 위젯 배치.
        # (0,0,1,2)는 0행 0열 가로 1 세로 2
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        #guessedChars-사용자가 입력한 단어들 표시.
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        # statusLayout에 위젯 배치.
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        #message-상태를 알려주는 메세지를 보임.
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        # statusLayout에 위젯 배치.
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        #charInput-사용자가 단어를 입력할 칸.
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)  #3행 0열

        #guessButton-사용자가 단어를 입력하고 누를 버튼.
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        # statusLayout에 위젯 배치.
        statusLayout.addWidget(self.guessButton, 3, 1)  #3행 1열

        # newGameButton-새로운 게임을 다시 시작하기 위해 누를 버튼.
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)
        statusLayout.addWidget(self.showRemainingLife, 4, 1)
        #mainLayout을 만들고 위에서 구성한 두 레이아웃을 가로로 배치.
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)
        self.setWindowTitle('Hangman Game')

        self.startGame()

    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB(9))
        print(self.guess.secretWord)
        self.gameOver = False
        self.charInput.setReadOnly(False)
        self.hangmanWindow.setText(self.hangman.currentShape())
        #self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            self.message.setText("Game Over")

        if len(guessedChar) != 1:
            self.message.setText("Input wrong word")

        if guessedChar in self.guess.guessedChars:
            self.message.setText("Already used")

        success = self.guess.guess(guessedChar)
        if success == False:
            self.hangman.decreaseLife()
            self.hangmanWindow.setText(self.hangman.currentShape())
            self.currentWord.setText(self.guess.displayCurrent())
            self.guessedChars.setText(self.guess.displayGuessed())
            self.message.setText("No " + guessedChar + " in the word")
            self.showRemainingLife.setText("try : " +
                                           str(self.hangman.remainingLives))
        elif success == True:
            self.currentWord.setText(self.guess.displayCurrent())
            self.guessedChars.setText(self.guess.displayGuessed())
            self.message.setText(guessedChar + " is in the word!")
            self.showRemainingLife.setText("try : " +
                                           str(self.hangman.remainingLives))

        elif success == "alpha":
            self.message.setText("Input wrong value")

        if self.guess.finished():
            self.message.setText("Success!")
            self.gameOver = True
            self.charInput.setReadOnly(True)
            self.hangman.RemainingLives = 6

        if self.hangman.getRemainingLives() == 0:
            self.message.setText("Fail! " + self.guess.secretWord)
            self.gameOver = True
            self.charInput.setReadOnly(True)
            self.hangman.RemainingLives = 6
Пример #24
0
class HangmanGame(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database        
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
	self.currentWord.setFixedWidth(350)
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 8)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()


    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB(20))
        self.gameOver = False

        if len(self.guess.secretWord) >=10:
            font = self.currentWord.font()
            font.setPointSize(font.pointSize())
            self.currentWord.setFont(font)


        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            self.message.setText("게임이 끝났습니다.")

        if len(guessedChar) > 1:
            self.message.setText("한 글자만 입력하세요.")

        if guessedChar in self.guess.guessedChars:
            self.message.setText("이미 입력한 값 입니다.")
            self.hangman.decreaseLife()

        success = self.guess.guess(guessedChar)
        if success == False:
            if guessedChar == " ":
                self.message.setText("빈칸을 입력했습니다.")
            else:
                self.hangman.decreaseLife()
                self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
                self.currentWord.setText(self.guess.displayCurrent())
                self.guessedChars.setText(self.guess.displayGuessed())
                self.message.setText("틀렸습니다 다시 시도하세요.")

        if success == True:
            self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
            self.currentWord.setText(self.guess.displayCurrent())
            self.guessedChars.setText(self.guess.displayGuessed())

        if self.guess.finished():
            self.message.setText("Success!")
            self.gameOver = True


        elif self.hangman.getRemainingLives() == 0:
            self.message.setText("Fail : "+ self.guess.secretWord)
            self.gameOver = True
Пример #25
0
class HangmanGame(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        font.setBold(True)
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 10)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)

        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()

    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB(5, 9))
        self.gameOver = False

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def guessClicked(self):
        guessedChar = self.charInput.text().lower()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            self.message.setText('Game Over!')
            return
        if not str(guessedChar).isalpha():
            self.message.setText("only english")
            return
        if len(guessedChar) != 1:
            self.message.setText('One Character at a time!')
            return
        elif guessedChar in self.guess.guessedChars:
            self.message.setText('You already guessed \"' + guessedChar +
                                 "\"!")
            return

        success = self.guess.guess(guessedChar)
        if not success:
            self.hangman.decreaseLife()
            self.message.setText('There are no \"' + guessedChar + "\"!")
        else:
            self.message.setText('There are \"' + guessedChar + "\"!")

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())

        if self.guess.finished():
            self.message.setText('Success!')
            self.gameOver = True

        elif self.hangman.getRemainingLives() == 0:
            self.message.setText('Fail! ' + self.guess.secretWord)
            self.gameOver = True
class TestGuess(unittest.TestCase):

    def setUp(self):
        self.g1 = Guess('default')
        self.g2 = Guess('apple')
        self.h1 = Hangman()
        self.w1 = Word('words.txt')

    def tearDown(self):
        pass

    #guess
    def testGuess(self):
        self.assertTrue(self.g1.guess('d'))
        self.assertFalse(self.g1.guess('s'))

    def testFinished(self):
        self.assertFalse(self.g2.finished())
        self.g2.guess('a')
        self.assertFalse(self.g2.finished())
        self.g2.guess('p')
        self.assertFalse(self.g2.finished())
        self.g2.guess('l')
        self.assertTrue(self.g2.finished())

    def testFinished2(self):
        self.assertFalse(self.g2.finished())
        for i in 'apl':
            self.g2.guess(i)
        self.assertTrue(self.g2.finished())

    def testDisplayCurrent(self):
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ _ ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')

    def testDisplayGuessed(self):
        self.assertEqual(self.g1.displayGuessed(), ' e n ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayGuessed(), ' a e n ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t u ')

    #hangman
    def testDecreaseLife(self):
        self.assertEqual(self.h1.remainingLives, 6)
        self.h1.decreaseLife()
        self.assertEqual(self.h1.remainingLives, 5)

    def testCurrentShape(self):
        self.assertEqual(self.h1.currentShape(), self.h1.text[6])

    #word
    def testTest(self):
        self.assertEqual(self.w1.test(), 'default')

    def testRandFromDB(self):
        self.assertTrue(self.w1.randFromDB() in self.w1.words)
Пример #27
0
class HangmanGame(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        self.currentWord.setMinimumWidth(400)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 8)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()

    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB(0))
        self.gameOver = False

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            # 메시지 출력하고 - message.setText() - 리턴
            self.message.setText("Game Over...")
            return

        # 입력의 길이가 1 인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        if len(guessedChar) != 1:
            self.message.setText("You must input one charactor!")
            return

        # 입력된 문자가 알파벳이 아니면 처리하지 않음
        if not ord('a') <= ord(guessedChar) <= ord('z'):
            self.message.setText("You can input a-z")
            return

        # 이미 사용한 글자인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        if guessedChar in self.guessedChars.text():
            self.message.setText("You already input '%s'!" % guessedChar)
            return

        success = self.guess.guess(guessedChar)
        if success == False:
            # 남아 있는 목숨을 1 만큼 감소
            self.hangman.decreaseLife()
            # 메시지 출력
            if self.hangman.remainingLives > 1:
                self.message.setText("Wrong... %d lives left" %
                                     self.hangman.remainingLives)
            else:
                self.message.setText("Wrong... Only one life left")

        # hangmanWindow 에 현재 hangman 상태 그림을 출력
        self.hangmanWindow.setText(self.hangman.currentShape())

        # currentWord 에 현재까지 부분적으로 맞추어진 단어 상태를 출력
        self.currentWord.setText(self.guess.displayCurrent())

        # guessedChars 에 지금까지 이용한 글자들의 집합을 출력
        self.guessedChars.setText(self.guess.displayGuessed())

        if self.guess.finished():
            # 메시지 ("Success!") 출력하고, self.gameOver 는 True 로
            self.message.setText("Success!")
            self.gameOver = True
            pass

        elif self.hangman.getRemainingLives() == 0:
            # 메시지 ("Fail!" + 비밀 단어) 출력하고, self.gameOver 는 True 로
            self.currentWord.setText(self.guess.secretWord)
            self.message.setText("Fail!")
            self.gameOver = True
            pass
Пример #28
0
class HangmanGame(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Initialize word database        
        self.word = Word('words.txt')

        # Hangman display window
        self.hangmanWindow = QTextEdit()
        self.hangmanWindow.setReadOnly(True)
        self.hangmanWindow.setAlignment(Qt.AlignLeft)
        font = self.hangmanWindow.font()
        font.setFamily('Courier New')
        self.hangmanWindow.setFont(font)

        # Layout
        hangmanLayout = QGridLayout()
        hangmanLayout.addWidget(self.hangmanWindow, 0, 0)

        # Status Layout creation
        statusLayout = QGridLayout()

        # Display widget for current status
        self.currentWord = QLineEdit()
        self.currentWord.setReadOnly(True)
        self.currentWord.setAlignment(Qt.AlignCenter)
        font = self.currentWord.font()
        font.setPointSize(font.pointSize() + 8)
        self.currentWord.setFont(font)
        statusLayout.addWidget(self.currentWord, 0, 0, 1, 2)

        # Display widget for already used characters
        self.guessedChars = QLineEdit()
        self.guessedChars.setReadOnly(True)
        self.guessedChars.setAlignment(Qt.AlignLeft)
        self.guessedChars.setMaxLength(52)
        statusLayout.addWidget(self.guessedChars, 1, 0, 1, 2)

        # Display widget for message output
        self.message = QLineEdit()
        self.message.setReadOnly(True)
        self.message.setAlignment(Qt.AlignLeft)
        self.message.setMaxLength(52)
        statusLayout.addWidget(self.message, 2, 0, 1, 2)

        # Input widget for user selected characters
        self.charInput = QLineEdit()
        self.charInput.setMaxLength(1)
        statusLayout.addWidget(self.charInput, 3, 0)

        # Button for submitting a character
        self.guessButton = QToolButton()
        self.guessButton.setText('Guess!')
        self.guessButton.clicked.connect(self.guessClicked)
        statusLayout.addWidget(self.guessButton, 3, 1)

        # Button for a new game
        self.newGameButton = QToolButton()
        self.newGameButton.setText('New Game')
        self.newGameButton.clicked.connect(self.startGame)
        statusLayout.addWidget(self.newGameButton, 4, 0)

        # Layout placement
        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
        mainLayout.addLayout(hangmanLayout, 0, 0)
        mainLayout.addLayout(statusLayout, 0, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle('Hangman Game')

        # Start a new game on application launch!
        self.startGame()


    def startGame(self):
        self.hangman = Hangman()
        self.guess = Guess(self.word.randFromDB())

        font = self.currentWord.font()

        if len(self.guess.secretWord) > 13:
            #font.setPointSize(font.pointSize() - 8)
            font.setPointSize(8)
        else:
            #font.setPointSize(font.pointSize() + 8)
            font.setPointSize(12)

        self.currentWord.setFont(font)


        self.gameOver = False

        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape())
        self.currentWord.setText(self.guess.displayCurrent())
        self.guessedChars.setText(self.guess.displayGuessed())
        self.message.clear()

    def displayCurrentStatus(self):
        str = ''
        for i in self.guess.currentStatus:
            str += i
            str += ' '
        return str
    def displayGuessedChars(self):
        str = ''
        for i in self.guess.guessedChars:
            str += i
            str += ' '
        return str
    
    def guessClicked(self):
        guessedChar = self.charInput.text()
        self.charInput.clear()
        self.message.clear()

        if self.gameOver == True:
            # 메시지 출력하고 - message.setText() - 리턴
            self.message.setText("Game_Over")
            return "gameover"

        # 입력의 길이가 1 인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        if len(guessedChar) != 1:
            self.message.setText("Not a len 1 char")
            return "lengthError"
        # 이미 사용한 글자인지를 판단하고, 아닌 경우 메시지 출력, 리턴
        if guessedChar in self.guess.guessedChars:
            self.message.setText("Used char")
            return "Used char"

        success = self.guess.guess(guessedChar)
        if success == False:
            # 남아 있는 목숨을 1 만큼 감소
            self.hangman.decreaseLife() 
            # 메시지 출력
            self.message.setText(guessedChar +" not in word")

        # hangmanWindow 에 현재 hangman 상태 그림을 출력
        self.hangmanWindow.setPlaceholderText(self.hangman.currentShape()) 
        # currentWord 에 현재까지 부분적으로 맞추어진 단어 상태를 출력
        self.currentWord.setText(self.displayCurrentStatus())
        # guessedChars 에 지금까지 이용한 글자들의 집합을 출력
        self.guessedChars.setText(self.displayGuessedChars())

        if self.guess.finished():
            # 메시지 ("Success!") 출력하고, self.gameOver 는 True 로
            self.message.setText("Success!")
            self.gameOver = True
        elif self.hangman.getRemainingLives() == 0:
            # 메시지 ("Fail!" + 비밀 단어) 출력하고, self.gameOver 는 True 로
            self.message.setText("Fail" + self.word)
            self.gameOver = True
class TestGuess(unittest.TestCase):
    def setUp(self):
        self.g1 = Guess('default')
        self.g2 = Hangman(5)
        self.g3 = Word('words.txt')

    def tearDown(self):
        pass

    def testDisplayCurrent(self):
        self.assertEqual(self.g1.displayCurrent(), '_ e _ _ _ _ _ ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ _ ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a _ _ t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayCurrent(), '_ e _ a u _ t ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayCurrent(), 'd e _ a u _ t ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u _ t ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayCurrent(), 'd e f a u l t ')

    def testDisplayGuessed(self):
        self.assertEqual(self.g1.displayGuessed(), ' e n ')
        self.g1.guess('a')
        self.assertEqual(self.g1.displayGuessed(), ' a e n ')
        self.g1.guess('t')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t ')
        self.g1.guess('u')
        self.assertEqual(self.g1.displayGuessed(), ' a e n t u ')
        self.g1.guess('d')
        self.assertEqual(self.g1.displayGuessed(), ' a d e n t u ')
        self.g1.guess('f')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f n t u ')
        self.g1.guess('l')
        self.assertEqual(self.g1.displayGuessed(), ' a d e f l n t u ')

    def testDecreaseLife(self):
        self.assertEqual(self.g2.decreaseLife(), 4)
        self.assertEqual(self.g2.decreaseLife(), 3)
        self.assertEqual(self.g2.decreaseLife(), 2)
        self.assertEqual(self.g2.decreaseLife(), 1)

    def testCurrentShape(self):
        self.assertEqual(
            self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |    |
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.currentShape()
        self.assertEqual(
            self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.currentShape()
        self.assertEqual(
            self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.currentShape()
        self.assertEqual(
            self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   /
 _|_
|   |______
|          |
|__________|\
''')
        self.g2.currentShape()
        self.assertEqual(
            self.g2.currentShape(), '''\
   ____
  |    |
  |    o
  |   /|\\
  |    |
  |   / \\
 _|_
|   |______
|          |
|__________|\
''')

    def testTest(self):
        self.assertEqual(self.g3.test(), 'default')

    def testrandfromDB(self):
        self.assertEqual(self.g3.test(), 'default')