diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index b405d59..0000000 --- a/.gitpod.yml +++ /dev/null @@ -1,9 +0,0 @@ -image: gitpod/workspace-full-vnc -ports: - - port: 5900 - onOpen: ignore - - port: 6080 - onOpen: open-preview -tasks: - - init: pip3 install -r requirements.txt - command: python3 hangman.py diff --git a/README.md b/README.md index 8c5c73a..4248c63 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,70 @@ -# Hangman-Python -A simple hangman game made with python and pygame. This was made as a beginner pygame project in grade 11 (2017). +<프로젝트 설명서> -# Requirements -- Python 3.x -- pygame -# Run in GitPod +2조 -You can also run Hnagman in Gitpod, a free online dev environment for GitHub: +윤가영 이성은 홍민희 김서현 -If you're intersted in a paid subscription with GitPod use the coupon code: **TECHWITHTIM19** -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/techwithtim/Hangman/blob/master/hangman.py) + +1. 개요 + +2. 초기 오픈소스 + +3. 개발 과정 + +4. 구현 상태 + +5. 마무리 + + + + + + + +1. 개요 + + +소스 트리, 깃 배시 등 생소한 프로그램들을 사용해 구현을 하는 만큼, 우리가 결과물의 질 만큼 중요시 했던 것이 이러한 프로그램을 빠지는 팀원 없이 익히는 것과 모두가 적극적으로 아이디어를 내고 구현할 수 있게끔 하는 것이었다. 난이도가 높은 구상물을 제출한다 한들 특정 팀원의 역할 분담이 지나치게 치우친다거나 빠지는 이가 생기는 불상사가 생긴다면 이는 이번 프로젝트의 의의에 벗어나는 일이라고 생각했기 때문이다. 오픈 소스를 통한 팀별 개발인 만큼, 깃허브에 이미 구현이 되어있는 것들 중 누구에게나 생소하지 않고, 기본적인 틀은 완성되어있되 설정과 구성, 이벤트 등 팀별 구상을 통해 여러가지 기능을 추가할 수 있는 코드를 살펴보았다. 그중 가장 기본적이고 친숙한 형태의 행맨 게임을 찾을 수 있었다. + + + + +2. 초기 오픈소스 + + +초기 상태에서의 행맨 게임은 익히 알던 개념과 같이, 개발자가 미리 입력해둔 텍스트 프로그램이 실행되며 그 속의 단어나 문장이 추출되고 이를 실행자가 알파벳 버튼을 눌러 문제를 맞추는 식이었다. 알파벳을 누를 때마다 사용된 알파벳은 gui에서 지워지며 정답일 시 행맨 아래의 비어진 문제칸에 알파벳이 추가가 된다. 오답을 누를 시 머리와 몸통 팔다리 그래픽이 차례로 실행이 되며, 게임이 끝이 나는 경우에 불특정 자판을 누르면 다시 게임이 재실행 되는 식이었다. 게임이 틀렸을 때와 맞았을 때의 배경은 같으나 실행되는 문장이 달라 이를 판별했다. 우리는 이러한 부분에서 게임의 재실행 되는 부분이 의미 없이 버려진다는 점과, 게임의 실행자가 난이도를 구분해 사용할 수 없다는 점, 게임의 실행 과정이 밋밋하다는 점 등을 문제점으로 보았다. + + + + + +3. 개발 과정 + + +위의 문제점을 중심으로 토론한 결과, 초기에 구현하고자 했던 기능은 다음과 같다. [테마와 난이도를 나눠 실행자를 위한 선택지를 주는 것]. [gui창에 띄워진 알파벳을 누를 시 특정 소리를 내는 것]. [힌트 칸을 추가해 어려움을 겪는 실행자들에게 도움을 줄 수 있는 방안]과, [제한 시간을 설정하고 db를 이용해 시간 내에 문제를 가장 많이 푼 이에게 등수를 내어주는 식]이었다. 하지만 마지막 부분의 경우 제한 시간을 설정할 경우 실행자들이 중도에 게임을 그만 둘 경우 취소를 할 수 없다는 오류를 지적해 [게임의 플레이 시간 경과를 실행자에게 보이고, 정답자에 한해 가장 빨리 푼 이의 플레이 시간을 창에 갱신] 할 수 있게끔 하였다. 이후 개발 과정 중 추가한 사항으로는 게임에 성공하거나 실패하였을 경우 [특정한 효과음]을 내며 게임을 리플레이 할 수 있게끔 하였다. 분배는 다음과 같다 + + +[윤가영] 효과음 및, 힌트란 추가 +[이성은] db를 이용한 사용자 최단 플레이 시간 갱신 및 게임 배경 +[홍민희] 테마선택 및 난이도 구성 +[김서현] 시간 경과 설정 및 최종 설명보고서 작성 + + +구현할 부분들을 분배한 후 초반에는 본인들의 맡은 역할에 맞춰 코드를 생성하고 이를 융합하는 방식으로 개발이 진행되었다. 병합을 하는 과정에서 일어나는 오류를 서로 주고 받으며 해결하는 식이었다. 초반 소스트리를 사용하였을 때 생소한 개발 환경 탓에 헤매는 경우가 많았다. 팀원들 내부적으로 갈등이 일어나는 대신, 서로 개발 환경에 익숙해질 때까지 배려하고 도왔다. 이 때문에 최종 구현이 될 때 까지 낙오되는 팀원들 없이 모두 맡은 바를 해결할 수 있었다. + + + +4. 최종 구현 + + +즉시 게임이 실행되는 기존의 행맨 게임과 달리 우선 [동물, 음식, 장소] 3가지의 테마와 [easy, hard] 2가지의 난이도로 총 6가지 선택지가 주어진다. 이를 선택하고 나면 게임 창이 뜨는데 앞서 게임 실행 시 기존의 것과 달라진 점은 총 세 가지이다. [플레이 시간 출력], [효과음], [힌트창 출력]. jpg사진을 삽입하여 버튼을 만들고 이를 누를 때마다 실행자가 풀어야 할 문제의 알파벳 하나를 보이는 식이다. 마우스가 잘 먹지 않아 여러 번 클릭하면 보기 좋다. 사용자가 원하는 알파벳을 누를 때마다 특정 소리가 난다. 좌측 하단에는 플레이 시간을 업로드했다. 배경은 기존의 초록과 달리 흰색으로, 사용자가 보기에 훨씬 깔끔하다. [게임이 종료될 시]에 일어나는 효과음은 총 두개인데, 실패시에 나는 소리와 게임을 모두 해결하고 난 이후의 소리가 다르다. 이후 게임이 끝나면 db를 이용해 [최단 플레이 시간]을 띄워주는데 이는 게임을 완전히 해결하였을 때만 업로드 되는 식이고, 행맨이 모두 달려 게임에 실패했을 시에는 갱신되지 않는다. 게임은 특정 키보드를 눌렀을 때 다시 리플레이 된다. 리플레이 될 시, 출력되는 플레이 시간 역시 리셋된다. + + + + +5. 마무리 + + +개발이 개인의 능력보다 소통과 협력이 중요한 분야인 만큼, 이번 프로젝트를 통해 이러한 부분이 크게 발전할 수 있었던 것 같다. 새로운 프로그램을 익히고 개발하는 부분 역시 중요하지만 소통과 협력, 니즈를 온전히 이해한 후 개발을 시작하는 부분이 크게 중요하다는 것을 느꼈고, 이후 실제 개발 환경을 구축해 나갈 때 이번 경험이 많은 토대가 될 것 같다는 생각이 공통적인 입장이다. 시작은 개개인의 개발이었지만 이를 합치고 에러를 구축해나가는 경험 역시 값졌다. 이후 초기에 구현 했던 대로 탈없이 완성도 있는 개발품을 만들어 낸 것 역시도 큰 성취감을 느낄 수 있었다. 이러한 경험들이 모임으로써 종내에 큰 물로 이어질 수 있다고 믿는다. \ No newline at end of file diff --git a/background/background_1.png b/background/background_1.png new file mode 100644 index 0000000..9fa1849 Binary files /dev/null and b/background/background_1.png differ diff --git a/background/background_2.png b/background/background_2.png new file mode 100644 index 0000000..2f09add Binary files /dev/null and b/background/background_2.png differ diff --git a/hangman0.png b/hang_picture/hangman0.png similarity index 100% rename from hangman0.png rename to hang_picture/hangman0.png diff --git a/hangman1.png b/hang_picture/hangman1.png similarity index 100% rename from hangman1.png rename to hang_picture/hangman1.png diff --git a/hangman2.png b/hang_picture/hangman2.png similarity index 100% rename from hangman2.png rename to hang_picture/hangman2.png diff --git a/hangman3.png b/hang_picture/hangman3.png similarity index 100% rename from hangman3.png rename to hang_picture/hangman3.png diff --git a/hangman4.png b/hang_picture/hangman4.png similarity index 100% rename from hangman4.png rename to hang_picture/hangman4.png diff --git a/hangman5.png b/hang_picture/hangman5.png similarity index 100% rename from hangman5.png rename to hang_picture/hangman5.png diff --git a/hangman6.png b/hang_picture/hangman6.png similarity index 100% rename from hangman6.png rename to hang_picture/hangman6.png diff --git a/hang_picture/stage/animal_easy.txt b/hang_picture/stage/animal_easy.txt new file mode 100644 index 0000000..370f019 --- /dev/null +++ b/hang_picture/stage/animal_easy.txt @@ -0,0 +1,7 @@ +dog +cat +mouse +lion +tiger +elephant +whale \ No newline at end of file diff --git a/hang_picture/stage/animal_hard.txt b/hang_picture/stage/animal_hard.txt new file mode 100644 index 0000000..7e259c5 --- /dev/null +++ b/hang_picture/stage/animal_hard.txt @@ -0,0 +1,7 @@ +golden retriever +dalmatians +emperor penguin +frilled lizard +flying squirrel +jellyfish +hedgehog diff --git a/hang_picture/stage/food_easy.txt b/hang_picture/stage/food_easy.txt new file mode 100644 index 0000000..5f7200b --- /dev/null +++ b/hang_picture/stage/food_easy.txt @@ -0,0 +1,7 @@ +pasta +soup +apple +banana +orange +melon +carrot \ No newline at end of file diff --git a/hang_picture/stage/food_hard.txt b/hang_picture/stage/food_hard.txt new file mode 100644 index 0000000..9e28dc2 --- /dev/null +++ b/hang_picture/stage/food_hard.txt @@ -0,0 +1,7 @@ +hamburger +kimchi stew +rice cake +chicken salad +lobster +king crab + diff --git a/hang_picture/stage/location_easy.txt b/hang_picture/stage/location_easy.txt new file mode 100644 index 0000000..3d07860 --- /dev/null +++ b/hang_picture/stage/location_easy.txt @@ -0,0 +1,8 @@ +paris +london +seoul +busan +gwangju +washington +newyork +tokyo \ No newline at end of file diff --git a/hang_picture/stage/location_hard.txt b/hang_picture/stage/location_hard.txt new file mode 100644 index 0000000..3972deb --- /dev/null +++ b/hang_picture/stage/location_hard.txt @@ -0,0 +1,7 @@ +los angeles +vancouver +the united kigdom +the united states +louvre museum +washington dc +gyeongbokgung \ No newline at end of file diff --git a/hangman.py b/hangman.py index b47fd06..5fba046 100644 --- a/hangman.py +++ b/hangman.py @@ -1,186 +1,355 @@ -######################################################### -## File Name: hangman.py ## -## Description: Starter for Hangman project - ICS3U ## -######################################################### -import pygame -import random - -pygame.init() -winHeight = 480 -winWidth = 700 -win=pygame.display.set_mode((winWidth,winHeight)) -#---------------------------------------# -# initialize global variables/constants # -#---------------------------------------# -BLACK = (0,0, 0) -WHITE = (255,255,255) -RED = (255,0, 0) -GREEN = (0,255,0) -BLUE = (0,0,255) -LIGHT_BLUE = (102,255,255) - -btn_font = pygame.font.SysFont("arial", 20) -guess_font = pygame.font.SysFont("monospace", 24) -lost_font = pygame.font.SysFont('arial', 45) -word = '' -buttons = [] -guessed = [] -hangmanPics = [pygame.image.load('hangman0.png'), pygame.image.load('hangman1.png'), pygame.image.load('hangman2.png'), pygame.image.load('hangman3.png'), pygame.image.load('hangman4.png'), pygame.image.load('hangman5.png'), pygame.image.load('hangman6.png')] - -limbs = 0 - - -def redraw_game_window(): - global guessed - global hangmanPics - global limbs - win.fill(GREEN) - # Buttons - for i in range(len(buttons)): - if buttons[i][4]: - pygame.draw.circle(win, BLACK, (buttons[i][1], buttons[i][2]), buttons[i][3]) - pygame.draw.circle(win, buttons[i][0], (buttons[i][1], buttons[i][2]), buttons[i][3] - 2 - ) - label = btn_font.render(chr(buttons[i][5]), 1, BLACK) - win.blit(label, (buttons[i][1] - (label.get_width() / 2), buttons[i][2] - (label.get_height() / 2))) - - spaced = spacedOut(word, guessed) - label1 = guess_font.render(spaced, 1, BLACK) - rect = label1.get_rect() - length = rect[2] - - win.blit(label1,(winWidth/2 - length/2, 400)) - - pic = hangmanPics[limbs] - win.blit(pic, (winWidth/2 - pic.get_width()/2 + 20, 150)) - pygame.display.update() - - -def randomWord(): - file = open('words.txt') - f = file.readlines() - i = random.randrange(0, len(f) - 1) - - return f[i][:-1] - - -def hang(guess): - global word - if guess.lower() not in word.lower(): - return True - else: - return False - - -def spacedOut(word, guessed=[]): - spacedWord = '' - guessedLetters = guessed - for x in range(len(word)): - if word[x] != ' ': - spacedWord += '_ ' - for i in range(len(guessedLetters)): - if word[x].upper() == guessedLetters[i]: - spacedWord = spacedWord[:-2] - spacedWord += word[x].upper() + ' ' - elif word[x] == ' ': - spacedWord += ' ' - return spacedWord - - -def buttonHit(x, y): - for i in range(len(buttons)): - if x < buttons[i][1] + 20 and x > buttons[i][1] - 20: - if y < buttons[i][2] + 20 and y > buttons[i][2] - 20: - return buttons[i][5] - return None - - -def end(winner=False): - global limbs - lostTxt = 'You Lost, press any key to play again...' - winTxt = 'WINNER!, press any key to play again...' - redraw_game_window() - pygame.time.delay(1000) - win.fill(GREEN) - - if winner == True: - label = lost_font.render(winTxt, 1, BLACK) - else: - label = lost_font.render(lostTxt, 1, BLACK) - - wordTxt = lost_font.render(word.upper(), 1, BLACK) - wordWas = lost_font.render('The phrase was: ', 1, BLACK) - - win.blit(wordTxt, (winWidth/2 - wordTxt.get_width()/2, 295)) - win.blit(wordWas, (winWidth/2 - wordWas.get_width()/2, 245)) - win.blit(label, (winWidth / 2 - label.get_width() / 2, 140)) - pygame.display.update() - again = True - while again: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - if event.type == pygame.KEYDOWN: - again = False - reset() - - -def reset(): - global limbs - global guessed - global buttons - global word - for i in range(len(buttons)): - buttons[i][4] = True - - limbs = 0 - guessed = [] - word = randomWord() - -#MAINLINE - - -# Setup buttons -increase = round(winWidth / 13) -for i in range(26): - if i < 13: - y = 40 - x = 25 + (increase * i) - else: - x = 25 + (increase * (i - 13)) - y = 85 - buttons.append([LIGHT_BLUE, x, y, 20, True, 65 + i]) - # buttons.append([color, x_pos, y_pos, radius, visible, char]) - -word = randomWord() -inPlay = True - -while inPlay: - redraw_game_window() - pygame.time.delay(10) - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - inPlay = False - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: - inPlay = False - if event.type == pygame.MOUSEBUTTONDOWN: - clickPos = pygame.mouse.get_pos() - letter = buttonHit(clickPos[0], clickPos[1]) - if letter != None: - guessed.append(chr(letter)) - buttons[letter - 65][4] = False - if hang(chr(letter)): - if limbs != 5: - limbs += 1 - else: - end() - else: - print(spacedOut(word, guessed)) - if spacedOut(word, guessed).count('_') == 0: - end(True) - -pygame.quit() - -# always quit pygame when done! +######################################################### +## File Name: hangman.py ## +## Description: Starter for Hangman project - ICS3U ## +######################################################### +import pygame +import random +import sqlite3 +from datetime import datetime +import winsound #사운드 출력 필요 모듈 +import time #타임 모듈 +import threading #쓰레드 모듈 + +pygame.init() + +cnt = 1 #id +conn=sqlite3.connect("database.db") #DB 연결 +c=conn.cursor() #커서 연결 +c.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMERY KEY,score_time INTEGER)") #DB 테이블 생성 + +winHeight = 480 #창 세로 픽셀 길이 +winWidth = 700 #창 가로 픽셀 길이 +win=pygame.display.set_mode((winWidth,winHeight)) +pygame.display.set_caption("hangman game") #화면 타이틀 설정 + +##########colors########## +BLACK = (0,0, 0) +WHITE = (255,255,255) +ORANGE = (255,127,39) +YELLOW =(255,242,0) + +##########fonts########## +btn_font = pygame.font.SysFont('arial', 20) +guess_font = pygame.font.SysFont("monospace", 24) +lost_font = pygame.font.SysFont('arial', 40) +#힌트 폰트 설정 +hint_font = pygame.font.SysFont('arial', 30) + +word = '' +buttons = [] +guessed = [] +hangmanPics = [pygame.image.load('hang_picture/hangman0.png'), pygame.image.load('hang_picture/hangman1.png'),pygame.image.load('hang_picture/hangman2.png'), pygame.image.load('hang_picture/hangman3.png'),pygame.image.load('hang_picture/hangman4.png'), pygame.image.load('hang_picture/hangman5.png'), pygame.image.load('hang_picture/hangman6.png')] +background_1 = pygame.image.load("background/background_1.png") +background_2 = pygame.image.load("background/background_2.png") +level_button = [] +limbs = 0 +time_out=[] # 시간 들어갈 리스트 +#힌트버튼사진 +hb = pygame.image.load('hint.png') +#이미지크기변경 +hintb = pygame.transform.scale(hb, (50,50)) + + + +#특정 범위 내의 좌표 마우스 클릭시 작동하는 클래스 +class hintbutton(): + #생성자 + def __init__(self,x,y,width,height): + self.x = x + self.y = y + self.width = width + self.height = height + #마우스 좌표가 범위 내에 있을 때 True 반환 + def isin(self,pos): + if pos[0]>self.x and pos[0]self.y and pos[1]= 80 and y <= 120: + if x >= 150 and x <= 500: + return 'stage/animal_easy.txt' + if y >= 130 and y <= 170: + if x >= 150 and x <= 500: + return 'stage/animal_hard.txt' + if y >= 180 and y <= 220: + if x >= 150 and x <= 500: + return 'stage/location_easy.txt' + if y >= 230 and y <= 270: + if x >= 150 and x <= 500: + return 'stage/location_hard.txt' + if y >= 280 and y <= 320: + if x >= 150 and x <= 500: + return 'stage/food_easy.txt' + if y >= 330 and y <= 380: + if x >= 150 and x <= 500: + return 'stage/food_hard.txt' + +def randomWord(w):#바뀜 + global start + file = open(w)#바뀜 + f = file.readlines() + i = random.randrange(0, len(f)-1) + start = 0 + start = datetime.now() #스타트 + + return f[i][:-1] + + +def hang(guess): + global word + if guess.lower() not in word.lower(): + return True + else: + return False + + +def spacedOut(word, guessed=[]): + spacedWord = '' #화면에 표시되는 word + guessedLetters = guessed #사용자가 입력한 단어 + for x in range(len(word)): + if word[x] != ' ': + spacedWord += '_ ' #정답 word 길이 만큼 '_'추가하기 + for i in range(len(guessedLetters)): #사용자 입력 단어 알파벳 길이 + if word[x].upper() == guessedLetters[i]: # 정답이랑 비교해서 같다면 + spacedWord = spacedWord[:-2] # '_'지우고 + spacedWord += word[x].upper() + ' ' # 알파벳 추가 + elif word[x] == ' ': + spacedWord += ' ' + return spacedWord + + +def buttonHit(x, y): #버튼 눌렀을 때 그 위치에 해당하는 알파벳문자 return + for i in range(len(buttons)): + if x < buttons[i][1] + 20 and x > buttons[i][1] - 20: + if y < buttons[i][2] + 20 and y > buttons[i][2] - 20: + return buttons[i][5] + return None + + +def end(winner=False): + global limbs + global cnt + + lostTxt = 'You Lost, press any key to play again...' + winTxt = 'WINNER!, press any key to play again...' + + redraw_game_window() + pygame.time.delay(1000) + + if winner == True: + win.blit(background_1,(0, 0)) + winsound.PlaySound('./sound/pass.wav',winsound.SND_FILENAME) + label = lost_font.render(winTxt, 1, BLACK) + #DB insert + c.execute("INSERT INTO users (id, score_time) VALUES(?,?)", (cnt,int(delta_time))) + conn.commit() + cnt+=1 + else: + win.blit(background_2, (0, 0)) + winsound.PlaySound('./sound/nonpass.wav',winsound.SND_FILENAME) + label = lost_font.render(lostTxt, 1, BLACK) + + c.execute("SELECT * FROM users") + + cf=c.fetchone() + most_score=cf[1] + + for row in c.fetchall(): + if row[1] <= most_score: # 가장 초가 작은 사람 + most_score=row[1] + + topscore_user=most_score + + wordTxt = lost_font.render(word.upper(), 1, BLACK) + wordWas = lost_font.render('The word was :', 1, BLACK) + topscore = lost_font.render("1st user : {}sec.".format(topscore_user), 1, ORANGE) #1등 score + + win.blit(wordTxt, (winWidth/2 - wordTxt.get_width()/2, 295)) + win.blit(wordWas, (winWidth/2 - wordWas.get_width()/2, 245)) + win.blit(label, (winWidth / 2 - label.get_width() / 2, 140)) + win.blit(topscore, (winWidth / 2 - topscore.get_width() / 2, 80)) + + pygame.display.update() + again = True + + while again: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + if event.type == pygame.KEYDOWN: + again = False + reset() + + +def reset(): + global limbs + global guessed + global buttons + global word + + for i in range(len(buttons)): + buttons[i][4] = True + + limbs = 0 + guessed = [] + word = randomWord(w) + +#MAINLINE + + +# Setup buttons +increase = round(winWidth / 13) +for i in range(26): + if i < 13: + y = 40 + x = 25 + (increase * i) + else: + x = 25 + (increase * (i - 13)) + y = 85 + buttons.append([YELLOW, x, y, 20, True, 65 + i]) + # buttons.append([color, x_pos, y_pos, radius, visible, char]) + +w = level()#바뀜 +word = randomWord(w)#바뀜 +#랜덤한 단어의 공백을 제거 +hintword = word.replace(' ', '') +#공백제거한 단어의 알파벳 하나를 랜덤으로 추출 +a = random.choice(hintword) + +#힌트 +def Hint(): + global a + while True: + #변수 a가 이미 추측한 알파벳이라면 + if a in guessed: + #변수 a 다시 지정 + a = random.choice(hintword) + #아니라면 + else: + #변수 t에 a를 대문자로 변환한 것 저장 + t = a.upper() + #반복문 종료 + break + return t + + +inPlay = True#바뀜 + + +while inPlay: + redraw_game_window() + pygame.time.delay(10) + for event in pygame.event.get(): + if event.type == pygame.QUIT: #창이 닫히는 이벤트가 발생 + conn.execute("DELETE FROM users") #DB 데이터 삭제 + conn.commit() + inPlay = False + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + inPlay = False + if event.type == pygame.MOUSEBUTTONDOWN: + clickPos = pygame.mouse.get_pos() + letter = buttonHit(clickPos[0], clickPos[1]) #마우스가 클릭한거 + #힌트버튼 클릭하면 + if hButton.isin(clickPos): + #힌트버튼 클릭시 소리재생 + winsound.PlaySound('./sound/click.wav',winsound.SND_FILENAME) + #힌트생성 + t = Hint() + #텍스트 객체 생성, t = 텍스트내용, True = Anti-aliasing 사용, BLACK = 텍스트컬러 + text = hint_font.render(t, True, BLACK) + #화면에 텍스트객체 출력 + win.blit(text, (660,380)) + #화면 업데이트 + pygame.display.update() + + if letter != None: + winsound.PlaySound('./sound/click.wav',winsound.SND_FILENAME) #버튼 클릭시 소리 재생 + guessed.append(chr(letter)) + buttons[letter - 65][4] = False + if hang(chr(letter)): + if limbs != 5: + limbs += 1 + else: + time_out.append(delta_time) #리스트 시간 추가 + end() + else: + print(spacedOut(word, guessed)) + if spacedOut(word, guessed).count('_') == 0: + time_out.append(delta_time) # 끝날때 리스트에 흐른 시간 추가 + end(True) + + +c.close() +pygame.quit() \ No newline at end of file diff --git a/hint.png b/hint.png new file mode 100644 index 0000000..68f8742 Binary files /dev/null and b/hint.png differ diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 0cb7ff1..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -pygame diff --git a/sound/click.wav b/sound/click.wav new file mode 100644 index 0000000..133b10e Binary files /dev/null and b/sound/click.wav differ diff --git a/sound/nonpass.wav b/sound/nonpass.wav new file mode 100644 index 0000000..7dad65b Binary files /dev/null and b/sound/nonpass.wav differ diff --git a/sound/pass.wav b/sound/pass.wav new file mode 100644 index 0000000..2cc7c3d Binary files /dev/null and b/sound/pass.wav differ diff --git a/stage/animal_easy.txt b/stage/animal_easy.txt new file mode 100644 index 0000000..370f019 --- /dev/null +++ b/stage/animal_easy.txt @@ -0,0 +1,7 @@ +dog +cat +mouse +lion +tiger +elephant +whale \ No newline at end of file diff --git a/stage/animal_hard.txt b/stage/animal_hard.txt new file mode 100644 index 0000000..7e259c5 --- /dev/null +++ b/stage/animal_hard.txt @@ -0,0 +1,7 @@ +golden retriever +dalmatians +emperor penguin +frilled lizard +flying squirrel +jellyfish +hedgehog diff --git a/stage/background/background_1.png b/stage/background/background_1.png new file mode 100644 index 0000000..9fa1849 Binary files /dev/null and b/stage/background/background_1.png differ diff --git a/stage/background/background_2.png b/stage/background/background_2.png new file mode 100644 index 0000000..2f09add Binary files /dev/null and b/stage/background/background_2.png differ diff --git a/stage/food_easy.txt b/stage/food_easy.txt new file mode 100644 index 0000000..5f7200b --- /dev/null +++ b/stage/food_easy.txt @@ -0,0 +1,7 @@ +pasta +soup +apple +banana +orange +melon +carrot \ No newline at end of file diff --git a/stage/food_hard.txt b/stage/food_hard.txt new file mode 100644 index 0000000..9e28dc2 --- /dev/null +++ b/stage/food_hard.txt @@ -0,0 +1,7 @@ +hamburger +kimchi stew +rice cake +chicken salad +lobster +king crab + diff --git a/stage/location_easy.txt b/stage/location_easy.txt new file mode 100644 index 0000000..3d07860 --- /dev/null +++ b/stage/location_easy.txt @@ -0,0 +1,8 @@ +paris +london +seoul +busan +gwangju +washington +newyork +tokyo \ No newline at end of file diff --git a/stage/location_hard.txt b/stage/location_hard.txt new file mode 100644 index 0000000..3972deb --- /dev/null +++ b/stage/location_hard.txt @@ -0,0 +1,7 @@ +los angeles +vancouver +the united kigdom +the united states +louvre museum +washington dc +gyeongbokgung \ No newline at end of file diff --git a/words.txt b/words.txt deleted file mode 100644 index 882e17e..0000000 --- a/words.txt +++ /dev/null @@ -1,11 +0,0 @@ -the big bang -the pillow feels soft -odd one out -press conference -show me the money -time to go home -that was easy -hangman is cool -zoologist -quadruplets -the sky is blue \ No newline at end of file