免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9616 | 回复: 8
打印 上一主题 下一主题

一个86行的的贪吃蛇游戏... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-24 20:42 |只看该作者 |倒序浏览
见笑了....

#!/usr/bin/python
from Tkinter import *
import random
class snake(Frame):
        def __init__(self, master=None):
                Frame.__init__(self, master)
                self.body = [(0,0)]
                self.bodyid = []
                self.food = [ -1, -1 ]
                self.foodid = -1
                self.gridcount = 10
                self.size = 500
                self.di = 3
                self.speed = 500

                self.top = self.winfo_toplevel()
                self.top.resizable(False, False)
                self.grid()
                self.canvas = Canvas(self)
                self.canvas.grid()
                self.canvas.config(width=self.size, height=self.size,relief=RIDGE)

                self.drawgrid()
                s = self.size/self.gridcount
                id = self.canvas.create_rectangle(self.body[0][0]*s,self.body[0][1]*s,
                        (self.body[0][0]+1)*s, (self.body[0][1]+1)*s, fill="yellow")
                self.bodyid.insert(0, id)
                self.bind_all("<KeyRelease>", self.keyrelease)
                self.drawfood()
                self.after(self.speed, self.drawsnake)
        def drawgrid(self):
                s = self.size/self.gridcount
                for i in range(0, self.gridcount+1):
                        self.canvas.create_line(i*s, 0, i*s, self.size)
                        self.canvas.create_line(0, i*s, self.size, i*s)
        def drawsnake(self):
                s = self.size/self.gridcount
                head = self.body[0]
                new = [head[0], head[1]]
                if self.di == 1:
                        new[1] = (head[1]-1) % self.gridcount
                elif self.di == 2:
                        new[0] = (head[0]+1) % self.gridcount
                elif self.di == 3:
                        new[1] = (head[1]+1) % self.gridcount
                else:
                        new[0] = (head[0]-1) % self.gridcount
                next = ( new[0], new[1] )
                if next in self.body:
                        exit()
                elif next == (self.food[0], self.food[1]):
                        self.body.insert(0, next)
                        self.bodyid.insert(0, self.foodid)
                        self.drawfood()
                else:
                        tail = self.body.pop()
                        id = self.bodyid.pop()
                        self.canvas.move(id, (next[0]-tail[0])*s, (next[1]-tail[1])*s)
                        self.body.insert(0, next)
                        self.bodyid.insert(0, id)

                self.after(self.speed, self.drawsnake)
        def drawfood(self):
                s = self.size/self.gridcount
                x = random.randrange(0, self.gridcount)
                y = random.randrange(0, self.gridcount)
                while (x, y) in self.body:
                        x = random.randrange(0, self.gridcount)
                        y = random.randrange(0, self.gridcount)
                id = self.canvas.create_rectangle(x*s,y*s, (x+1)*s, (y+1)*s, fill="yellow")
                self.food[0] = x
                self.food[1] = y
                self.foodid = id
        def keyrelease(self, event):
                if event.keysym == "Up" and self.di != 3:
                        self.di = 1
                elif event.keysym == "Right" and self.di !=4:
                        self.di = 2
                elif event.keysym == "Down" and self.di != 1:
                        self.di = 3
                elif event.keysym == "Left" and self.di != 2:
                        self.di = 4

app = snake()
app.master.title("Greedy Snake")
app.mainloop()

论坛徽章:
0
2 [报告]
发表于 2009-03-25 09:48 |只看该作者
感谢分享

论坛徽章:
0
3 [报告]
发表于 2009-03-25 10:00 |只看该作者

回复 #2 xiaoyu9805119 的帖子

怎么玩啊玩啊就这样了?
Traceback (most recent call last):
  File "C:\Python26\cat.py", line 85, in <module>
    app.mainloop()
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1017, in mainloop
    self.tk.mainloop(n)
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1412, in __call__
    raise SystemExit, msg
SystemExit: None
>>> ==============


贪吃蛇怎么玩的???

Tkinter是什么模块啊? 为什么 不能help(Tkinter)呢? 一help shell就像死掉一眼。。。不显示help的结果
但是 dir(Tkinter)就可以

[ 本帖最后由 zhenglxd 于 2009-3-25 10:09 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-03-25 11:55 |只看该作者

回复 #3 zhenglxd 的帖子

win下自带了,其他系统如果有装过tk也会自动编译这个模块进去

论坛徽章:
0
5 [报告]
发表于 2009-03-25 12:06 |只看该作者
厉害的。

论坛徽章:
0
6 [报告]
发表于 2009-03-25 12:44 |只看该作者
win32下python3.1a1的需要把Tkinter改为tkinter的飘过

论坛徽章:
0
7 [报告]
发表于 2009-03-25 14:29 |只看该作者

回复 #1 cleverd 的帖子

利害,,学习学习。。

论坛徽章:
0
8 [报告]
发表于 2009-03-25 23:08 |只看该作者
我写了一个pygame版的
但是涉及剽窃就不发上来了
之前另一位朋友的版本最大的问题是CPU占用高
如果用脏矩形动画的话资源占用就会很少

论坛徽章:
0
9 [报告]
发表于 2009-03-26 22:24 |只看该作者
linux系统下执行

Traceback (most recent call last):
  File "snake.py", line 2, in <module>
    from Tkinter import *
ImportError: No module named Tkinter

找不到Tkinter?是不是要安装Tkinter才行?

[ 本帖最后由 caiyue3577 于 2009-3-26 22:28 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP