From 6fbf14e2cddf045dc0f894875404e613fa9acce3 Mon Sep 17 00:00:00 2001 From: leticialunaz Date: Fri, 26 Sep 2025 17:21:40 -0300 Subject: [PATCH 1/2] finalizado --- __pycache__/hangman.cpython-311.pyc | Bin 0 -> 10334 bytes __pycache__/hangmanOtimizado.cpython-311.pyc | Bin 0 -> 10167 bytes hangmanOtimizado.py | 184 ++++++++++++++++++ results/Rplots.pdf | Bin 0 -> 5413 bytes results/benchmark.txt | 187 +++++++++++++++++++ script/benchmark.py | 108 +++++++++++ script/plot.R | 37 ++++ 7 files changed, 516 insertions(+) create mode 100644 __pycache__/hangman.cpython-311.pyc create mode 100644 __pycache__/hangmanOtimizado.cpython-311.pyc create mode 100644 hangmanOtimizado.py create mode 100644 results/Rplots.pdf create mode 100644 results/benchmark.txt create mode 100644 script/benchmark.py create mode 100644 script/plot.R diff --git a/__pycache__/hangman.cpython-311.pyc b/__pycache__/hangman.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c09a2f1b93f06ddb2c07638a68ddbece0999599 GIT binary patch literal 10334 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 literal 0 HcmV?d00001 diff --git a/__pycache__/hangmanOtimizado.cpython-311.pyc b/__pycache__/hangmanOtimizado.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ace36b174b5270bb90911cbd02a00837a7d35d55 GIT binary patch literal 10167 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 X-hk=N@`kJ*z;IK>svvtKTd4m9@T`&; literal 0 HcmV?d00001 diff --git a/hangmanOtimizado.py b/hangmanOtimizado.py new file mode 100644 index 0000000..cfa0b19 --- /dev/null +++ b/hangmanOtimizado.py @@ -0,0 +1,184 @@ +######################################################### +## 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 = set() +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 ch in word: + if ch ==' ': + spacedWord += ' ' + elif ch.upper() in guessed: + spacedWord += ch.upper() + ' ' + else: + 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() + #add quit para não dar erro ao encerrar o programa + 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 = set() + 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 and chr(letter) not in guessed: + guessed.add(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() diff --git a/results/Rplots.pdf b/results/Rplots.pdf new file mode 100644 index 0000000000000000000000000000000000000000..77ab3e7ce398b46af21676e3c82f45f81097e00d GIT binary patch literal 5413 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 literal 0 HcmV?d00001 diff --git a/results/benchmark.txt b/results/benchmark.txt new file mode 100644 index 0000000..6422b58 --- /dev/null +++ b/results/benchmark.txt @@ -0,0 +1,187 @@ +Method Time Sample + +# Benchmark SpacedOut-Set (erros repetidos) +SpacedOut-Set 0.00059101 Palavra1 +SpacedOut-Set 0.00050076 Palavra1 +SpacedOut-Set 0.00049688 Palavra1 +SpacedOut-Set 0.00049901 Palavra1 +SpacedOut-Set 0.00051085 Palavra1 +SpacedOut-Set 0.00049968 Palavra1 +SpacedOut-Set 0.00050591 Palavra1 +SpacedOut-Set 0.00055768 Palavra1 +SpacedOut-Set 0.00057411 Palavra1 +SpacedOut-Set 0.00066678 Palavra1 +SpacedOut-Set 0.00075516 Palavra1 +SpacedOut-Set 0.00075664 Palavra1 +SpacedOut-Set 0.00036580 Palavra2 +SpacedOut-Set 0.00034920 Palavra2 +SpacedOut-Set 0.00034764 Palavra2 +SpacedOut-Set 0.00034583 Palavra2 +SpacedOut-Set 0.00038921 Palavra2 +SpacedOut-Set 0.00040805 Palavra2 +SpacedOut-Set 0.00039946 Palavra2 +SpacedOut-Set 0.00038509 Palavra2 +SpacedOut-Set 0.00043671 Palavra2 +SpacedOut-Set 0.00046260 Palavra2 +SpacedOut-Set 0.00055967 Palavra2 +SpacedOut-Set 0.00086276 Palavra3 +SpacedOut-Set 0.00074707 Palavra3 +SpacedOut-Set 0.00072958 Palavra3 +SpacedOut-Set 0.00076158 Palavra3 +SpacedOut-Set 0.00073966 Palavra3 +SpacedOut-Set 0.00075630 Palavra3 +SpacedOut-Set 0.00075116 Palavra3 +SpacedOut-Set 0.00080743 Palavra3 +SpacedOut-Set 0.00078968 Palavra3 +SpacedOut-Set 0.00078628 Palavra3 +SpacedOut-Set 0.00081656 Palavra3 +SpacedOut-Set 0.00085816 Palavra3 +SpacedOut-Set 0.00092962 Palavra3 +SpacedOut-Set 0.00086993 Palavra4 +SpacedOut-Set 0.00090704 Palavra4 +SpacedOut-Set 0.00092107 Palavra4 +SpacedOut-Set 0.00103401 Palavra4 +SpacedOut-Set 0.00101426 Palavra4 +SpacedOut-Set 0.00102612 Palavra4 +SpacedOut-Set 0.00102701 Palavra4 +SpacedOut-Set 0.00108903 Palavra4 +SpacedOut-Set 0.00108427 Palavra4 +SpacedOut-Set 0.00115604 Palavra4 +SpacedOut-Set 0.00121940 Palavra4 +SpacedOut-Set 0.00118601 Palavra4 +SpacedOut-Set 0.00124859 Palavra4 +SpacedOut-Set 0.00127628 Palavra4 +SpacedOut-Set 0.00131527 Palavra4 +SpacedOut-Set 0.00128051 Palavra4 +SpacedOut-Set 0.00087217 Palavra5 +SpacedOut-Set 0.00086545 Palavra5 +SpacedOut-Set 0.00085760 Palavra5 +SpacedOut-Set 0.00086703 Palavra5 +SpacedOut-Set 0.00086089 Palavra5 +SpacedOut-Set 0.00086985 Palavra5 +SpacedOut-Set 0.00087908 Palavra5 +SpacedOut-Set 0.00094951 Palavra5 +SpacedOut-Set 0.00093798 Palavra5 +SpacedOut-Set 0.00101915 Palavra5 +SpacedOut-Set 0.00105362 Palavra5 +SpacedOut-Set 0.00114245 Palavra5 +SpacedOut-Set 0.00086675 Palavra6 +SpacedOut-Set 0.00083753 Palavra6 +SpacedOut-Set 0.00085745 Palavra6 +SpacedOut-Set 0.00091928 Palavra6 +SpacedOut-Set 0.00092847 Palavra6 +SpacedOut-Set 0.00092950 Palavra6 +SpacedOut-Set 0.00092398 Palavra6 +SpacedOut-Set 0.00097609 Palavra6 +SpacedOut-Set 0.00096500 Palavra6 +SpacedOut-Set 0.00096837 Palavra6 +SpacedOut-Set 0.00094996 Palavra6 +SpacedOut-Set 0.00096642 Palavra6 +SpacedOut-Set 0.00095915 Palavra6 +SpacedOut-Set 0.00112180 Palavra6 +SpacedOut-Set 0.00124384 Palavra6 +SpacedOut-Set 0.00111052 Palavra6 +SpacedOut-Set 0.00085772 Palavra7 +SpacedOut-Set 0.00085482 Palavra7 +SpacedOut-Set 0.00084537 Palavra7 +SpacedOut-Set 0.00089000 Palavra7 +SpacedOut-Set 0.00089200 Palavra7 +SpacedOut-Set 0.00092513 Palavra7 +SpacedOut-Set 0.00088558 Palavra7 +SpacedOut-Set 0.00093751 Palavra7 +SpacedOut-Set 0.00095301 Palavra7 +SpacedOut-Set 0.00103750 Palavra7 +SpacedOut-Set 0.00108564 Palavra7 +SpacedOut-Set 0.00111246 Palavra7 +SpacedOut-Lista 0.00074141 Palavra1 +SpacedOut-Lista 0.00111852 Palavra1 +SpacedOut-Lista 0.00130646 Palavra1 +SpacedOut-Lista 0.00154084 Palavra1 +SpacedOut-Lista 0.00177913 Palavra1 +SpacedOut-Lista 0.00213201 Palavra1 +SpacedOut-Lista 0.00240500 Palavra1 +SpacedOut-Lista 0.00278452 Palavra1 +SpacedOut-Lista 0.00309604 Palavra1 +SpacedOut-Lista 0.00355401 Palavra1 +SpacedOut-Lista 0.00386300 Palavra1 +SpacedOut-Lista 0.00424208 Palavra1 +SpacedOut-Lista 0.00056604 Palavra2 +SpacedOut-Lista 0.00080504 Palavra2 +SpacedOut-Lista 0.00093928 Palavra2 +SpacedOut-Lista 0.00112151 Palavra2 +SpacedOut-Lista 0.00125079 Palavra2 +SpacedOut-Lista 0.00149639 Palavra2 +SpacedOut-Lista 0.00168195 Palavra2 +SpacedOut-Lista 0.00183189 Palavra2 +SpacedOut-Lista 0.00222988 Palavra2 +SpacedOut-Lista 0.00241818 Palavra2 +SpacedOut-Lista 0.00273303 Palavra2 +SpacedOut-Lista 0.00104704 Palavra3 +SpacedOut-Lista 0.00163529 Palavra3 +SpacedOut-Lista 0.00192997 Palavra3 +SpacedOut-Lista 0.00221629 Palavra3 +SpacedOut-Lista 0.00258633 Palavra3 +SpacedOut-Lista 0.00303540 Palavra3 +SpacedOut-Lista 0.00346382 Palavra3 +SpacedOut-Lista 0.00395972 Palavra3 +SpacedOut-Lista 0.00424569 Palavra3 +SpacedOut-Lista 0.00479251 Palavra3 +SpacedOut-Lista 0.00525875 Palavra3 +SpacedOut-Lista 0.00677400 Palavra3 +SpacedOut-Lista 0.00657936 Palavra3 +SpacedOut-Lista 0.00121225 Palavra4 +SpacedOut-Lista 0.00208915 Palavra4 +SpacedOut-Lista 0.00259381 Palavra4 +SpacedOut-Lista 0.00315824 Palavra4 +SpacedOut-Lista 0.00373281 Palavra4 +SpacedOut-Lista 0.00443922 Palavra4 +SpacedOut-Lista 0.00518325 Palavra4 +SpacedOut-Lista 0.00596505 Palavra4 +SpacedOut-Lista 0.00646271 Palavra4 +SpacedOut-Lista 0.00692357 Palavra4 +SpacedOut-Lista 0.00735184 Palavra4 +SpacedOut-Lista 0.00793940 Palavra4 +SpacedOut-Lista 0.00846387 Palavra4 +SpacedOut-Lista 0.00916570 Palavra4 +SpacedOut-Lista 0.00963827 Palavra4 +SpacedOut-Lista 0.01037596 Palavra4 +SpacedOut-Lista 0.00128569 Palavra5 +SpacedOut-Lista 0.00195449 Palavra5 +SpacedOut-Lista 0.00226956 Palavra5 +SpacedOut-Lista 0.00274409 Palavra5 +SpacedOut-Lista 0.00318184 Palavra5 +SpacedOut-Lista 0.00366377 Palavra5 +SpacedOut-Lista 0.00418772 Palavra5 +SpacedOut-Lista 0.00499218 Palavra5 +SpacedOut-Lista 0.00584401 Palavra5 +SpacedOut-Lista 0.00604318 Palavra5 +SpacedOut-Lista 0.00662763 Palavra5 +SpacedOut-Lista 0.00704762 Palavra5 +SpacedOut-Lista 0.00124798 Palavra6 +SpacedOut-Lista 0.00192835 Palavra6 +SpacedOut-Lista 0.00228367 Palavra6 +SpacedOut-Lista 0.00284413 Palavra6 +SpacedOut-Lista 0.00349846 Palavra6 +SpacedOut-Lista 0.00401861 Palavra6 +SpacedOut-Lista 0.00453526 Palavra6 +SpacedOut-Lista 0.00530717 Palavra6 +SpacedOut-Lista 0.00585294 Palavra6 +SpacedOut-Lista 0.00620948 Palavra6 +SpacedOut-Lista 0.00649839 Palavra6 +SpacedOut-Lista 0.00698367 Palavra6 +SpacedOut-Lista 0.00736459 Palavra6 +SpacedOut-Lista 0.00785487 Palavra6 +SpacedOut-Lista 0.00846656 Palavra6 +SpacedOut-Lista 0.00895574 Palavra6 +SpacedOut-Lista 0.00120525 Palavra7 +SpacedOut-Lista 0.00193417 Palavra7 +SpacedOut-Lista 0.00226202 Palavra7 +SpacedOut-Lista 0.00267276 Palavra7 +SpacedOut-Lista 0.00313573 Palavra7 +SpacedOut-Lista 0.00370986 Palavra7 +SpacedOut-Lista 0.00422849 Palavra7 +SpacedOut-Lista 0.00497429 Palavra7 +SpacedOut-Lista 0.00556311 Palavra7 +SpacedOut-Lista 0.00599863 Palavra7 +SpacedOut-Lista 0.00645830 Palavra7 +SpacedOut-Lista 0.00708859 Palavra7 diff --git a/script/benchmark.py b/script/benchmark.py new file mode 100644 index 0000000..7a3502e --- /dev/null +++ b/script/benchmark.py @@ -0,0 +1,108 @@ +import os +import time +from unittest.mock import patch +from hangman import spacedOut as spacedOut_lista # versão que usa lista +from hangmanOtimizado import spacedOut as spacedOut_set # versão que usa set + +# cria a pasta results se não existir +os.makedirs("results", exist_ok=True) + +# palavras de teste +palavras_teste = [ + "python", + "ufcg", + "benchmark", + "proclameiud", + "fundeiorspa", + "juntarexico", + "campolidrue", +] + +# chutes programados por palavra simulando até 6 erros, repetindo letras erradas +chutes_por_palavra = { + "python": ["a","a","e","e","i","i","o","p","y","t","h","n"], + "ufcg": ["a","a","e","e","i","i","o","u","f","c","g"], + "benchmark": ["z","z","x","x","q","q","w","w","e","b","n","c","h"], + "proclameiud": ["a","a","o","o","e","e","i","i","u","u","p","r","c","l","m","d"], + "fundeiorspa": ["z","z","x","x","y","y","a","f","u","n","d","e"], + "juntarexico": ["b","b","c","c","d","d","e","e","f","f","g","g","j","u","n","t"], + "campolidrue": ["z","z","x","x","y","y","a","c","m","p","o","l"], +} + +REPETICOES = 100000 + +with patch("pygame.display.set_mode"): + # abre o arquivo para sobrescrever + with open("results/benchmark3.txt", "w") as f: + f.write("Method Time(ms) Sample\n\n") + + # ======= Benchmark usando set ======= + f.write("# Benchmark SpacedOut-Set (erros repetidos)\n") + for idx, palavra in enumerate(palavras_teste, start=1): + guessed = set() + for chute in chutes_por_palavra.get(palavra, []): + start = time.perf_counter() + for _ in range(REPETICOES): + resultado = spacedOut_set(palavra, guessed) + fim = time.perf_counter() + + tempo_medio = (fim - start) * 1000 / REPETICOES + f.write(f"SpacedOut-Set {tempo_medio:.8f} Palavra{idx}\n") + guessed.add(chute.upper()) + + f.write("\n") + + # ======= Benchmark usando lista ======= + f.write("# Benchmark SpacedOut-Lista (erros repetidos)\n") + for idx, palavra in enumerate(palavras_teste, start=1): + guessed = [] + for chute in chutes_por_palavra.get(palavra, []): + start = time.perf_counter() + for _ in range(REPETICOES): + resultado = spacedOut_lista(palavra, guessed) + fim = time.perf_counter() + + tempo_medio = (fim - start) * 1000 / REPETICOES + f.write(f"SpacedOut-Lista {tempo_medio:.8f} Palavra{idx}\n") + guessed.append(chute.upper()) + +print("✅ Benchmark finalizado! Resultados em results/benchmark3.txt") + + +# #antes da otimizacao +# import os +# import time +# from unittest.mock import patch +# from hangman import spacedOut + +# # cria a pasta results se não existir +# os.makedirs("results", exist_ok=True) + +# # palavras de teste e chutes programados +# palavras_teste = ["python", "ufcg", "benchmark"] +# chutes = ["a", "a", "a", "a", "p", "y", "t", "h", "o", "n", "u", "f", "c", "g", "b", "e"] + +# # número de repetições para cada execução +# REPETICOES = 100000 + +# # desativa temporariamente a abertura da janela do pygame +# with patch("pygame.display.set_mode"): +# with open("results/benchmark2.txt", "w") as f: +# f.write("Method Time(ms) Sample\n") + +# for idx, palavra in enumerate(palavras_teste, start=1): +# guessed = [] +# for chute in chutes: +# start = time.perf_counter() +# for _ in range(REPETICOES): +# resultado = spacedOut(palavra, guessed) +# fim = time.perf_counter() + +# # tempo médio em milissegundos +# tempo_medio = (fim - start) * 1000 / REPETICOES +# f.write(f"SpacedOut {tempo_medio:.8f} Palavra{idx}\n") + +# guessed.append(chute.upper()) + +# print("✅ Benchmark finalizado! Resultados em results/benchmark.txt") + diff --git a/script/plot.R b/script/plot.R new file mode 100644 index 0000000..9e35056 --- /dev/null +++ b/script/plot.R @@ -0,0 +1,37 @@ +# Se o pacote não tiver instalado na máquina. +#install.packages('ggplot2', repos = "http://cran.us.r-project.org") + +library('ggplot2') + +args <- commandArgs() + +data = read.table(args[length(args)], header = T) +ggplot(data, aes(x = Sample, y = Time, colour = Method)) + geom_line() + + + + +# library('ggplot2') + +# # Ler arquivo +# data <- read.table("C:/Users/letic/Hangman/results/benchmark3.txt", header = TRUE) + +# # Renomear colunas para facilitar o ggplot +# colnames(data) <- c("Method", "Time", "Sample") + +# # Criar PDF +# pdf("../results/benchmark3_plot.pdf", width = 8, height = 6) + +# # Gerar gráfico +# ggplot(data, aes(x = Sample , y = Time, colour = Method, group = Method)) + +# geom_line() + +# geom_point() + +# labs( +# title = "Comparação SpacedOut List vs Set", +# x = "Sample", +# y = "Tempo por execução (s)" +# ) + +# theme_minimal() + +# # Fechar PDF +# dev.off() From 990c036fd31e8ff3a71f75f226aa46f2e4add25a Mon Sep 17 00:00:00 2001 From: leticialunaz Date: Fri, 26 Sep 2025 20:57:16 -0300 Subject: [PATCH 2/2] optimized structure --- hangman.py | 32 ++++---- hangmanOtimizado.py | 184 ----------------------------------------- results/Rplots.pdf | Bin 5413 -> 0 bytes results/benchmark.txt | 187 ------------------------------------------ script/benchmark.py | 108 ------------------------ script/plot.R | 37 --------- 6 files changed, 16 insertions(+), 532 deletions(-) delete mode 100644 hangmanOtimizado.py delete mode 100644 results/Rplots.pdf delete mode 100644 results/benchmark.txt delete mode 100644 script/benchmark.py delete mode 100644 script/plot.R diff --git a/hangman.py b/hangman.py index b47fd06..e9b5069 100644 --- a/hangman.py +++ b/hangman.py @@ -24,7 +24,7 @@ lost_font = pygame.font.SysFont('arial', 45) word = '' buttons = [] -guessed = [] +guessed = set() 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 @@ -72,18 +72,16 @@ def hang(guess): return False -def spacedOut(word, guessed=[]): +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] == ' ': + for ch in word: + if ch ==' ': spacedWord += ' ' + elif ch.upper() in guessed: + spacedWord += ch.upper() + ' ' + else: + spacedWord += '_ ' return spacedWord @@ -118,8 +116,10 @@ def end(winner=False): again = True while again: for event in pygame.event.get(): - if event.type == pygame.QUIT: + if event.type == pygame.QUIT: pygame.quit() + #add quit para não dar erro ao encerrar o programa + quit() if event.type == pygame.KEYDOWN: again = False reset() @@ -134,7 +134,7 @@ def reset(): buttons[i][4] = True limbs = 0 - guessed = [] + guessed = set() word = randomWord() #MAINLINE @@ -168,8 +168,8 @@ def reset(): if event.type == pygame.MOUSEBUTTONDOWN: clickPos = pygame.mouse.get_pos() letter = buttonHit(clickPos[0], clickPos[1]) - if letter != None: - guessed.append(chr(letter)) + if letter != None and chr(letter) not in guessed: + guessed.add(chr(letter)) buttons[letter - 65][4] = False if hang(chr(letter)): if limbs != 5: @@ -180,7 +180,7 @@ def reset(): print(spacedOut(word, guessed)) if spacedOut(word, guessed).count('_') == 0: end(True) - + pygame.quit() -# always quit pygame when done! +# always quit pygame when done! \ No newline at end of file diff --git a/hangmanOtimizado.py b/hangmanOtimizado.py deleted file mode 100644 index cfa0b19..0000000 --- a/hangmanOtimizado.py +++ /dev/null @@ -1,184 +0,0 @@ -######################################################### -## 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 = set() -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 ch in word: - if ch ==' ': - spacedWord += ' ' - elif ch.upper() in guessed: - spacedWord += ch.upper() + ' ' - else: - 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() - #add quit para não dar erro ao encerrar o programa - 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 = set() - 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 and chr(letter) not in guessed: - guessed.add(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() diff --git a/results/Rplots.pdf b/results/Rplots.pdf deleted file mode 100644 index 77ab3e7ce398b46af21676e3c82f45f81097e00d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5413 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 diff --git a/results/benchmark.txt b/results/benchmark.txt deleted file mode 100644 index 6422b58..0000000 --- a/results/benchmark.txt +++ /dev/null @@ -1,187 +0,0 @@ -Method Time Sample - -# Benchmark SpacedOut-Set (erros repetidos) -SpacedOut-Set 0.00059101 Palavra1 -SpacedOut-Set 0.00050076 Palavra1 -SpacedOut-Set 0.00049688 Palavra1 -SpacedOut-Set 0.00049901 Palavra1 -SpacedOut-Set 0.00051085 Palavra1 -SpacedOut-Set 0.00049968 Palavra1 -SpacedOut-Set 0.00050591 Palavra1 -SpacedOut-Set 0.00055768 Palavra1 -SpacedOut-Set 0.00057411 Palavra1 -SpacedOut-Set 0.00066678 Palavra1 -SpacedOut-Set 0.00075516 Palavra1 -SpacedOut-Set 0.00075664 Palavra1 -SpacedOut-Set 0.00036580 Palavra2 -SpacedOut-Set 0.00034920 Palavra2 -SpacedOut-Set 0.00034764 Palavra2 -SpacedOut-Set 0.00034583 Palavra2 -SpacedOut-Set 0.00038921 Palavra2 -SpacedOut-Set 0.00040805 Palavra2 -SpacedOut-Set 0.00039946 Palavra2 -SpacedOut-Set 0.00038509 Palavra2 -SpacedOut-Set 0.00043671 Palavra2 -SpacedOut-Set 0.00046260 Palavra2 -SpacedOut-Set 0.00055967 Palavra2 -SpacedOut-Set 0.00086276 Palavra3 -SpacedOut-Set 0.00074707 Palavra3 -SpacedOut-Set 0.00072958 Palavra3 -SpacedOut-Set 0.00076158 Palavra3 -SpacedOut-Set 0.00073966 Palavra3 -SpacedOut-Set 0.00075630 Palavra3 -SpacedOut-Set 0.00075116 Palavra3 -SpacedOut-Set 0.00080743 Palavra3 -SpacedOut-Set 0.00078968 Palavra3 -SpacedOut-Set 0.00078628 Palavra3 -SpacedOut-Set 0.00081656 Palavra3 -SpacedOut-Set 0.00085816 Palavra3 -SpacedOut-Set 0.00092962 Palavra3 -SpacedOut-Set 0.00086993 Palavra4 -SpacedOut-Set 0.00090704 Palavra4 -SpacedOut-Set 0.00092107 Palavra4 -SpacedOut-Set 0.00103401 Palavra4 -SpacedOut-Set 0.00101426 Palavra4 -SpacedOut-Set 0.00102612 Palavra4 -SpacedOut-Set 0.00102701 Palavra4 -SpacedOut-Set 0.00108903 Palavra4 -SpacedOut-Set 0.00108427 Palavra4 -SpacedOut-Set 0.00115604 Palavra4 -SpacedOut-Set 0.00121940 Palavra4 -SpacedOut-Set 0.00118601 Palavra4 -SpacedOut-Set 0.00124859 Palavra4 -SpacedOut-Set 0.00127628 Palavra4 -SpacedOut-Set 0.00131527 Palavra4 -SpacedOut-Set 0.00128051 Palavra4 -SpacedOut-Set 0.00087217 Palavra5 -SpacedOut-Set 0.00086545 Palavra5 -SpacedOut-Set 0.00085760 Palavra5 -SpacedOut-Set 0.00086703 Palavra5 -SpacedOut-Set 0.00086089 Palavra5 -SpacedOut-Set 0.00086985 Palavra5 -SpacedOut-Set 0.00087908 Palavra5 -SpacedOut-Set 0.00094951 Palavra5 -SpacedOut-Set 0.00093798 Palavra5 -SpacedOut-Set 0.00101915 Palavra5 -SpacedOut-Set 0.00105362 Palavra5 -SpacedOut-Set 0.00114245 Palavra5 -SpacedOut-Set 0.00086675 Palavra6 -SpacedOut-Set 0.00083753 Palavra6 -SpacedOut-Set 0.00085745 Palavra6 -SpacedOut-Set 0.00091928 Palavra6 -SpacedOut-Set 0.00092847 Palavra6 -SpacedOut-Set 0.00092950 Palavra6 -SpacedOut-Set 0.00092398 Palavra6 -SpacedOut-Set 0.00097609 Palavra6 -SpacedOut-Set 0.00096500 Palavra6 -SpacedOut-Set 0.00096837 Palavra6 -SpacedOut-Set 0.00094996 Palavra6 -SpacedOut-Set 0.00096642 Palavra6 -SpacedOut-Set 0.00095915 Palavra6 -SpacedOut-Set 0.00112180 Palavra6 -SpacedOut-Set 0.00124384 Palavra6 -SpacedOut-Set 0.00111052 Palavra6 -SpacedOut-Set 0.00085772 Palavra7 -SpacedOut-Set 0.00085482 Palavra7 -SpacedOut-Set 0.00084537 Palavra7 -SpacedOut-Set 0.00089000 Palavra7 -SpacedOut-Set 0.00089200 Palavra7 -SpacedOut-Set 0.00092513 Palavra7 -SpacedOut-Set 0.00088558 Palavra7 -SpacedOut-Set 0.00093751 Palavra7 -SpacedOut-Set 0.00095301 Palavra7 -SpacedOut-Set 0.00103750 Palavra7 -SpacedOut-Set 0.00108564 Palavra7 -SpacedOut-Set 0.00111246 Palavra7 -SpacedOut-Lista 0.00074141 Palavra1 -SpacedOut-Lista 0.00111852 Palavra1 -SpacedOut-Lista 0.00130646 Palavra1 -SpacedOut-Lista 0.00154084 Palavra1 -SpacedOut-Lista 0.00177913 Palavra1 -SpacedOut-Lista 0.00213201 Palavra1 -SpacedOut-Lista 0.00240500 Palavra1 -SpacedOut-Lista 0.00278452 Palavra1 -SpacedOut-Lista 0.00309604 Palavra1 -SpacedOut-Lista 0.00355401 Palavra1 -SpacedOut-Lista 0.00386300 Palavra1 -SpacedOut-Lista 0.00424208 Palavra1 -SpacedOut-Lista 0.00056604 Palavra2 -SpacedOut-Lista 0.00080504 Palavra2 -SpacedOut-Lista 0.00093928 Palavra2 -SpacedOut-Lista 0.00112151 Palavra2 -SpacedOut-Lista 0.00125079 Palavra2 -SpacedOut-Lista 0.00149639 Palavra2 -SpacedOut-Lista 0.00168195 Palavra2 -SpacedOut-Lista 0.00183189 Palavra2 -SpacedOut-Lista 0.00222988 Palavra2 -SpacedOut-Lista 0.00241818 Palavra2 -SpacedOut-Lista 0.00273303 Palavra2 -SpacedOut-Lista 0.00104704 Palavra3 -SpacedOut-Lista 0.00163529 Palavra3 -SpacedOut-Lista 0.00192997 Palavra3 -SpacedOut-Lista 0.00221629 Palavra3 -SpacedOut-Lista 0.00258633 Palavra3 -SpacedOut-Lista 0.00303540 Palavra3 -SpacedOut-Lista 0.00346382 Palavra3 -SpacedOut-Lista 0.00395972 Palavra3 -SpacedOut-Lista 0.00424569 Palavra3 -SpacedOut-Lista 0.00479251 Palavra3 -SpacedOut-Lista 0.00525875 Palavra3 -SpacedOut-Lista 0.00677400 Palavra3 -SpacedOut-Lista 0.00657936 Palavra3 -SpacedOut-Lista 0.00121225 Palavra4 -SpacedOut-Lista 0.00208915 Palavra4 -SpacedOut-Lista 0.00259381 Palavra4 -SpacedOut-Lista 0.00315824 Palavra4 -SpacedOut-Lista 0.00373281 Palavra4 -SpacedOut-Lista 0.00443922 Palavra4 -SpacedOut-Lista 0.00518325 Palavra4 -SpacedOut-Lista 0.00596505 Palavra4 -SpacedOut-Lista 0.00646271 Palavra4 -SpacedOut-Lista 0.00692357 Palavra4 -SpacedOut-Lista 0.00735184 Palavra4 -SpacedOut-Lista 0.00793940 Palavra4 -SpacedOut-Lista 0.00846387 Palavra4 -SpacedOut-Lista 0.00916570 Palavra4 -SpacedOut-Lista 0.00963827 Palavra4 -SpacedOut-Lista 0.01037596 Palavra4 -SpacedOut-Lista 0.00128569 Palavra5 -SpacedOut-Lista 0.00195449 Palavra5 -SpacedOut-Lista 0.00226956 Palavra5 -SpacedOut-Lista 0.00274409 Palavra5 -SpacedOut-Lista 0.00318184 Palavra5 -SpacedOut-Lista 0.00366377 Palavra5 -SpacedOut-Lista 0.00418772 Palavra5 -SpacedOut-Lista 0.00499218 Palavra5 -SpacedOut-Lista 0.00584401 Palavra5 -SpacedOut-Lista 0.00604318 Palavra5 -SpacedOut-Lista 0.00662763 Palavra5 -SpacedOut-Lista 0.00704762 Palavra5 -SpacedOut-Lista 0.00124798 Palavra6 -SpacedOut-Lista 0.00192835 Palavra6 -SpacedOut-Lista 0.00228367 Palavra6 -SpacedOut-Lista 0.00284413 Palavra6 -SpacedOut-Lista 0.00349846 Palavra6 -SpacedOut-Lista 0.00401861 Palavra6 -SpacedOut-Lista 0.00453526 Palavra6 -SpacedOut-Lista 0.00530717 Palavra6 -SpacedOut-Lista 0.00585294 Palavra6 -SpacedOut-Lista 0.00620948 Palavra6 -SpacedOut-Lista 0.00649839 Palavra6 -SpacedOut-Lista 0.00698367 Palavra6 -SpacedOut-Lista 0.00736459 Palavra6 -SpacedOut-Lista 0.00785487 Palavra6 -SpacedOut-Lista 0.00846656 Palavra6 -SpacedOut-Lista 0.00895574 Palavra6 -SpacedOut-Lista 0.00120525 Palavra7 -SpacedOut-Lista 0.00193417 Palavra7 -SpacedOut-Lista 0.00226202 Palavra7 -SpacedOut-Lista 0.00267276 Palavra7 -SpacedOut-Lista 0.00313573 Palavra7 -SpacedOut-Lista 0.00370986 Palavra7 -SpacedOut-Lista 0.00422849 Palavra7 -SpacedOut-Lista 0.00497429 Palavra7 -SpacedOut-Lista 0.00556311 Palavra7 -SpacedOut-Lista 0.00599863 Palavra7 -SpacedOut-Lista 0.00645830 Palavra7 -SpacedOut-Lista 0.00708859 Palavra7 diff --git a/script/benchmark.py b/script/benchmark.py deleted file mode 100644 index 7a3502e..0000000 --- a/script/benchmark.py +++ /dev/null @@ -1,108 +0,0 @@ -import os -import time -from unittest.mock import patch -from hangman import spacedOut as spacedOut_lista # versão que usa lista -from hangmanOtimizado import spacedOut as spacedOut_set # versão que usa set - -# cria a pasta results se não existir -os.makedirs("results", exist_ok=True) - -# palavras de teste -palavras_teste = [ - "python", - "ufcg", - "benchmark", - "proclameiud", - "fundeiorspa", - "juntarexico", - "campolidrue", -] - -# chutes programados por palavra simulando até 6 erros, repetindo letras erradas -chutes_por_palavra = { - "python": ["a","a","e","e","i","i","o","p","y","t","h","n"], - "ufcg": ["a","a","e","e","i","i","o","u","f","c","g"], - "benchmark": ["z","z","x","x","q","q","w","w","e","b","n","c","h"], - "proclameiud": ["a","a","o","o","e","e","i","i","u","u","p","r","c","l","m","d"], - "fundeiorspa": ["z","z","x","x","y","y","a","f","u","n","d","e"], - "juntarexico": ["b","b","c","c","d","d","e","e","f","f","g","g","j","u","n","t"], - "campolidrue": ["z","z","x","x","y","y","a","c","m","p","o","l"], -} - -REPETICOES = 100000 - -with patch("pygame.display.set_mode"): - # abre o arquivo para sobrescrever - with open("results/benchmark3.txt", "w") as f: - f.write("Method Time(ms) Sample\n\n") - - # ======= Benchmark usando set ======= - f.write("# Benchmark SpacedOut-Set (erros repetidos)\n") - for idx, palavra in enumerate(palavras_teste, start=1): - guessed = set() - for chute in chutes_por_palavra.get(palavra, []): - start = time.perf_counter() - for _ in range(REPETICOES): - resultado = spacedOut_set(palavra, guessed) - fim = time.perf_counter() - - tempo_medio = (fim - start) * 1000 / REPETICOES - f.write(f"SpacedOut-Set {tempo_medio:.8f} Palavra{idx}\n") - guessed.add(chute.upper()) - - f.write("\n") - - # ======= Benchmark usando lista ======= - f.write("# Benchmark SpacedOut-Lista (erros repetidos)\n") - for idx, palavra in enumerate(palavras_teste, start=1): - guessed = [] - for chute in chutes_por_palavra.get(palavra, []): - start = time.perf_counter() - for _ in range(REPETICOES): - resultado = spacedOut_lista(palavra, guessed) - fim = time.perf_counter() - - tempo_medio = (fim - start) * 1000 / REPETICOES - f.write(f"SpacedOut-Lista {tempo_medio:.8f} Palavra{idx}\n") - guessed.append(chute.upper()) - -print("✅ Benchmark finalizado! Resultados em results/benchmark3.txt") - - -# #antes da otimizacao -# import os -# import time -# from unittest.mock import patch -# from hangman import spacedOut - -# # cria a pasta results se não existir -# os.makedirs("results", exist_ok=True) - -# # palavras de teste e chutes programados -# palavras_teste = ["python", "ufcg", "benchmark"] -# chutes = ["a", "a", "a", "a", "p", "y", "t", "h", "o", "n", "u", "f", "c", "g", "b", "e"] - -# # número de repetições para cada execução -# REPETICOES = 100000 - -# # desativa temporariamente a abertura da janela do pygame -# with patch("pygame.display.set_mode"): -# with open("results/benchmark2.txt", "w") as f: -# f.write("Method Time(ms) Sample\n") - -# for idx, palavra in enumerate(palavras_teste, start=1): -# guessed = [] -# for chute in chutes: -# start = time.perf_counter() -# for _ in range(REPETICOES): -# resultado = spacedOut(palavra, guessed) -# fim = time.perf_counter() - -# # tempo médio em milissegundos -# tempo_medio = (fim - start) * 1000 / REPETICOES -# f.write(f"SpacedOut {tempo_medio:.8f} Palavra{idx}\n") - -# guessed.append(chute.upper()) - -# print("✅ Benchmark finalizado! Resultados em results/benchmark.txt") - diff --git a/script/plot.R b/script/plot.R deleted file mode 100644 index 9e35056..0000000 --- a/script/plot.R +++ /dev/null @@ -1,37 +0,0 @@ -# Se o pacote não tiver instalado na máquina. -#install.packages('ggplot2', repos = "http://cran.us.r-project.org") - -library('ggplot2') - -args <- commandArgs() - -data = read.table(args[length(args)], header = T) -ggplot(data, aes(x = Sample, y = Time, colour = Method)) + geom_line() - - - - -# library('ggplot2') - -# # Ler arquivo -# data <- read.table("C:/Users/letic/Hangman/results/benchmark3.txt", header = TRUE) - -# # Renomear colunas para facilitar o ggplot -# colnames(data) <- c("Method", "Time", "Sample") - -# # Criar PDF -# pdf("../results/benchmark3_plot.pdf", width = 8, height = 6) - -# # Gerar gráfico -# ggplot(data, aes(x = Sample , y = Time, colour = Method, group = Method)) + -# geom_line() + -# geom_point() + -# labs( -# title = "Comparação SpacedOut List vs Set", -# x = "Sample", -# y = "Tempo por execução (s)" -# ) + -# theme_minimal() - -# # Fechar PDF -# dev.off()