somewhat better organization; still a mess though. Don't know why I'm

committing...


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1987 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Harco de Hilster
1999-03-27 21:29:41 +00:00
parent 7214297d16
commit 0d236c34d0

View File

@@ -18,52 +18,64 @@ class WordFetcher:
return self.words[int(random.random()*len(self.words))] return self.words[int(random.random()*len(self.words))]
builtin_words = [ 'albatros', 'banana', 'electrometer', 'eggshell' ] builtin_words = [ 'albatros', 'banana', 'electrometer', 'eggshell' ]
class MyFrame(wxFrame): class HangmanWnd(wxWindow):
def __init__(self, wf): def __init__(self, parent, id):
self.wf = wf wxWindow.__init__(self, parent, id)
wxFrame.__init__(self, NULL, -1, "test threads", wxDefaultPosition, wxSize(300,200)) self.SetBackgroundColour(wxNamedColour('white'))
self.panel = wxPanel(self, -1) self.SetFocus()
self.panel.SetBackgroundColour(wxNamedColour('white')) self.frame = parent # ugly
self.panel.SetFocus() def StartGame(self, word):
menu = wxMenu() self.word = word
menu.Append(1001, "New") self.guess = []
menu.Append(1002, "End") self.tries = 0
menu.AppendSeparator() self.misses = 0
menu.Append(1003, "Exit") self.Draw()
self.cnt = 0; def EndGame(self):
menubar = wxMenuBar() self.misses = 7;
menubar.Append(menu, "Game") self.guess = map(chr, range(ord('a'),ord('z')+1))
self.SetMenuBar(menubar) self.Draw()
self.CreateStatusBar(2) def HandleKey(self, key):
EVT_MENU(self, 1001, self.OnGameNew) if self.guess.count(key):
EVT_MENU(self, 1002, self.OnGameEnd) self.frame.SetStatusText('Already guessed %s' % (key,),0)
EVT_MENU(self, 1003, self.OnWindowClose) return 0
EVT_CHAR(self.panel, self.OnChar) self.guess.append(key)
self.played = 0 self.guess.sort()
self.won = 0 self.tries = self.tries+1
self.history = [] if not key in self.word:
self.average = 0.0 self.misses = self.misses+1
self.OnGameNew(None) if self.misses == 7:
self.EndGame()
return 1
has_won = 1
for letter in self.word:
if not self.guess.count(letter):
has_won = 0
break
if has_won:
self.Draw()
return 2
self.Draw()
return 0
def Draw(self, dc = None): def Draw(self, dc = None):
if not dc: if not dc:
dc = wxClientDC(self.panel) dc = wxClientDC(self)
dc.Clear() dc.Clear()
(x,y) = self.panel.GetSizeTuple() (x,y) = self.GetSizeTuple()
x1 = x-150; y1 = 20 x1 = x-200; y1 = 20
for letter in self.word: for letter in self.word:
if self.guess.count(letter): if self.guess.count(letter):
dc.DrawText(letter, x1, y1) dc.DrawText(letter, x1, y1)
else: else:
dc.DrawText('.', x1, y1) dc.DrawText('.', x1, y1)
x1 = x1 + 10 x1 = x1 + 10
x1 = x-150 x1 = x-200
dc.DrawText("played: %d" % (self.played,), x1, 50) dc.DrawText("tries %d misses %d" % (self.tries,self.misses),x1,50)
if self.played: guesses = ""
percent = (100.*self.won)/self.played for letter in self.guess:
else: guesses = guesses + letter
percent = 0.0 dc.DrawText("guessed:", x1, 70)
dc.DrawText("won: %d (%g %%)" % (self.won, percent), x1, 70) dc.DrawText(guesses[:13], x1+70, 70)
dc.DrawText("average: %g" % (self.average,), x1, 90) dc.DrawText(guesses[13:], x1+70, 90)
dc.SetUserScale(x/1000., y/1000.) dc.SetUserScale(x/1000., y/1000.)
self.DrawVictim(dc) self.DrawVictim(dc)
def DrawVictim(self, dc): def DrawVictim(self, dc):
@@ -88,26 +100,59 @@ class MyFrame(wxFrame):
if ( self.misses == 6) : return if ( self.misses == 6) : return
dc.DrawLine(300,600,250,850) dc.DrawLine(300,600,250,850)
def OnPaint(self, event): def OnPaint(self, event):
dc = wxPaintDC(self.panel) dc = wxPaintDC(self)
self.Draw(dc) self.Draw(dc)
class MyFrame(wxFrame):
def __init__(self, wf):
self.wf = wf
wxFrame.__init__(self, NULL, -1, "hangman", wxDefaultPosition, wxSize(400,300))
self.wnd = HangmanWnd(self, -1)
menu = wxMenu()
menu.Append(1001, "New")
menu.Append(1002, "End")
menu.AppendSeparator()
menu.Append(1003, "Reset")
menu.AppendSeparator()
menu.Append(1004, "Exit")
menubar = wxMenuBar()
menubar.Append(menu, "Game")
menu = wxMenu()
menu.Append(1010, "Internal", "Use internal dictionary", TRUE)
menu.Append(1011, "ASCII File...")
menubar.Append(menu, "Dictionary")
self.SetMenuBar(menubar)
self.CreateStatusBar(2)
EVT_MENU(self, 1001, self.OnGameNew)
EVT_MENU(self, 1002, self.OnGameEnd)
EVT_MENU(self, 1003, self.OnGameReset)
EVT_MENU(self, 1004, self.OnWindowClose)
EVT_MENU(self, 1011, self.OnDictFile)
EVT_CHAR(self.wnd, self.OnChar)
self.OnGameReset()
def OnGameNew(self, event): def OnGameNew(self, event):
self.word = self.wf.Get() word = self.wf.Get()
self.guess = []
self.tries = 0
self.misses = 0
self.in_progress = 1 self.in_progress = 1
self.Draw() self.SetStatusText("",0)
self.wnd.StartGame(word)
def OnGameEnd(self, event): def OnGameEnd(self, event):
self.UpdateAverages(0) self.UpdateAverages(0)
self.misses = 7;
self.guess = map(chr, range(ord('a'),ord('z')+1))
self.in_progress = 0 self.in_progress = 0
self.Draw() self.SetStatusText("",0)
self.wnd.EndGame()
def OnGameReset(self, event=None):
self.played = 0
self.won = 0
self.history = []
self.average = 0.0
self.OnGameNew(None)
def OnDictFile(self, event):
pass
def UpdateAverages(self, has_won): def UpdateAverages(self, has_won):
if has_won: if has_won:
self.won = self.won + 1 self.won = self.won + 1
self.played = self.played+1 self.played = self.played+1
self.history.append(self.misses) self.history.append(self.wnd.misses) # ugly
total = 0.0 total = 0.0
for m in self.history: for m in self.history:
total = total + m total = total + m
@@ -121,38 +166,23 @@ class MyFrame(wxFrame):
key = key + ord('a') - ord('A') key = key + ord('a') - ord('A')
key = chr(key) key = chr(key)
if key < 'a' or key > 'z': if key < 'a' or key > 'z':
event.Skip()
return return
if self.guess.count(key): res = self.wnd.HandleKey(key)
self.SetStatusText('Already guessed %s' % (key,),0) if res == 1:
return self.UpdateAverages(0)
self.guess.append(key)
self.guess.sort()
guesses = ""
for letter in self.guess:
guesses = guesses + letter
self.tries = self.tries+1
if not key in self.word:
self.misses = self.misses+1
if self.misses == 7:
self.SetStatusText("Too bad, you're dead!",0) self.SetStatusText("Too bad, you're dead!",0)
self.SetStatusText("Press a key to restart",1)
self.OnGameEnd(None)
return
has_won = 1
for letter in self.word:
if not self.guess.count(letter):
has_won = 0
break
if has_won:
self.in_progress = 0 self.in_progress = 0
self.UpdateAverages(has_won) elif res == 2:
self.in_progress = 0
self.UpdateAverages(1)
self.SetStatusText("Congratulations!",0) self.SetStatusText("Congratulations!",0)
self.SetStatusText("Press a key to restart",1) if self.played:
self.Draw() percent = (100.*self.won)/self.played
return else:
self.SetStatusText(guesses,1) percent = 0.0
self.SetStatusText("tries %d misses %d" % (self.tries,self.misses),0) self.SetStatusText("p %d, w %d (%g %%), av %g" % (self.played,self.won, percent, self.average),1)
self.Draw()
def OnWindowClose(self, event): def OnWindowClose(self, event):
self.Destroy() self.Destroy()