日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python寫的貪吃蛇游戲例子

系統 2035 0

第一次用Python寫這種比較實用且好玩的東西,權當練手吧

游戲說明:

* P鍵控制“暫停/開始”
* 方向鍵控制貪吃蛇的方向

源代碼如下:

復制代碼 代碼如下:

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()


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 潼南县| 兰坪| 冷水江市| 山丹县| 芜湖县| 平安县| 民权县| 增城市| 藁城市| 仪陇县| 镇江市| 新乐市| 廉江市| 灌云县| 林口县| 商洛市| 大洼县| 加查县| 房产| 水富县| 洛扎县| 北海市| 比如县| 黔西县| 玉树县| 荆州市| 铜鼓县| 柘城县| 乌恰县| 铜梁县| 自贡市| 临猗县| 太和县| 九寨沟县| 四子王旗| 诸暨市| 宁波市| 黄骅市| 桑日县| 子长县| 海安县|