问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用Python写一个贪吃蛇

发布网友 发布时间:2022-04-24 04:14

我来回答

1个回答

热心网友 时间:2022-04-18 09:23

以前在远标写过:from Tkinter import *
import tkMessageBox,sys
from random import randint

class Grid(object):
def __init__(self,master=None,window_width=800,window_height=600,grid_width=50,offset=10):
self.height = window_height
self.width = window_width
self.grid_width = grid_width
self.offset = offset
self.grid_x = self.width/self.grid_width
self.grid_y = self.height/self.grid_width
self.bg = "#EBEBEB"
self.canvas = Canvas(master, width=self.width+2*self.offset, height=self.height+2*self.offset, bg=self.bg)
self.canvas.pack()
self.grid_list()
def draw(self, pos, color,):
x = pos[0]*self.grid_width + self.offset
y = pos[1]*self.grid_width + self.offset
self.canvas.create_rectangle(x, y, x+self.grid_width, y+self.grid_width,fill=color,outline=self.bg)
def grid_list(self):
grid_list = []
for y in range(0,self.grid_y):
for x in range(0,self.grid_x):
grid_list.append((x,y))
self.grid_list = grid_list

class Food(object):
def __init__(self, Grid):
self.grid = Grid
self.color = "#23D978"
self.set_pos()
def set_pos(self):
x = randint(0,self.grid.grid_x - 1)
y = randint(0,self.grid.grid_y - 1)
self.pos = (x, y)
def display(self):
self.grid.draw(self.pos,self.color)

class Snake(object):
def __init__(self, Grid):
self.grid = Grid
self.body = [(10,6),(10,7),(10,8)]
self.direction = "Up"
self.status = ['run','stop']
self.speed = 300
self.color = "#5FA8D9"
self.food = Food(self.grid)
self.display_food()
self.gameover = False
self.score = 0
def available_grid(self):
return [i for i in self.grid.grid_list if i not in self.body[2:]]
def change_direction(self, direction):
self.direction = direction
def display(self):
for (x,y) in self.body:
self.grid.draw((x,y),self.color)
def display_food(self):
while(self.food.pos in self.body):
self.food.set_pos()
self.food.display()
def move(self):
head = self.body[0]
if self.direction == 'Up':
new = (head[0], head[1]-1)
elif self.direction == 'Down':
new = (head[0], head[1]+1)
elif self.direction == 'Left':
new = (head[0]-1,head[1])
else:
new = (head[0]+1,head[1])
if not self.food.pos == head:
pop = self.body.pop()
self.grid.draw(pop,self.grid.bg)
else:
self.display_food()
self.score += 1
self.body.insert(0,new)
if not new in self.available_grid():
self.status.reverse()
self.gameover = True
else:
self.grid.draw(new,color=self.color)

class SnakeGame(Frame):
def __init__(self,master=None, *args, **kwargs):
Frame.__init__(self, master)
self.master = master
self.grid = Grid(master=master,*args, **kwargs)
self.snake = Snake(self.grid)
self.bind_all("", self.key_release)
self.snake.display()
def run(self):
if not self.snake.status[0] == 'stop':
self.snake.move()
if self.snake.gameover == True:
message = tkMessageBox.showinfo("Game Over", "your score: %d" % self.snake.score)
if message == 'ok':
sys.exit()
self.after(self.snake.speed,self.run)
def key_release(self, event):
key = event.keysym
key_dict = {"Up":"Down","Down":"Up","Left":"Right","Right":"Left"}
if key_dict.has_key(key) and not key == key_dict[self.snake.direction]:
self.snake.change_direction(key)
self.snake.move()
elif key == 'p':
self.snake.status.reverse()

if __name__ == '__main__':
root = Tk()
snakegame = SnakeGame(root)
snakegame.run()
snakegame.mainloop()
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
做青红椒炒毛肚有哪些好吃的诀窍? 如何自制好吃的香辣毛肚? 穿越火线警告码SX(2,509,0)如何解决 CF sx警告码(2,770,0)什么原因 ...要求重新启动电脑 警告码是2 xxxx 0 有时重启4 5次才能玩 win7系统... 穿越火线 sx 警告码 2,994,0 怎么解决 CF出现非法模块SX警告码(2,990,0) 我为什么上CF体验服没开G有非法模块???怎么办啊 警告码(2,502,0) 穿越火线进游戏后 2分钟左右 就出来个 SX 警告码2,990,0 看到刘老师那慈祥的面庞,我感慨万分,我想到了这样几个赞美刘老师的成语... 什么是家庭教育,家庭教育包含哪些方面? 全国家庭教育指导大纲的内容要求 简述学校对家庭教育的指导主要有哪些类型 简答题学前教育机构家庭教育指导内容? 我国家庭教育指导的主要活动有哪些 家里老人80大寿送什么礼物好 面向家长实施的家庭教育咨询服务有哪些内容 八十大寿送什么礼物? 问一下老人八十大寿送什么礼物好呢? 老师八十寿辰送什么礼物合适? 过八十大寿的老人应该送什么样的礼物呢? 老人八十大寿送什么礼物好 过80大寿应该送什么礼物 爷爷今年过八十大寿,送什么礼物好呢? 八十大寿送什么礼物合适? 80岁生日送什么礼物比较实用? 送给老人最实用的礼物,老人80大寿实用礼物? 一岁左右孩子的辅食中,都能加入哪些调味品呢? 一岁宝宝能吃酱油么 辅食加了酱油能放多久 python有趣的编程代码 要写一篇以敬业(学)乐业(学)为主题的演讲稿!演讲的对象是中学生,有什么好的建议的? 学生,责任与奉献一分钟演讲稿。 与学生敬业有关演讲稿三分钟 急急急!!! 有业,敬业,乐业600字演讲稿 作为一名中学生敬业和乐业该怎么做 江湖救急,今明两天要的!!赞美老师敬业的学生演讲稿 学生的爱与责任演讲稿 作为中学生应怎样敬业 乐业 去企业实习了半个月 作为优秀学生代表发言的演讲稿 求题为《爱岗敬业,争先创优》的演讲稿。不要网上随便就能搜到的段子... 作为一名学生怎样理解敬业? 作为中学生如何做到敬业,乐业写一段不少于200字的文段 快乐大本营20091205中几个小男孩一起组合的名字叫什么? 苹果手机里怎么设置锁屏? 苹果手机怎么设置开锁方式 win10系统怎么给u盘设置密码? 怎么泡腊八蒜好吃 win10怎样给u盘设置密码? WIN10 U盘设置开机密匙,组策略运行脚本的问题