这篇文章主要介绍了使用Python写一个贪吃蛇游戏实例代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中。
特殊食物:
1.绿色:普通,吃了增加体型
2.红色:吃了减少体型
3.金色:吃了回到最初体型
4.变色食物:吃了会根据食物颜色改变蛇的颜色
#coding=UTF-8 from Tkinter import * from random import randint import tkMessageBox class Grid(object): def __init__(self, master=None,height=16, width=24, offset=10, grid_width=50, bg="#808080"): self.height = height self.width = width self.offset = offset self.grid_width = grid_width self.bg = bg self.canvas = Canvas(master, width=self.width*self.grid_width+2*self.offset, height=self.height*self.grid_width+ 2*self.offset, bg=self.bg) self.canvas.pack(side=RIGHT, fill=Y) def draw(self, pos, color, ): x = pos[0] * self.grid_width + self.offset y = pos[1] * self.grid_width + self.offset #outline属性要与网格的背景色(self.bg)相同,要不然会很丑 self.canvas.create_rectangle(x, y, x + self.grid_width, y + self.grid_width, fill=color, outline=self.bg) class Food(object): def __init__(self, grid, color = "#23D978"): self.grid = grid self.color = color self.set_pos() self.type = 1 def set_pos(self): x = randint(0, self.grid.width - 1) y = randint(0, self.grid.height - 1) self.pos = (x, y) def display(self): self.grid.draw(self.pos, self.color) class Snake(object): def __init__(self, grid, color = "#000000"): self.grid = grid self.color = color self.body = [(8, 11), (8, 12), (8, 13)] self.direction = "Up" for i in self.body: self.grid.draw(i, self.color) #这个方法用于游戏重新开始时初始化贪吃蛇的位置 def initial(self): while not len(self.body) == 0: pop = self.body.pop() self.grid.draw(pop, self.grid.bg) self.body = [(8, 11), (8, 12), (8, 13)] self.direction = "Up" self.color = "#000000" for i in self.body: self.grid.draw(i, self.color) #蛇像一个指定点移动 def move(self, new): self.body.insert(0, new) pop = self.body.pop() self.grid.draw(pop, self.grid.bg) self.grid.draw(new, self.color) #蛇像一个指定点移动,并增加长度 def add(self ,new): self.body.insert(0, new) self.grid.draw(new, self.color) #蛇吃到了特殊食物1,剪短自身的长度 def cut_down(self,new): self.body.insert(0, new) self.grid.draw(new, self.color) for i in range(0,3): pop = self.body.pop() self.grid.draw(pop, self.grid.bg) #蛇吃到了特殊食物2,回到最初长度 def init(self, new): self.body.insert(0, new) self.grid.draw(new, self.color) while len(self.body) > 3: pop = self.body.pop() self.grid.draw(pop, self.grid.bg) #蛇吃到了特殊食物3,改变了自身的颜色,纯属好玩 def change(self, new, color): self.color = color self.body.insert(0, new) for item in self.body: self.grid.draw(item, self.color) class SnakeGame(Frame): def __init__(self, master): Frame.__init__(self, master) self.grid = Grid(master) self.snake = Snake(self.grid) self.food = Food(self.grid) self.gameover = False self.score = 0 self.status = ['run', 'stop'] self.speed = 300 self.grid.canvas.bind_all("<KeyRelease>", self.key_release) self.display_food() #用于设置变色食物 self.color_c = ("#FFB6C1","#6A5ACD","#0000FF","#F0FFF0","#FFFFE0","#F0F8FF","#EE82EE","#000000","#5FA8D9","#32CD32") self.i = 0 #界面左侧显示分数 self.m = StringVar() self.ft1 = ('Fixdsys', 40, "bold") self.m1 = Message(master, textvariable=self.m, aspect=5000, font=self.ft1, bg="#696969") self.m1.pack(side=LEFT, fill=Y) self.m.set("Score:"+str(self.score)) #这个方法用于游戏重新开始时初始化游戏 def initial(self): self.gameover = False self.score = 0 self.m.set("Score:"+str(self.score)) self.snake.initial() #type1:普通食物 type2:减少2 type3:大乐透,回到最初状态 type4:吃了会变色 def display_food(self): self.food.color = "#23D978" self.food.type = 1 if randint(0, 40) == 5: self.food.color = "#FFD700" self.food.type = 3 while (self.food.pos in self.snake.body): self.food.set_pos() self.food.display() elif randint(0, 4) == 2: self.food.color = "#EE82EE" self.food.type = 4 while (self.food.pos in self.snake.body): self.food.set_pos() self.food.display() elif len(self.snake.body) > 10 and randint(0, 16) == 5: self.food.color = "#BC8F8F" self.food.type = 2 while (self.food.pos in self.snake.body): self.food.set_pos() self.food.display() else: while (self.food.pos in self.snake.body): self.food.set_pos() self.food.display() 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.direction = key self.move() elif key == 'p': self.status.reverse() def run(self): #首先判断游戏是否暂停 if not self.status[0] == 'stop': #判断游戏是否结束 if self.gameover == True: message = tkMessageBox.showinfo("Game Over", "your score: %d" % self.score) if message == 'ok': self.initial() if self.food.type == 4: color = self.color_c[self.i] self.i = (self.i+1)%10 self.food.color = color self.food.display() self.move(color) else: self.move() self.after(self.speed, self.run) def move(self, color="#EE82EE"): # 计算蛇下一次移动的点 head = self.snake.body[0] if self.snake.direction == 'Up': if head[1] - 1 < 0: new = (head[0], 16) else: new = (head[0], head[1] - 1) elif self.snake.direction == 'Down': new = (head[0], (head[1] + 1) % 16) elif self.snake.direction == 'Left': if head[0] - 1 < 0: new = (24, head[1]) else: new = (head[0] - 1, head[1]) else: new = ((head[0] + 1) % 24, head[1]) #撞到自己,设置游戏结束的标志位,等待下一循环 if new in self.snake.body: self.gameover=True #吃到食物 elif new == self.food.pos: if self.food.type == 1: self.snake.add(new) elif self.food.type == 2: self.snake.cut_down(new) elif self.food.type == 4: self.snake.change(new, color) else: self.snake.init(new) self.display_food() self.score = self.score+1 self.m.set("Score:" + str(self.score)) #什么都没撞到,继续前进 else: self.snake.move(new) if __name__ == '__main__': root = Tk() snakegame = SnakeGame(root) snakegame.run() snakegame.mainloop()
总结
以上是Python实现贪吃蛇游戏的实例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载
最流行的的开源编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。