|
|
|
@ -0,0 +1,94 @@
|
|
|
|
|
'''
|
|
|
|
|
定义一个:小恐龙类
|
|
|
|
|
'''
|
|
|
|
|
import pygame
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''小恐龙'''
|
|
|
|
|
class Dinosaur(pygame.sprite.Sprite):
|
|
|
|
|
def __init__(self, imagepaths, position=(40, 147), size=[(44, 47), (59, 47)], **kwargs):
|
|
|
|
|
pygame.sprite.Sprite.__init__(self)
|
|
|
|
|
# 导入所有图片
|
|
|
|
|
self.images = []
|
|
|
|
|
image = pygame.image.load(imagepaths[0])
|
|
|
|
|
for i in range(5):
|
|
|
|
|
self.images.append(pygame.transform.scale(image.subsurface((i*88, 0), (88, 95)), size[0]))
|
|
|
|
|
image = pygame.image.load(imagepaths[1])
|
|
|
|
|
for i in range(2):
|
|
|
|
|
self.images.append(pygame.transform.scale(image.subsurface((i*118, 0), (118, 95)), size[1]))
|
|
|
|
|
self.image_idx = 0
|
|
|
|
|
self.image = self.images[self.image_idx]
|
|
|
|
|
self.rect = self.image.get_rect()
|
|
|
|
|
self.rect.left, self.rect.bottom = position
|
|
|
|
|
self.mask = pygame.mask.from_surface(self.image)
|
|
|
|
|
# 定义一些必要的变量
|
|
|
|
|
self.init_position = position
|
|
|
|
|
self.refresh_rate = 5
|
|
|
|
|
self.refresh_counter = 0
|
|
|
|
|
self.speed = 11.5
|
|
|
|
|
self.gravity = 0.6
|
|
|
|
|
self.is_jumping = False
|
|
|
|
|
self.is_ducking = False
|
|
|
|
|
self.is_dead = False
|
|
|
|
|
self.movement = [0, 0]
|
|
|
|
|
'''跳跃'''
|
|
|
|
|
def jump(self, sounds):
|
|
|
|
|
if self.is_dead or self.is_jumping:
|
|
|
|
|
return
|
|
|
|
|
sounds['jump'].play()
|
|
|
|
|
self.is_jumping = True
|
|
|
|
|
self.movement[1] = -1*self.speed
|
|
|
|
|
'''低头'''
|
|
|
|
|
def duck(self):
|
|
|
|
|
if self.is_jumping or self.is_dead:
|
|
|
|
|
return
|
|
|
|
|
self.is_ducking = True
|
|
|
|
|
'''不低头'''
|
|
|
|
|
def unduck(self):
|
|
|
|
|
self.is_ducking = False
|
|
|
|
|
'''死掉了'''
|
|
|
|
|
def die(self, sounds):
|
|
|
|
|
if self.is_dead:
|
|
|
|
|
return
|
|
|
|
|
sounds['die'].play()
|
|
|
|
|
self.is_dead = True
|
|
|
|
|
'''将恐龙画到屏幕'''
|
|
|
|
|
def draw(self, screen):
|
|
|
|
|
screen.blit(self.image, self.rect)
|
|
|
|
|
'''载入当前状态的图片'''
|
|
|
|
|
def loadImage(self):
|
|
|
|
|
self.image = self.images[self.image_idx]
|
|
|
|
|
rect = self.image.get_rect()
|
|
|
|
|
rect.left, rect.top = self.rect.left, self.rect.top
|
|
|
|
|
self.rect = rect
|
|
|
|
|
self.mask = pygame.mask.from_surface(self.image)
|
|
|
|
|
'''更新小恐龙'''
|
|
|
|
|
def update(self):
|
|
|
|
|
if self.is_dead:
|
|
|
|
|
self.image_idx = 4
|
|
|
|
|
self.loadImage()
|
|
|
|
|
return
|
|
|
|
|
if self.is_jumping:
|
|
|
|
|
self.movement[1] += self.gravity
|
|
|
|
|
self.image_idx = 0
|
|
|
|
|
self.loadImage()
|
|
|
|
|
self.rect = self.rect.move(self.movement)
|
|
|
|
|
if self.rect.bottom >= self.init_position[1]:
|
|
|
|
|
self.rect.bottom = self.init_position[1]
|
|
|
|
|
self.is_jumping = False
|
|
|
|
|
elif self.is_ducking:
|
|
|
|
|
if self.refresh_counter % self.refresh_rate == 0:
|
|
|
|
|
self.refresh_counter = 0
|
|
|
|
|
self.image_idx = 5 if self.image_idx == 6 else 6
|
|
|
|
|
self.loadImage()
|
|
|
|
|
else:
|
|
|
|
|
if self.refresh_counter % self.refresh_rate == 0:
|
|
|
|
|
self.refresh_counter = 0
|
|
|
|
|
if self.image_idx == 1:
|
|
|
|
|
self.image_idx = 2
|
|
|
|
|
elif self.image_idx == 2:
|
|
|
|
|
self.image_idx = 3
|
|
|
|
|
else:
|
|
|
|
|
self.image_idx = 1
|
|
|
|
|
self.loadImage()
|
|
|
|
|
self.refresh_counter += 1
|