首页 > 编程 > Python > 正文

使用pygame模块编写贪吃蛇的实例讲解

2020-02-22 23:07:51
字体:
来源:转载
供稿:网友

python ### 刚学了python不久,发现了一个好玩的库pygame

使用pygame模块 利用面向对象的思想编写贪吃蛇,主要用到pygame.sprite:

游戏主类

import pygame,sysfrom snake_sprite import Game_sprite,Snake,FoodSCREEN_RECT=pygame.Rect(0,0,828,600)IMG_URL="./image/bg.jpg"#主类class Snakegame(object): def __init__(self):  self.screen=pygame.display.set_mode(SCREEN_RECT.size)  self.clock=pygame.time.Clock()  self.__create_sprites() def __create_sprites(self):  bg=Game_sprite(IMG_URL)  self.snake=Snake()  for pos in self.snake.snake_point:   self.screen.blit(self.snake.image,pos)  food=Food()  self.bg_group=pygame.sprite.Group(bg)  self.snake_group=pygame.sprite.Group(self.snake)  self.food_group = pygame.sprite.Group(food) def start_game(self):  while True:   #1.时钟设置   self.clock.tick(30)   #2.事件监听   self.__event_handler()   #3.碰撞检测   self.__check_collide()   #4.精灵更新   self.__update_sprites()   #5.屏幕更新   pygame.display.update() def __event_handler(self):  for event in pygame.event.get():   if event.type==pygame.QUIT:    Snakegame.__game_over()   elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT and /     self.snake.direction !='L':    self.snake.speedy = 0    self.snake.speedx = 1    self.snake.direction = 'R'   elif event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT and /     self.snake.direction !='R':    self.snake.speedy = 0    self.snake.speedx = -1    self.snake.direction = 'L'   elif event.type == pygame.KEYDOWN and event.key == pygame.K_UP and /     self.snake.direction !='D':    self.snake.speedx = 0    self.snake.speedy = -1    self.snake.direction = 'U'   elif event.type == pygame.KEYDOWN and event.key == pygame.K_DOWN and /     self.snake.direction !='U':    self.snake.speedx=0    self.snake.speedy=1    self.snake.direction='D' def __check_collide(self):  pass def __update_sprites(self):  self.bg_group.update()  self.bg_group.draw(self.screen)  self.snake_group.update()  self.snake_group.draw(self.screen)  self.food_group.update()  self.food_group.draw(self.screen) @staticmethod def __game_over():  pygame.quit()  exit()#游戏启动if __name__ == '__main__': snake=Snakegame() snake.start_game()

工具类

import pygameimport randomSNAKE_IMG="./image/snake.png"FOOD_IMG="./image/food.jpg"class Game_sprite(pygame.sprite.Sprite): def __init__(self,img_name,speedx=1,speedy=0):  #调用父类的初始化方法  super(Game_sprite, self).__init__()  #属性  self.image=pygame.image.load(img_name)  self.rect=self.image.get_rect()  self.speedx=speedx  self.speedy=speedy def update(self):  pass#蛇实物class Snake(Game_sprite): def __init__(self,direction='R',snakelist=[[40,40],[80,40]]):  self.direction=direction  self.snake_point=snakelist  super().__init__(SNAKE_IMG)  self.rect.x=self.snake_point[1][0]  self.rect.y=self.snake_point[1][1] def update(self):  self.rect.x += self.speedx  self.rect.y += self.speedyclass Food(Game_sprite): def __init__(self):  super(Food, self).__init__(FOOD_IMG)  self.rect.x = random.randint(50, 828)  self.rect.y = random.randint(38, 600) def update(self):  pass            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表