wxPythonでモナ危機一髪ゲーム
Pythonとは全く関係ないのであるが、たまたまMonaOSの本を手にした。
- 作者: ひげぽん
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2005/04
- メディア: 単行本
- クリック: 42回
- この商品を含むブログ (62件) を見る
OSを一から作ろうなどという、大それた考えは自分にはないのだが、ひげぽんさんがOSを作っていくプロセスには興味がある。ぱらぱらとめくっただけであるが、GUIで簡単なゲームを作っているのが目に留まった。詳しく見たわけではないが、黒ヒゲ危機一髪のパロディ版ということなので、こんな感じであろうかと、wxPythonで作ってみた。
9つのボタンが並んでおり、どれか一つをはずれとする。はずれの数字は乱数で決める(randomモジュール使用)。はずれの番号を避けて、8つのボタンすべて押すことができれば勝ちとする。
実行画面は写真のようになる(勝利した場合!)。ソースは以下の通り。
まずは、_main_tree.py。こちらがメインのコード。
#---------------------------------------------------------------------------- # Name: _main_tree.py # Purpose: gkiki #---------------------------------------------------------------------------- import wx import MainFrame class Application(wx.App): def OnInit(self): frame = MainFrame.MainFrame(None, -1) frame.Show(True) self.SetTopWindow(frame) return True def main(): import time app = Application(0) print "inf> Application started on %s" % time.ctime(time.time()) app.MainLoop() if __name__ == '__main__': main()
次に、MainFrame.py。
#---------------------------------------------------------------------------- # Name: MainFrame.py # Purpose: gkiki #---------------------------------------------------------------------------- import random import wx class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 250, 130 wx.Frame.__init__(self, id, title="gkiki", size=wx.Size(width, height)) Pan = wx.Panel(self, -1) self.cnt = 0 ### buttons Btn1 = wx.Button(Pan, -1, "1") Btn2 = wx.Button(Pan, -1, "2") Btn3 = wx.Button(Pan, -1, "3") Btn4 = wx.Button(Pan, -1, "4") Btn5 = wx.Button(Pan, -1, "5") Btn6 = wx.Button(Pan, -1, "6") Btn7 = wx.Button(Pan, -1, "7") Btn8 = wx.Button(Pan, -1, "8") Btn9 = wx.Button(Pan, -1, "9") hszr1 = wx.BoxSizer(wx.HORIZONTAL) hszr2 = wx.BoxSizer(wx.HORIZONTAL) hszr3 = wx.BoxSizer(wx.HORIZONTAL) vszr1 = wx.BoxSizer(wx.VERTICAL) hszr1.Add(Btn1, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr1.Add(Btn2, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr1.Add(Btn3, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr2.Add(Btn4, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr2.Add(Btn5, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr2.Add(Btn6, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr3.Add(Btn7, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr3.Add(Btn8, 0, wx.ALIGN_LEFT|wx.ALL, 2) hszr3.Add(Btn9, 0, wx.ALIGN_LEFT|wx.ALL, 2) vszr1.Add(hszr1, 0, wx.ALIGN_LEFT|wx.ALL, 2) vszr1.Add(hszr2, 0, wx.ALIGN_LEFT|wx.ALL, 2) vszr1.Add(hszr3, 0, wx.ALIGN_LEFT|wx.ALL, 2) Pan.SetSizer(vszr1) vszr1.Fit(Pan) Pan.Bind(wx.EVT_BUTTON, self.OnButton) ## random number self.a = random.randint(1,9) def OnButton(self, event): btn = event.GetEventObject() if btn.GetLabel() == unicode(self.a): print "you lose!" btn.SetLabel("NG") btn.SetForegroundColour("RED") dlg = wx.MessageDialog(self, "You Lose!", "", style=wx.OK) dlg.ShowModal() else: self.cnt += 1 btn.SetLabel("OK") btn.SetForegroundColour("BLUE") if self.cnt == 8: dlg = wx.MessageDialog(self, "You Win!", "", style=wx.OK) dlg.ShowModal()