展开全部
wxpython编的,
import wx
import random
class SketchWindow(wx.Window):
def __init__(self, parent, ID):
wx.Window.__init__(self, parent, ID)
self.SetBackgroundColour("#f0F0F0") #背景色
self.pen = wx.Pen("Black", 10, wx.SOLID) #蛇 ([颜色],笔大小,)
self.penend = wx.Pen("White", 10, wx.SOLID) #蛇后 ([颜色],笔大小,)
self.runspeed = 100 #蛇的速度32313133353236313431303231363533e4b893e5b19e31333264636233 1000表示,1秒
self.Bind(wx.EVT_CHAR, self.OnChar)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_IDLE, self.OnIdle)
self.Bind(wx.EVT_TIMER, self.OnTimer)
def InitBuffer(self):
self.keyway =0
self.x=0
self.y=0
self.x2 = 0
self.y2 = 0
self.pos = (0, 0)
self.pos2 = (0, 0)
self.curLine = []
self.way = [(0,0),(0,0),(0,0),(0,0),(0,0),(0,0)] #初始从蛇的坐标长度,一个坐标表示一个长度
self.randpos=[]
self.size = self.GetClientSize()
self.buffer = wx.EmptyBitmap(max(1, self.size.width), max(1, self.size.height))
if self.buffer.Ok():
dc = wx.BufferedDC(None, self.buffer)
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
dc.Clear()
self.reInitBuffer = False
self.SetRandPos()
self.rtime = wx.Timer(self)
self.rtime.Start(self.runspeed)
print "start"
def run(self):
if self.keyway == 315 and self.pos[1] >0: #Up
self.y = self.y -10
elif self.keyway == 317 and self.pos[1] < self.size[1]: #Down
self.y = self.y +10
elif self.keyway == 314 and self.pos[0] >0: #Left
self.x = self.x -10
elif self.keyway == 316 and self.pos[0] < self.size[0]: #Right
self.x = self.x +10
else:
return 0
self.drawMotion2()
self.drawMotion3()
if self.pos in self.way:
self.die()
if self.pos in self.randpos:
self.way.insert(0, self.randpos)
self.randpos.remove(self.pos)
print "eating"
for i in range(0,len(self.way)-1):
self.way[i] = self.way[i+1]
self.way[len(self.way)-1] = self.pos
def die(self):
print "die"
self.rtime.Stop()
del self.rtime
msg ="Score:"+str(len(self.way)-6)
print msg
wx.MessageBox(msg, "You're die!")
self.InitBuffer()
def drawMotion2(self):
dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
dc.SetPen(self.pen)
coords = self.pos + (self.x,self.y)
self.curLine.append(coords)
dc.DrawLine(*coords)
self.pos = (self.x,self.y)
def drawMotion3(self):
dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
dc.SetPen(self.penend)
coords = self.way[0] + self.way[1]
self.curLine.append(coords)
dc.DrawLine(*coords)
def drawMotion4(self):
dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
dc.SetPen(self.pen)
coords = (self.x2,self.y2) + (self.x2,self.y2)
self.curLine.append(coords)
dc.DrawLine(*coords)
def OnTimer(self,event):
self.run()
def OnChar(self, event):
if ((event.GetKeyCode()==315 and self.keyway!=317)
or (event.GetKeyCode()==317 and self.keyway!=315)
or (event.GetKeyCode()==314 and self.keyway!=316)
or (event.GetKeyCode()==316 and self.keyway!=314)):
self.keyway=event.GetKeyCode()
event.Skip()
def OnSize(self, event):
self.reInitBuffer = True
def OnIdle(self, event):
if self.reInitBuffer:
self.InitBuffer()
self.Refresh(False)
def SetRandPos(self):
for i in range(0,50):
self.x2 = random.randint(1,self.size[0]/10)*10
self.y2 = random.randint(1,self.size[1]/10)*10
self.randpos.append((self.x2,self.y2))
self.drawMotion4()
class SketchFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "Sketch Frame",
size=(800,600))
self.sketch = SketchWindow(self, -1)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = SketchFrame(None)
frame.Show(True)
app.MainLoop()
本回答被网友采纳
已赞过
已踩过<
你对这个回答的评价是?
评论
收起