You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.4 KiB
75 lines
2.4 KiB
#Function:定义一些精灵类
|
|
import random
|
|
import pygame
|
|
|
|
'''墙类'''
|
|
class Wall(pygame.sprite.Sprite):
|
|
def __init__(self, x, y, width, height, color, **kwargs):
|
|
pygame.sprite.Sprite.__init__(self)
|
|
self.image = pygame.Surface([width, height])
|
|
self.image.fill(color)
|
|
self.rect = self.image.get_rect()
|
|
self.rect.left = x
|
|
self.rect.top = y
|
|
|
|
'''食物类'''
|
|
class Food(pygame.sprite.Sprite):
|
|
def __init__(self, x, y, width, height, color, bg_color, **kwargs):
|
|
pygame.sprite.Sprite.__init__(self)
|
|
self.image = pygame.Surface([width, height])
|
|
self.image.fill(bg_color)
|
|
self.image.set_colorkey(bg_color)
|
|
pygame.draw.ellipse(self.image, color, [0, 0, width, height])
|
|
self.rect = self.image.get_rect()
|
|
self.rect.left = x
|
|
self.rect.top = y
|
|
|
|
'''角色类'''
|
|
class Player(pygame.sprite.Sprite):
|
|
def __init__(self, x, y, role_image_path):
|
|
pygame.sprite.Sprite.__init__(self)
|
|
self.role_name = role_image_path.split('/')[-1].split('.')[0]
|
|
self.base_image = pygame.image.load(role_image_path).convert()
|
|
self.image = self.base_image.copy()
|
|
self.rect = self.image.get_rect()
|
|
self.rect.left = x
|
|
self.rect.top = y
|
|
self.prev_x = x
|
|
self.prev_y = y
|
|
self.base_speed = [30, 30]
|
|
self.speed = [0, 0]
|
|
self.is_move = False
|
|
self.tracks = []
|
|
self.tracks_loc = [0, 0]
|
|
'''改变速度方向'''
|
|
def changeSpeed(self, direction):
|
|
if direction[0] < 0:
|
|
self.image = pygame.transform.flip(self.base_image, True, False)
|
|
elif direction[0] > 0:
|
|
self.image = self.base_image.copy()
|
|
elif direction[1] < 0:
|
|
self.image = pygame.transform.rotate(self.base_image, 90)
|
|
elif direction[1] > 0:
|
|
self.image = pygame.transform.rotate(self.base_image, -90)
|
|
self.speed = [direction[0] * self.base_speed[0], direction[1] * self.base_speed[1]]
|
|
return self.speed
|
|
'''更新角色位置'''
|
|
def update(self, wall_sprites, gate_sprites):
|
|
if not self.is_move:
|
|
return False
|
|
x_prev = self.rect.left
|
|
y_prev = self.rect.top
|
|
self.rect.left += self.speed[0]
|
|
self.rect.top += self.speed[1]
|
|
is_collide = pygame.sprite.spritecollide(self, wall_sprites, False)
|
|
if gate_sprites is not None:
|
|
if not is_collide:
|
|
is_collide = pygame.sprite.spritecollide(self, gate_sprites, False)
|
|
if is_collide:
|
|
self.rect.left = x_prev
|
|
self.rect.top = y_prev
|
|
return False
|
|
return True
|
|
'''生成随机的方向'''
|
|
def randomDirection(self):
|
|
return random.choice([[-0.5, 0], [0.5, 0], [0, 0.5], [0, -0.5]]) |