import string
import os
import time
import random
from tkinter import *
import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk, ImageDraw, ImageFont
'''
Permulaian dari kodingan konsole Code
'''
class hangman:
played_word = ""
gameboard = []
gameboard_finished = []
guess = ''
guess_archieve = ['Jumlah Tebakan:']
lives = ['Kesempatan Bermain:']
end_state = False
# Daftar kata-kata
# word_list = ["a"*9]
word_list = ['mutlak','benar','terserap','menonjolkan','aktivis','sebenarnya','aktualitas','remaja','mempengaruhi','terpengaruh','udara','waspada','sepanjangwaktu','mengalegorisasikan','persekutuan','aliansi','kiasan','sindiran','baik','samasekali','memperkuat','analisis','semu','tampaknya','penampilan','menangkap','menilai','penilaian','anggapan','astronomis','sikap','rata-rata','sadar','kesadaran','bayi','padadasarnya','tongkat','kepercayaan','keyakinan','besar','darah','berbasisluas','tanpahenti','pusat','bersertifikat','nyanyian','klaim','rahasia','memikirkan','tanggungjawab','komentar','komentator','lengkap','samasekali','memahami','terpadu','curhat','dugaan','hatinurani','kesadaran','besar','sangat']
def init(self):
self.played_word = ""
self.gameboard = []
self.gameboard_finished = []
self.guess = ''
self.guess_archieve = ['Jumlah Tebakan:']
self.lives = ['Kesempatan Bermain:']
self.end_state = False
# self.word_list = ["a"*5]
def set_Word(self):
word = random.choice(self.word_list)
self.played_word = word
def set_finished_board(self,word):
word_list_finished = list(word)
self.gameboard_finished = word_list_finished
def set_create_board(self,word):
word_list_playing = ['_'] * len(word)
self.gameboard = word_list_playing
def set_move(self,guess,location):
self.gameboard[location] = guess
def set_guess(self,player_guess):
if(player_guess in self.guess_archieve):
print("Anda telah coba bermain " + player_guess)
return (-2,player_guess)
elif(player_guess in self.gameboard_finished):
for position,char in enumerate(self.gameboard_finished):
if char== player_guess:
self.set_move(player_guess,position)
self.guess_archieve.append(player_guess)
return (1,"")
else:
self.lives.append('x')
self.guess_archieve.append(player_guess)
return (0,player_guess)
def get_eg_status(self):
if(len(self.lives) == 6):
os.system('cls' if os.name == 'nt' else 'clear')
self.end_state = True
# messagebox.showinfo("PERMAINAN SELESAI!", "PERMAINAN SELESAI: Terima kasih telah bermain! \n Jawaban:\t" + str(''.join([str(elem) for elem in self.gameboard_finished])))
# main_form.quit()
return (-1,"PERMAINAN SELESAI: Terima kasih telah bermain! \n Jawaban:\n" + str(''.join([str(elem) for elem in self.gameboard_finished])))
elif(self.gameboard == self.gameboard_finished):
os.system('cls' if os.name == 'nt' else 'clear')
self.end_state = True
# messagebox.showinfo("Selamat!", "Anda menang! Terima kasih telah bermain")
# main_form.quit()
return (1,"Anda menang! Terima kasih telah bermain!")
else:
return (0,"")
def get_user_guess(self,letter):
char = str(letter)
if(len(char) == 1 and char.isalpha()):
return self.set_guess(char.lower())
else:
print("Tebakan harus satu kata!")
return (-1,"Tebakan harus satu kata!")
''' Akhir dari kodingan Console '''
''' TNS TKINTER START '''
def setupWindow(): window = tk.Tk() window.geometry("1280x832")
canvas = tk.Canvas(window, width = 1280, height = 832)
canvas.pack()
return canvas,window
def startGame(): def startGame(window): game = hangman() game.set_Word() game.set_create_board(game.played_word) game.set_finished_board(game.played_word) while len(game.played_word) > 9: game.set_Word() game.set_create_board(game.played_word) game.set_finished_board(game.played_word) window.destroy() mainGame(game) # return game
canvas,window = setupWindow()
bgImage = ImageTk.PhotoImage(Image.open("assets/backgroundMainpage.png"))
bg = canvas.create_image(0, 0, image=bgImage, anchor=tk.NW)
startImage = ImageTk.PhotoImage(Image.open("assets/tombolMulai.png"))
startButton = canvas.create_image(573+50, 483+100, image=startImage)
canvas.tag_bind(startButton, "<Button-1>", lambda func: startGame(window))
window.mainloop()
def mainGame(game,guessResult=(1,""),gameState=(0,"")):
images=[]
def create_rectangle(currWin,x,y,a,b,**options):
win = currWin
if 'alpha' in options:
# Calculate the alpha transparency for every color(RGB)
alpha = int(options.pop('alpha') * 255)
# Use the fill variable to fill the shape with transparent color
fill = options.pop('fill')
fill = win.winfo_rgb(fill) + (alpha,)
image = Image.new('RGBA', (a-x, b-y), fill)
images.append(ImageTk.PhotoImage(image))
canvas.create_image(x, y, image=images[-1], anchor='nw')
canvas.create_rectangle(x, y,a,b, **options)
def endGame(window):
window.destroy()
startGame()
def create_image(size, bgColor, message, font, fontColor):
W, H = size
image = Image.new('RGBA', size, bgColor)
draw = ImageDraw.Draw(image)
_, _, w, h = draw.textbbox((0, 0), message, font=font)
draw.text(((W-w)/2, (H-h)/2), message, font=font, fill=fontColor)
return image
def tebak(input,window):
# print(input)
tempGuessResult = game.get_user_guess(input.lower())
tempGameState = game.get_eg_status()
print(game.played_word,game.gameboard,game.gameboard_finished)
window.destroy()
mainGame(game,tempGuessResult,tempGameState)
def okGagalTebak(window):
window.destroy()
mainGame(game)
canvas,window = setupWindow()
print(game.played_word,game.gameboard,game.gameboard_finished)
bgImage = ImageTk.PhotoImage(Image.open("assets/background.png"))
bg = canvas.create_image(0, 0, image=bgImage, anchor=tk.NW)
questionImg = ImageTk.PhotoImage(Image.open("assets/kata berisi {} huruf.png".format(str(len(game.played_word)))))
questionLabel = canvas.create_image(391, 165, image=questionImg, anchor=tk.NW)
instructionImg = ImageTk.PhotoImage(Image.open("assets/silahkan tebak 1 huruf.png"))
instructionLabel = canvas.create_image(335, 449, image=instructionImg, anchor=tk.NW)
cekButtonImg = ImageTk.PhotoImage(Image.open("assets/tombolCek.png"))
cekButton = canvas.create_image(715, 562-60+30, image=cekButtonImg, anchor=tk.NW)
canvas.tag_bind(cekButton, "<Button-1>", lambda func: tebak(e1.get(),window))
fntMain = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 29)
outMain = create_image((194,30),(255,255,255,0),"LANGKAH KE-{}".format(len(game.guess_archieve)),fntMain,'white')
letterImgMain = ImageTk.PhotoImage(outMain)
letterLabelMain = canvas.create_image(1013+100, 81, image=letterImgMain)
# startImage = ImageTk.PhotoImage(Image.open("assets/tombolMulai.png"))
# startButton = canvas.create_image(573+50, 483+100, image=startImage)
# canvas.tag_bind(startButton, "<Button-1>", startGame)
# tes = ImageTk.PhotoImage(Image.open("assets/huruf/Frame.png"))
# tesImg = ImageTk.PhotoImage(Image.open("assets/huruf/Frame.png"))
# tesLbl = canvas.create_image(591, 255+50, image=tesImg)
# def drawCurrentWord():
# canvasX = canvas
# global canvas
wordStr = game.gameboard
# wordStr = "_"*3
for i in range(len(wordStr)):
startX = (1230 - (96 * len(wordStr) + 19 * (len(wordStr) - 1))) // 2 + 75
# print(startX-591)
startY = 255+50
mid= len(wordStr) //2
# currX = startX - (96+19) * (mid-i) if i<=mid else startX + (96+19) * (i-mid)
currX = startX + (96+19) * (i)
print(currX)
# currX += (1230 - (96 * len(wordStr) + 19 * (len(wordStr) - 1))) // 2 + 25
# print((1230 - (96 * len(wordStr) + 19 * (len(wordStr) - 1))) // 2 + 25)
# img = ImageTk.PhotoImage(Image.open("assets/huruf/Frame.png"))
if game.gameboard[i] == '_':
exec('tesImg{} = ImageTk.PhotoImage(Image.open("assets/huruf/Frame.png"))'.format(str(i)))
exec('tesLbl = canvas.create_image(currX, startY, image=tesImg{})'.format(str(i), str(i)))
else:
ordWord = ord(game.gameboard[i].lower()) - ord("a") + 1
file="assets/huruf/Frame({}).png".format(ordWord)
exec('tesImg{} = ImageTk.PhotoImage(Image.open(file))'.format(str(i)))
exec('tesLbl = canvas.create_image(currX, startY, image=tesImg{})'.format(str(i), str(i)))
print(currX,startY)
if (gameState[0]!=0):
bgImage = ImageTk.PhotoImage(Image.open("assets/background.png"))
bg = canvas.create_image(0, 0, image=bgImage, anchor=tk.NW)
# create_rectangle(window,458, 532, 458+232, 562+85, fill= "white", alpha= .9)
# create_rectangle(window,0, 0, 1280, 832, fill= "black", alpha= .51)
# errorImg = ImageTk.PhotoImage(Image.open("assets/errorImage.png"))
# errorLabel = canvas.create_image(307, 122, image=errorImg, anchor=tk.NW)
if(gameState[0]==1):
cardMenangImage = ImageTk.PhotoImage(Image.open("assets/menang.png"))
cardMenang = canvas.create_image(307, 79, image=cardMenangImage, anchor=tk.NW)
# out = Image.new("RGB", (575, 72), (255, 200, 200))
# d = ImageDraw.Draw(out)
# d.multiline_text((0, 0), ""+"-".join(game.gameboard_finished), font=fnt, fill=(255, 255, 255), align="center")
fnt = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 63)
out = create_image((575,72),(255,255,255,0),"-".join(game.gameboard_finished),fnt,'white')
letterImg = ImageTk.PhotoImage(out)
letterLabel = canvas.create_image(637, 399+65-50, image=letterImg)
fnt2 = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 35)
out2 = create_image((575,72),(255,255,255,0),"KATA:",fnt2,'white')
letterImg2 = ImageTk.PhotoImage(out2)
letterLabel2 = canvas.create_image(637, 399-50, image=letterImg2)
fnt3 = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 45)
out3 = create_image((575,72),(255,255,255,0),"DITEBAK DALAM",fnt3,'white')
letterImg3 = ImageTk.PhotoImage(out3)
letterLabel3 = canvas.create_image(637, 399+65+85-50-10, image=letterImg3)
fnt4 = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 45)
out4 = create_image((575,72),(255,255,255,0),"{} LANGKAH".format(len(game.guess_archieve)-1),fnt4,'white')
letterImg4 = ImageTk.PhotoImage(out4)
letterLabel4 = canvas.create_image(637, 399+65+85+55-50-10, image=letterImg4)
okButtonImg = ImageTk.PhotoImage(Image.open("assets/tombolSelesai.png"))
okButton = canvas.create_image(544, 511+50+20, image=okButtonImg, anchor=tk.NW)
canvas.tag_bind(okButton, "<Button-1>", lambda func: endGame(window))
if(gameState[0]==-1):
cardKalahImage = ImageTk.PhotoImage(Image.open("assets/kalah.png"))
cardKalah = canvas.create_image(307, 79, image=cardKalahImage, anchor=tk.NW)
fnt = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 63)
out = create_image((519+100,72),(255,255,255,1),"-".join(game.gameboard_finished),fnt,'white')
letterImg = ImageTk.PhotoImage(out)
letterLabel = canvas.create_image(377+250, 482+65-50, image=letterImg)
okButtonImg = ImageTk.PhotoImage(Image.open("assets/tombolSelesai.png"))
okButton = canvas.create_image(544, 511+50+20, image=okButtonImg, anchor=tk.NW)
canvas.tag_bind(okButton, "<Button-1>", lambda func: endGame(window))
# return
elif (guessResult[0] == 0):
# exec('tesImg{} = ImageTk.PhotoImage(Image.open("assets/huruf/Frame.png"))'.format(str(i)))
# exec('tesLbl = canvas.create_image(currX, startY, image=tesImg{})'.format(str(i), str(i)))
create_rectangle(window,458, 532, 458+232, 562+85, fill= "white", alpha= .9)
create_rectangle(window,0, 0, 1280, 832, fill= "black", alpha= .51)
errorImg = ImageTk.PhotoImage(Image.open("assets/errorImage.png"))
errorLabel = canvas.create_image(307, 122, image=errorImg, anchor=tk.NW)
out = Image.new("RGBA", (45, 73), (255, 255, 255,0))
fnt = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 73)
d = ImageDraw.Draw(out)
d.multiline_text((0, 0), guessResult[1], font=fnt, fill=(255, 255, 255))
letterImg = ImageTk.PhotoImage(out)
letterLabel = canvas.create_image(620+10, 391+35, image=letterImg)
okButtonImg = ImageTk.PhotoImage(Image.open("assets/tombolOK.png"))
okButton = canvas.create_image(544, 511, image=okButtonImg, anchor=tk.NW)
canvas.tag_bind(okButton, "<Button-1>", lambda func: okGagalTebak(window))
backButtonImg = ImageTk.PhotoImage(Image.open("assets/backButton.png"))
backButton = canvas.create_image(63, 67, image=backButtonImg, anchor=tk.NW)
canvas.tag_bind(backButtonImg, "<Button-1>", lambda func: endGame(window))
elif (guessResult[0] == -1):
create_rectangle(window,458, 532, 458+232, 562+85, fill= "white", alpha= .9)
create_rectangle(window,0, 0, 1280, 832, fill= "black", alpha= .51)
errorImg = ImageTk.PhotoImage(Image.open("assets/errorImageOneCharacter.png"))
errorLabel = canvas.create_image(307, 122, image=errorImg, anchor=tk.NW)
okButtonImg = ImageTk.PhotoImage(Image.open("assets/tombolOK.png"))
okButton = canvas.create_image(544, 511, image=okButtonImg, anchor=tk.NW)
canvas.tag_bind(okButton, "<Button-1>", lambda func: okGagalTebak(window))
elif (guessResult[0] == -2):
create_rectangle(window,458, 532, 458+232, 562+85, fill= "white", alpha= .9)
create_rectangle(window,0, 0, 1280, 832, fill= "black", alpha= .51)
errorImg = ImageTk.PhotoImage(Image.open("assets/errorImageSudahCobaBermain.png"))
errorLabel = canvas.create_image(307, 122, image=errorImg, anchor=tk.NW)
out2 = Image.new("RGBA", (45, 73), (255, 255, 255,0))
fnt2 = ImageFont.truetype("assets/LuckiestGuy-Regular.ttf", 73)
d2 = ImageDraw.Draw(out2)
d2.multiline_text((0, 0), guessResult[1], font=fnt2, fill=(255, 255, 255))
letterImg2 = ImageTk.PhotoImage(out2)
letterLabel2 = canvas.create_image(620+10, 391+35, image=letterImg2)
print(guessResult[1])
okButtonImg = ImageTk.PhotoImage(Image.open("assets/tombolOK.png"))
okButton = canvas.create_image(544, 511, image=okButtonImg, anchor=tk.NW)
canvas.tag_bind(okButton, "<Button-1>", lambda func: okGagalTebak(window))
elif gameState[0] == 0 :
e1 = tk.Entry(canvas,width=3,font=('Arial',78),fg='#EAA727')
canvas.create_window(458+130, 562+30, window = e1)
backButtonImg = ImageTk.PhotoImage(Image.open("assets/backButton.png"))
backButton = canvas.create_image(63, 67, image=backButtonImg, anchor=tk.NW)
canvas.tag_bind(backButton, "<Button-1>", lambda func: endGame(window))
canvas.update()
# drawCurrentWord()
canvas.pack()
window.mainloop()
startGame()
# game.get_user_guess(game,letter.lower())