网站推广.NET

网站推广.NET

Python写的贪吃蛇游戏例子_python

来源:互联网

这篇文章主要介绍了python写的贪吃蛇游戏例子,练手作品,又好玩又可以学到东西,需要的朋友可以参考下

第一次用Python写这种比较实用且好玩的东西,权当练手吧

游戏说明:

* P键控制“暂停/开始”
* 方向键控制贪吃蛇的方向

源代码如下:

立即学习“Python免费学习笔记(深入)”;

复制代码 代码如下:

from Tkinter import *import tkMessageBox,sysfrom random import randintclass 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_listclass 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()
用python写贪吃蛇