欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python寫一個貪吃蛇游戲?qū)嵗a

 更新時間:2017年08月21日 09:45:58   作者:Suisnail  
這篇文章主要介紹了使用Python寫一個貪吃蛇游戲?qū)嵗a,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

我在程序中加入了分數(shù)顯示,三種特殊食物,將貪吃蛇的游戲邏輯寫到了SnakeGame的類中,而不是在Snake類中。

特殊食物:

1.綠色:普通,吃了增加體型

2.紅色:吃了減少體型

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

4.變色食物:吃了會根據(jù)食物顏色改變蛇的顏色

#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屬性要與網(wǎng)格的背景色(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()
    #用于設(shè)置變色食物
    self.color_c = ("#FFB6C1","#6A5ACD","#0000FF","#F0FFF0","#FFFFE0","#F0F8FF","#EE82EE","#000000","#5FA8D9","#32CD32")
    self.i = 0
    #界面左側(cè)顯示分數(shù)
    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:大樂透,回到最初狀態(tài) 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':
      #判斷游戲是否結(jié)束
      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])
      #撞到自己,設(shè)置游戲結(jié)束的標志位,等待下一循環(huán)
    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))
    #什么都沒撞到,繼續(xù)前進
    else:
      self.snake.move(new)
if __name__ == '__main__':
  root = Tk()
  snakegame = SnakeGame(root)
  snakegame.run()
  snakegame.mainloop()

總結(jié)

以上所述是小編給大家介紹的使用Python寫一個貪吃蛇游戲?qū)嵗a,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python從網(wǎng)絡(luò)讀取圖片并直接進行處理的方法

    python從網(wǎng)絡(luò)讀取圖片并直接進行處理的方法

    這篇文章主要介紹了python從網(wǎng)絡(luò)讀取圖片并直接進行處理的方法,涉及cStringIO模塊模擬本地文件的使用技巧,需要的朋友可以參考下
    2015-05-05
  • 使用pytorch讀取數(shù)據(jù)集

    使用pytorch讀取數(shù)據(jù)集

    這篇文章主要介紹了使用pytorch讀取數(shù)據(jù)集,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python實現(xiàn)梯度法 python最速下降法

    python實現(xiàn)梯度法 python最速下降法

    這篇文章主要為大家詳細介紹了python梯度法,最速下降法的原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用 Python 實現(xiàn)微信公眾號粉絲遷移流程

    使用 Python 實現(xiàn)微信公眾號粉絲遷移流程

    近日,因公司業(yè)務(wù)需要,需將原兩個公眾號合并為一個,即要將其中一個公眾號(主要是粉絲)遷移到另一個公眾號。這篇文章主要介紹了使用 Python 實現(xiàn)微信公眾號粉絲遷移,需要的朋友可以參考下
    2018-01-01
  • Django haystack實現(xiàn)全文搜索代碼示例

    Django haystack實現(xiàn)全文搜索代碼示例

    這篇文章主要介紹了Django haystack實現(xiàn)全文搜索代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • django從請求到響應(yīng)的過程深入講解

    django從請求到響應(yīng)的過程深入講解

    這篇文章主要給大家介紹了關(guān)于django從請求到響應(yīng)的過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 深度學(xué)習(xí)TextLSTM的tensorflow1.14實現(xiàn)示例

    深度學(xué)習(xí)TextLSTM的tensorflow1.14實現(xiàn)示例

    這篇文章主要為大家介紹了深度學(xué)習(xí)TextLSTM的tensorflow1.14實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • python學(xué)生管理系統(tǒng)學(xué)習(xí)筆記

    python學(xué)生管理系統(tǒng)學(xué)習(xí)筆記

    這篇文章主要為大家詳細介紹了python學(xué)生管理系統(tǒng)的學(xué)習(xí)筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 從零開始制作PyTorch的Singularity容器鏡像的解決方案

    從零開始制作PyTorch的Singularity容器鏡像的解決方案

    本文主要介紹Facebook所主導(dǎo)的機器學(xué)習(xí)框架PyTorch的容器化安裝方法,基于HPC環(huán)境常用的Singularity高性能容器,并且兼容與結(jié)合了Docker容器鏡像的生態(tài),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Python函數(shù)裝飾器的使用詳解

    Python函數(shù)裝飾器的使用詳解

    大家好,本篇文章主要講的是Python函數(shù)裝飾器的使用詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論