• Python写的贪吃蛇游戏例子


    第一次用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()

  • 相关阅读:
    visual studio 2019 企业版下载
    对IT战略的认识
    投融资,你了解吗?
    一品投资农副产品电商平台工作内容
    高明的决策和投资远比低效的勤奋更重要
    随笔
    思维方式的不同
    公司经营问题探讨
    盘点海口最好吃的西餐厅top10
    羽毛球运动技巧
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8301236.html
Copyright © 2020-2023  润新知