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
新闻热点
疑难解答