]>
git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/tests/hangman.py
8a359f77f1e86f10e3791bb208c5de91f78a666b
2 from wxPython
.wx
import *
5 def __init__(self
, filename
):
7 f
= open(filename
, "r")
9 print "Couldn't open dictionary file %s, using build-ins" % (filename
,)
10 self
.words
= self
.builtin_words
13 while f
and len(self
.words
)<100:
15 self
.words
.append(line
[0:-1])
18 return self
.words
[int(random
.random()*len(self
.words
))]
19 builtin_words
= [ 'albatros', 'banana', 'electrometer', 'eggshell' ]
21 class MyFrame(wxFrame
):
22 def __init__(self
, wf
):
24 wxFrame
.__init
__(self
, NULL
, -1, "test threads", wxDefaultPosition
, wxSize(300,200))
25 self
.panel
= wxPanel(self
, -1)
26 self
.panel
.SetBackgroundColour(wxNamedColour('white'))
29 menu
.Append(1001, "New")
30 menu
.Append(1002, "End")
31 menu
.AppendSeparator()
32 menu
.Append(1003, "Exit")
35 menubar
.Append(menu
, "Game")
36 self
.SetMenuBar(menubar
)
37 self
.CreateStatusBar(2)
38 EVT_MENU(self
, 1001, self
.OnGameNew
)
39 EVT_MENU(self
, 1002, self
.OnGameEnd
)
40 EVT_MENU(self
, 1003, self
.OnWindowClose
)
41 EVT_CHAR(self
.panel
, self
.OnChar
)
47 def Draw(self
, dc
= None):
49 dc
= wxClientDC(self
.panel
)
51 (x
,y
) = self
.panel
.GetSizeTuple()
53 for letter
in self
.word
:
54 if self
.guess
.count(letter
):
55 dc
.DrawText(letter
, x1
, y1
)
57 dc
.DrawText('.', x1
, y1
)
60 dc
.DrawText("played: %d" % (self
.played
,), x1
, 50)
62 percent
= (100.*self
.won
)/self
.played
65 dc
.DrawText("won: %d (%g %%)" % (self
.won
, percent
), x1
, 70)
66 dc
.DrawText("average: %g" % (self
.average
,), x1
, 90)
67 dc
.SetUserScale(x
/1000., y
/1000.)
69 def DrawVictim(self
, dc
):
70 dc
.SetPen(wxPen(wxNamedColour('black'), 20))
71 dc
.DrawLines([(10, 980), (10,900), (700,900), (700,940), (720,940),
72 (720,980), (900,980)])
73 dc
.DrawLines([(100,900), (100, 100), (300,100)])
74 dc
.DrawLine(100,200,200,100)
75 if ( self
.misses
== 0 ): return
76 dc
.SetPen(wxPen(wxNamedColour('blue'), 10))
77 dc
.DrawLine(300,100,300,200)
78 if ( self
.misses
== 1 ): return
79 dc
.DrawEllipse(250,200,100,100)
80 if ( self
.misses
== 2 ): return
81 dc
.DrawLine(300,300,300,600)
82 if ( self
.misses
== 3) : return
83 dc
.DrawLine(300,300,250,550)
84 if ( self
.misses
== 4) : return
85 dc
.DrawLine(300,300,350,550)
86 if ( self
.misses
== 5) : return
87 dc
.DrawLine(300,600,350,850)
88 if ( self
.misses
== 6) : return
89 dc
.DrawLine(300,600,250,850)
90 def OnPaint(self
, event
):
91 dc
= wxPaintDC(self
.panel
)
93 def OnGameNew(self
, event
):
94 self
.word
= self
.wf
.Get()
100 def OnGameEnd(self
, event
):
101 self
.UpdateAverages(0)
103 self
.guess
= map(chr, range(ord('a'),ord('z')+1))
106 def UpdateAverages(self
, has_won
):
108 self
.won
= self
.won
+ 1
109 self
.played
= self
.played
+1
110 self
.history
.append(self
.misses
)
112 for m
in self
.history
:
114 self
.average
= float(total
/len(self
.history
))
115 def OnChar(self
, event
):
116 if not self
.in_progress
:
119 key
= event
.KeyCode();
120 if key
>= ord('A') and key
<= ord('Z'):
121 key
= key
+ ord('a') - ord('A')
123 if key
< 'a' or key
> 'z':
125 if self
.guess
.count(key
):
126 self
.SetStatusText('Already guessed %s' % (key
,),0)
128 self
.guess
.append(key
)
131 for letter
in self
.guess
:
132 guesses
= guesses
+ letter
133 self
.tries
= self
.tries
+1
134 if not key
in self
.word
:
135 self
.misses
= self
.misses
+1
137 self
.SetStatusText("Too bad, you're dead!",0)
138 self
.SetStatusText("Press a key to restart",1)
142 for letter
in self
.word
:
143 if not self
.guess
.count(letter
):
148 self
.UpdateAverages(has_won
)
149 self
.SetStatusText("Congratulations!",0)
150 self
.SetStatusText("Press a key to restart",1)
153 self
.SetStatusText(guesses
,1)
154 self
.SetStatusText("tries %d misses %d" % (self
.tries
,self
.misses
),0)
156 def OnWindowClose(self
, event
):
161 print "Reading word list"
162 wf
= WordFetcher("/usr/share/games/hangman-words")
164 self
.SetTopWindow(frame
)
168 if __name__
== '__main__':