我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了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("", 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写一个贪吃蛇游戏实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

本文标题: 使用Python写一个贪吃蛇游戏实例代码

本文地址: http://www.cppcns.com/jiaoben/python/200498.html

python写一个游戏多少代码-使用Python写一个贪吃蛇游戏实例代码相关推荐

  1. 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结

    前言 刚开始是学习前端那会,在熟悉 HTML+CSS+JS 后,我开始尝试去做贪吃蛇游戏.没想到在一顿瞎搞后还真搞出来了一个简陋版的贪吃蛇.哈哈!因为这是我刚开始学习前端的时候做的,所以代码有点简陋, ...

  2. php贪吃蛇游戏代码下载,JS实现的贪吃蛇游戏完整实例

    本文实例讲述了JS实现的贪吃蛇游戏.分享给大家供大家参考,具体如下: 思想: 1.设计蛇:属性有宽.高.方向.状态(有多少节),方法:显示,跑 2.设计食物:属性宽.高 3.显示蛇:根据状态向地图里加 ...

  3. 计算机课程编程设计贪吃蛇游戏设计,c语言课程设计报告--贪吃蛇游戏系统

    c语言课程设计报告--贪吃蛇游戏系统 院 系 计算机科学技术学院 班 级 组 长 学 号 指导教师 2017 年 3 月 2 日 C 语言语言基础课程设计基础课程设计 贪贪贪贪吃吃吃吃蛇蛇蛇蛇游游游游 ...

  4. c语言贪吃蛇游戏的论文,基于c语言的贪吃蛇游戏论文.doc

    基于c语言的贪吃蛇游戏论文 第 PAGE \* Arabic \* MERGEFORMAT 15 页第 PAGE \* Arabic \* MERGEFORMAT 15 页 学校代码 学号 分 类 号 ...

  5. 游戏编程笔记-起步(三)-贪吃蛇游戏实现

    游戏编程笔记-起步 3.贪吃蛇游戏实现 代码下载:http://download.csdn.net/detail/you_lan_hai/3738025 核心代码实现如下,算法描述见 "起步 ...

  6. python成长记:写一个自己的超简单贪吃蛇游戏

    本人系python小白,这是我的第一篇博客,一路摸爬滚打,终于入了门.花了两天琢磨,写了这个超简单的容易理解的贪吃蛇游戏,给大家分享自己的理解吧. 简介: 1,老方法用pygame库来画背景,蛇,食物 ...

  7. 初入Python(一) Pygame贪吃蛇游戏的编写与改进

    贪吃蛇游戏是一款简单耐玩的休闲益智类游戏,利用pygame可以实现轻松编写,不需要辅佐图片等等元素,可以直接利用涂色方块表示,吃果子变长的原理也很容易实现,将body分为一块一块,每块有自己的位置属性 ...

  8. 使用 Python Turtle 制作贪吃蛇游戏

    贪吃蛇游戏是一款于 1976 年由格雷姆林工业(Gremlin Industries)开发,并由世嘉游戏(SEGA)发行的街机迷宫游戏.这款游戏曾经登上多款诺基亚黑白机,对上世纪的玩家来说颇有怀旧感. ...

  9. 一个正在开发中的 Python3 贪吃蛇游戏

    2021-08-24 日志 修复了蛇快速转弯会死的 bug. 前言 最近正在练习使用 pygame, 感觉这东西真的是功能强大.用途广泛.前几天用 pygame,写了一个 Console 程序,看起来 ...

  10. 完整!贪吃蛇游戏c语言代码分享(包括界面,计数,提示)

    最近看到身边有些朋友抱怨,网上的贪吃蛇项目完整源码太少,或者说运行不了,甚至还有花钱购买的情况,作为你们的过来人,学长了解你们期末考试的苦,今天的博客我就不啰嗦,我直接放代码给你们. 所有功能都实现了 ...

最新文章

  1. C++知识点22——使用C++标准库(顺序容器list的初始化、赋值、访问、交换、添加、删除与迭代器失效)
  2. MongoDB删除数据
  3. 修改sh文件_修改Android分区大小
  4. HashMap 和 HashTable 区别
  5. android 动态创建view,react-native动态创建Android View 无效果
  6. 程序员最想要十八般武艺俱全的“保姆型”项目经理!
  7. 使用爱剪辑等软件制作视频的全套入门教程
  8. 使用phpQuery轻松采集网页内容
  9. PetaLinux学习笔记 3
  10. 『互联网架构』软件架构-软件系统设计(一)
  11. 推荐一款高颜值免费在线SCI绘图工具~~~
  12. Go技术日报(2021-11-16/17)——gRPC的错误处理实践
  13. 18年华为没有一项原创的发明
  14. 【20220926】html综合案例世纪佳缘
  15. OpenCV C++案例实战二十九《遥感图像分割》
  16. C语言popcount函数,C/C++中__builtin_popcount()的使用及原理
  17. 公司福利直接影响员工的身心健康
  18. JavaScript里面的“类”
  19. 臀部大的美女最令男人着迷
  20. HTML筑基知识点四

热门文章

  1. NSHomeDirectory
  2. 锁的用处及脏读、不可重复读和幻觉读的概念
  3. MySQL DDL--MySQL 5.7版本Online DDL操作
  4. redis数据类型、应用场景、常用命令
  5. k8s master 节点加入到可以调配node节点中的命令
  6. [BZOJ4556][TJOI2016HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)
  7. python第二天练习题
  8. Log4net 用法 本地日志
  9. NHibernate之Could not initialize proxy - no Session Bug
  10. python基础第六天