#hangman.py from PythonCard import model,dialog import random def find_letters(letter,a_string): locations = [] start = 0 while a_string.find(letter,start,len(a_string)) != -1: location = a_string.find(letter,start,len(a_string)) locations.append(location) start = location + 1 return locations def replace_letters(string,locations,letter): new_string = '' for i in range(0,len(string)): if i in locations: new_string = new_string + letter else: new_string = new_string + string[i] return new_string class Hangman(model.Background): def on_initialize(self,event): self.currentword = "" f = open("words.txt",'r') self.lines = f.readlines() f.close() self.new_game() def new_game(self): self.components.stYourGuesses.text = "" self.currentword = random.choice(self.lines) self.currentword = self.currentword.strip() self.components.stDisplayWord.text = "" for a in range(len(self.currentword)): self.components.stDisplayWord.text += "-" self.components.foot2.visible = False self.components.foot1.visible = False self.components.arm1.visible = False self.components.arm2.visible = False self.components.body.visible = False self.components.head.visible = False def on_btnGuessWord_mouseClick(self,event): result = dialog.textEntryDialog(self,'What is the word','Hangman','the word') self.components.stYourGuesses.text = self.components.stYourGuesses.text + " " + result.text + " " if (result.text).strip() == (self.currentword).strip(): dialog.alertDialog(self,'You did it!','Hangman') self.new_game() else: self.wrong_guess() def wrong_guess(self): dialog.alertDialog(self,"WRONG!!",'Hangman') if self.components.head.visible == True: if self.components.body.visible == True: if self.components.arm1.visible == True: if self.components.arm2.visible == True: if self.components.foot1.visible == True: if self.components.foot2.visible == True: dialog.alertDialog(self,"You lost! Word was " + self.currentword,'Hangman') self.new_game() else: self.components.foot2.visible = True else: self.components.foot1.visible = True else: self.components.arm2.visible = True else: self.components.arm1.visible = True else: self.components.body.visible = True else: self.components.head.visible = True def on_btnGuessLetter_mouseClick(self,event): result = dialog.textEntryDialog(self,'enter the letter here:','Hangman','') guess = result.text if len(guess) == 1: self.components.stYourGuesses.text = self.components.stYourGuesses.text + " " + guess + " " if result.text in self.currentword: locations = find_letters(guess,self.currentword) self.components.stDisplayWord.text = replace_letters(self.components.stDisplayWord.text,locations,guess) if self.components.stDisplayWord.text.find('-') == -1: dialog.alertDialog(self,'You win!!!!!','Hangman') self.new_game() else: self.wrong_guess() else: dialog.alertDialog(self,'Type one letter only','Hangman') def on_cmdNewGame_command(self,event): self.new_game() app = model.Application(Hangman) app.MainLoop()
资源文件
{'application':{'type':'Application', 'name':'Template', 'backgrounds': [ {'type':'Background', 'name':'bgTemplate', 'title':u'Hangman', 'size':(560, 373), 'menubar': {'type':'MenuBar', 'menus': [ {'type':'Menu', 'name':'menuFile', 'label':'&File', 'items': [ {'type':'MenuItem', 'name':'menuFileNewGame', 'label':'&New Game', 'command':'cmdNewGame', }, {'type':'MenuItem', 'name':'menuFileExit', 'label':'E&xit', 'command':'exit', }, ] }, ] }, 'components': [ {'type':'StaticText', 'name':'stYourGuesses', 'position':(28, 236), 'font':{'faceName': u'Tahoma', 'family': 'sansSerif', 'size': 10}, 'text':u'', }, {'type':'StaticText', 'name':'StaticText1', 'position':(26, 200), 'font':{'faceName': u'Tahoma', 'family': 'sansSerif', 'size': 10}, 'text':u'Your Guesses:', }, {'type':'StaticLine', 'name':'StaticLine2Copy', 'position':(86, 11), 'size':(4, 34), 'layout':'vertical', }, {'type':'StaticLine', 'name':'StaticLine3', 'position':(87, 10), 'size':(69, 4), 'layout':'horizontal', }, {'type':'StaticLine', 'name':'StaticLine2', 'position':(157, 10), 'size':(4, 160), 'layout':'vertical', }, {'type':'StaticLine', 'name':'StaticLine1', 'position':(133, 171), 'size':(50, 4), 'layout':'horizontal', }, {'type':'StaticText', 'name':'stDisplayWord', 'position':(247, 87), 'font':{'style': 'bold', 'faceName': u'Courier New', 'family': 'sansSerif', 'size': 14}, 'text':u'----------', }, {'type':'Button', 'name':'btnGuessWord', 'position':(252, 128), 'size':(120, -1), 'label':u'Guess the word', }, {'type':'Button', 'name':'btnGuessLetter', 'position':(250, 32), 'size':(120, -1), 'label':u'Guess a letter', }, {'type':'StaticText', 'name':'foot2', 'position':(88, 115), 'enabled':False, 'font':{'faceName': 'Tahoma', 'family': 'sansSerif', 'size': 22}, 'text':u'\', }, {'type':'StaticText', 'name':'foot1', 'position':(69, 115), 'enabled':False, 'font':{'faceName': 'Tahoma', 'family': 'sansSerif', 'size': 22}, 'text':u'/', }, {'type':'StaticLine', 'name':'body', 'position':(85, 65), 'size':(4, 55), 'font':{'style': 'bold', 'faceName': 'Tahoma', 'family': 'sansSerif', 'size': 8}, 'layout':'vertical', }, {'type':'StaticLine', 'name':'arm2', 'position':(94, 79), 'size':(36, 4), 'layout':'horizontal', }, {'type':'StaticLine', 'name':'arm1', 'position':(45, 79), 'size':(36, 4), 'layout':'horizontal', }, {'type':'StaticText', 'name':'head', 'position':(75, 29), 'enabled':False, 'font':{'faceName': 'Tahoma', 'family': 'sansSerif', 'size': 20}, 'text':u'O', }, ] # end components } # end background ] # end backgrounds } }