使用Python写一个贪吃蛇游戏实例代码

使用Python写一个贪吃蛇游戏实例代码,第1张

概述我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中。

我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中。

特殊食物:

1.绿色:普通,吃了增加体型

2.红色:吃了减少体型

3.金色:吃了回到最初体型

4.变色食物:吃了会根据食物颜色改变蛇的颜色

#Coding=UTF-8from Tkinter import *from random import randintimport tkMessageBoxclass 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,color = "#000000"):    self.grID = grID    self.color = color    self.body = [(8,11),(8,12),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,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.grID.draw(new,self.color)  #蛇吃到了特殊食物1,剪短自身的长度  def cut_down(self,self.color)    for i in range(0,3):      pop = self.body.pop()      self.grID.draw(pop,self.grID.bg)  #蛇吃到了特殊食物2,回到最初长度  def init(self,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写一个贪吃蛇游戏实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的使用Python写一个贪吃蛇游戏实例代码全部内容,希望文章能够帮你解决使用Python写一个贪吃蛇游戏实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1201710.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存