2011-03-27 6 views
0
from Tkinter import * 
import Tkinter as tk 
import tkMessageBox 
import time 
import re 
import string 
from random import randint 
print "Hangman v1.7 - by Josh & Paul" 
bsrly2 = False 
bsrly = False 
notlie = True 
turns = 8 
rec = '' 
exp = '^[a-z]+$' 
textfile = open('dictionary.txt', 'r') 
words = textfile.read().split() 
n = randint(0, len(words)-1) 
word = words[n] 
x = 0 
w = list(word) 
guess = '' 
bs = '' 
for letter in word: 
    if letter in guess: 
     bs += letter + ' ' 
    else: 
     bs += '_ ' 

bs = bs.upper() 


def MainProgram(): 
    global ui 
    global guess 
    global turns 
    global rec 
    global bs 
    global bsrly 
    global bsrly2 
    bs = '' 
    inp = ui.get().strip() 
    inp = inp.lower() 
    ui.delete(0, END) 
    if bsrly2 == True: 
     root.quit() 

    if inp == "": 
     tkMessageBox.showerror("Incorrect Entry", "Error: Please enter a letter") 

    elif len(inp) > 1: 
     tkMessageBox.showerror("Incorrect Entry", "Error: Please enter one letter") 

    elif inp in guess: 
     tkMessageBox.showerror("Incorrect Entry", "Error: You have already tried that letter") 

    elif not re.match(exp, inp): 
     tkMessageBox.showerror("Incorrect Entry", "Error: Please enter a letter") 

    else: 
     if inp not in word: 
      turns -= 1 

     if turns == 7: 
      img.configure(image=image0) 
     if turns == 6: 
      img.configure(image=image1) 
     if turns == 5: 
      img.configure(image=image2) 
     if turns == 4: 
      img.configure(image=image3) 
     if turns == 3: 
      img.configure(image=image4) 
     if turns == 2: 
      img.configure(image=image5) 
     if turns == 1: 
      img.configure(image=image6) 

     guess += ' ' + inp 
     if turns == 0: 
      img.configure(image=image7) 
      bsrly2 = True 

     if inp not in word: 
      upd.configure(text= "Wrong, try again") 
      rec += ' ' + inp 
     if inp in word: 
      upd.configure(text= "Thats correct!") 

     guess2 = rec.upper() 
     fb2.configure(text = "Wrong letters:" + guess2) 

     wait = 0 
     left = 0 
     for letter in word: 
      if letter in guess: 
       bs += letter + " " 
      else: 
       bs += '_ ' 
       left += 1 

     bs = bs.upper() 
     if left == 0: 
      bsrly = True 
     feedback.configure(text=bs) 
     bs = '' 
     if bsrly2 == True: 
      root 
      upd.configure(text="You lose, the word was " + word) 

     check() 
def check(): 
    if bsrly == True: 
     root.destroy() 
     root2 = Tk() 
     root2.wm_iconbitmap('hmn.ico') 
     root2.title("You Win!") 
     youwin = tk.PhotoImage(master=root2, file="YouWin.gif") 
     winer = Label(master=root2, image=youwin) 
     winer.image = youwin 
     winer.grid(row=0, rowspan=20) 
     wanaquit = Label(master=root2, text="Play Again?") 
     wanaquit.grid(row=21) 
     pbuton = Button(master=root2, text="Yes", command=root2.destroy) 
     pbuton.grid(row=22) 
     root2.mainloop() 

