X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eeec36a21f727e66e95a2e6d8eb84a2dffb33a3a..6a94433573bab16bcfe85985333323523e4b8517:/utils/wxPython/tests/hangman.py diff --git a/utils/wxPython/tests/hangman.py b/utils/wxPython/tests/hangman.py index ab69d3773a..76b9622689 100644 --- a/utils/wxPython/tests/hangman.py +++ b/utils/wxPython/tests/hangman.py @@ -1,5 +1,5 @@ -"""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 @@ -20,11 +20,13 @@ from wxPython.wx import * 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 @@ -103,6 +105,10 @@ class HangmanWnd(wxWindow): 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 @@ -140,6 +146,7 @@ class HangmanWnd(wxWindow): 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 @@ -155,8 +162,8 @@ class HangmanWnd(wxWindow): 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): @@ -213,6 +220,14 @@ class HangmanDemo(HangmanWnd): 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)) @@ -245,11 +260,14 @@ class MyFrame(wxFrame): 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") @@ -267,6 +285,7 @@ class MyFrame(wxFrame): 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) @@ -288,8 +307,7 @@ class MyFrame(wxFrame): 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) @@ -302,6 +320,11 @@ class MyFrame(wxFrame): 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): @@ -350,9 +373,13 @@ class MyFrame(wxFrame): 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)