-"""Hangman.py, a simple wxPython game, inspired by the old
-bsd game by Ken Arnold.
+"""Hangman.py, a simple wxPython game, inspired by the
+old bsd game by Ken Arnold.
From the original man page:
In hangman, the computer picks a word from the on-line
class WordFetcher:
def __init__(self, filename, min_length = 5):
self.min_length = min_length
+ print "Trying to open file %s" % (filename,)
try:
f = open(filename, "r")
except:
print "Couldn't open dictionary file %s, using build-ins" % (filename,)
self.words = self.builtin_words
+ self.filename = None
return
self.words = f.read()
self.filename = filename
def __init__(self, parent, id, pos=wxDefaultPosition, size=wxDefaultSize):
wxWindow.__init__(self, parent, id, pos, size)
self.SetBackgroundColour(wxNamedColour('white'))
+ if wxPlatform == '__WXGTK__':
+ self.font = wxFont(12, wxMODERN, wxNORMAL, wxNORMAL)
+ else:
+ self.font = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
self.SetFocus()
def StartGame(self, word):
self.word = word
def Draw(self, dc = None):
if not dc:
dc = wxClientDC(self)
+ dc.SetFont(self.font)
dc.Clear()
(x,y) = self.GetSizeTuple()
x1 = x-200; y1 = 20
for letter in self.guess:
guesses = guesses + letter
dc.DrawText("guessed:", x1, 70)
- dc.DrawText(guesses[:13], x1+70, 70)
- dc.DrawText(guesses[13:], x1+70, 90)
+ dc.DrawText(guesses[:13], x1+80, 70)
+ dc.DrawText(guesses[13:], x1+80, 90)
dc.SetUserScale(x/1000., y/1000.)
self.DrawVictim(dc)
def DrawVictim(self, dc):
def Notify(self):
apply(self.func, ())
+class HangmanDemoFrame(wxFrame):
+ def __init__(self, wf, parent, id, pos, size):
+ wxFrame.__init__(self, parent, id, "Hangman demo", pos, size)
+ self.demo = HangmanDemo(wf, self, -1, wxDefaultPosition, wxDefaultSize)
+ def OnCloseWindow(self, event):
+ self.demo.timer.Stop()
+ self.Destroy()
+
class AboutBox(wxDialog):
def __init__(self, parent,wf):
wxDialog.__init__(self, parent, -1, "About Hangman", wxDefaultPosition, wxSize(350,450))
urls = [ 'wxPython home', 'http://208.240.253.245/wxPython/main.html',
'slashdot.org', 'http://slashdot.org/',
'cnn.com', 'http://cnn.com',
- 'The new york Times', 'http://www.nytimes.com',
- 'De Volkskrant', 'http://www.volkskrant.nl/frameless/25000006.html']
+ 'The New York Times', 'http://www.nytimes.com',
+ 'De Volkskrant', 'http://www.volkskrant.nl/frameless/25000006.html',
+ 'Gnu GPL', 'http://www.fsf.org/copyleft/gpl.html',
+ 'Bijbel: Genesis', 'http://www.coas.com/bijbel/gn1.htm']
urlmenu = wxMenu()
for item in range(0,len(urls),2):
urlmenu.Append(1020+item/2, urls[item], urls[item+1])
+ urlmenu.Append(1080, 'Other...', 'Enter an URL')
menu.AppendMenu(1012, 'URL', urlmenu, 'Use a webpage')
menu.Append(1013, 'Dump', 'Write contents to stdout')
menubar.Append(menu, "Dictionary")
EVT_MENU(self, 1005, self.OnWindowClose)
EVT_MENU(self, 1011, self.OnDictFile)
EVT_MENU_RANGE(self, 1020, 1020+len(urls)/2, self.OnDictURL)
+ EVT_MENU(self, 1080, self.OnDictURLSel)
EVT_MENU(self, 1013, self.OnDictDump)
EVT_MENU(self, 1090, self.OnHelpAbout)
EVT_CHAR(self.wnd, self.OnChar)
self.average = 0.0
self.OnGameNew(None)
def OnGameDemo(self, event):
- frame = wxFrame(self, -1, "Hangman demo", wxDefaultPosition, self.GetSize())
- demo = HangmanDemo(self.wf, frame, -1, wxDefaultPosition, wxDefaultSize)
+ frame = HangmanDemoFrame(self.wf, self, -1, wxDefaultPosition, self.GetSize())
frame.Show(TRUE)
def OnDictFile(self, event):
fd = wxFileDialog(self)
item = (event.GetId() - self.urloffset)*2
print "Trying to open %s at %s" % (self.urls[item], self.urls[item+1])
self.wf = URLWordFetcher(self.urls[item+1])
+ def OnDictURLSel(self, event):
+ msg = wxTextEntryDialog(self, "Enter the URL of the dictionary document", "Enter URL")
+ if msg.ShowModal() == wxID_OK:
+ url = msg.GetValue()
+ self.wf = URLWordFetcher(url)
def OnDictDump(self, event):
print self.wf.words
def OnHelpAbout(self, event):
class MyApp(wxApp):
def OnInit(self):
- print "Reading word list"
- wf = WordFetcher("/usr/share/games/hangman-words")
- #wf = URLWordFetcher("http://www.tue.nl")
+ if wxPlatform == '__WXGTK__':
+ defaultfile = "/usr/share/games/hangman-words"
+ elif wxPlatform == '__WXMSW__':
+ defaultfile = "c:\\windows\\hardware.txt"
+ else:
+ defaultfile = ""
+ wf = WordFetcher(defaultfile)
frame = MyFrame(wf)
self.SetTopWindow(frame)
frame.Show(TRUE)