root = Tk() 
root.wm_iconbitmap('hmn.ico') 
root.title("Hangman v1.7") 
image = tk.PhotoImage(file="image.gif") 
image0 = tk.PhotoImage(file="image0.gif") 
image1 = tk.PhotoImage(file="image1.gif") 
image2 = tk.PhotoImage(file="image2.gif") 
image3 = tk.PhotoImage(file="image3.gif") 
image4 = tk.PhotoImage(file="image4.gif") 
image5 = tk.PhotoImage(file="image5.gif") 
image6 = tk.PhotoImage(file="image6.gif") 
image7 = tk.PhotoImage(file="image7.gif") 
content = tk.Frame(root, bg='black') 
namelbl = tk.Label(content, text="Enter a letter:", bg="black", fg="green") 
feedback = tk.Label(content, text=bs, bg="black", fg="green") 
rb = tk.Checkbutton(content, text="Music", bg="black", fg="green") 
slave = tk.Label(content, text="", bg="black", fg="green") 
slave2 = tk.Label(content, text="", bg="black", fg="green") 
upd = tk.Label(content, text="", bg="black", fg="green") 
fb2 = tk.Label(content, text="Used letters:", bg="black", fg="green") 
ui = tk.Entry(content) 
ui["width"] = 2 
img = tk.Label(master=content, image=image, bg="black") 
ok = tk.Button(content, text="Okay", bg="black", fg="green", command=MainProgram) 
ui.focus() 
ui.bind('<Return>', (lambda e: MainProgram())) 
content.grid(column=0, row=0) 
img.grid(column=0, row=0, columnspan=4) 
feedback.grid(column=0, row=1) 
fb2.grid(column=0, row=2) 
slave.grid(row=3) 
slave2.grid(row=5) 
upd.grid(row=4, columnspan=4) 
namelbl.grid(column=0, row=6) 
ui.grid(column=1, row=6, sticky=W) 
ok.grid(column=1, row=6) 
rb.grid(row=7) 
root.mainloop() 

ちょっと誰も、私はすぐにGUIでハングマンプログラムを作るために学校の割り当てがあります。スクリプトを再起動するにはどうすればよいですか?

You Winウィンドウで[はい]をクリックしたときにスクリプトを再開する方法を理解できないと、すべてがスムーズに実行されていますか?

+0

オンラインで宿題を投稿するように注意してください。それは、同級生がそれを見て、それを使うかもしれない少しのチャンスを作り出します。可能性は低いですが、それでも可能です。また、変数の名前をよくする必要があります。一見すると、rec、n、x、w、bsが何をするのかを知るべきです。私はそれを理解するためにコードを読む必要はありません。 :) –

答えて

0

プログラムロジックをモジュールのトップレベルに置くことで、関数に入れられるようになっています。これを済ませたら、あなたの機能をもう一度呼び出すだけです。コード構造では、プログラムを再起動することは不可能です(少なくとも、別のプログラムを書くことなく)。

編集:

例。関数の中で、このコードをカプセル化:

print "Hangman v1.7 - by Josh & Paul" 
bsrly2 = False 
bsrly = False 
notlie = True 
turns = 8 
rec = '' 
exp = '^[a-z]+$' 
textfile = open('dictionary.txt', 'r') 
words = textfile.read().split() 
n = randint(0, len(words)-1) 
word = words[n] 
x = 0 
w = list(word) 
guess = '' 
bs = '' 
for letter in word: 
    if letter in guess: 
     bs += letter + ' ' 
    else: 
     bs += '_ ' 

bs = bs.upper() 

上記のコードは、関数につながる:あなたの関数間で変数を渡すよう

def start(): 
    print "Hangman v1.7 - by Josh & Paul" 
    bsrly2 = False 
    bsrly = False 
    notlie = True 
    turns = 8 
    rec = '' 
    exp = '^[a-z]+$' 
    textfile = open('dictionary.txt', 'r') 
    words = textfile.read().split() 
    n = randint(0, len(words)-1) 
    word = words[n] 
    x = 0 
    w = list(word) 
    guess = '' 
    bs = '' 
    for letter in word: 
     if letter in guess: 
      bs += letter + ' ' 
     else: 
      bs += '_ ' 

    bs = bs.upper() 

あなたが残って多くの時間を持っていない場合は、グローバル変数に固執することができ、結果として得られるすべての関数をクラスに入れ、インスタンス変数を使用するのが最善の方法です。

+0

あなたは私に例を挙げることができますか?申し訳ありませんが最も可能性が最も高いこのサイトのnoob – ThatAussieScripter

+0

ありがとう – ThatAussieScripter

関連する問題