Pygame:为特定的图像/精灵指定唯一的移动路径

时间:2019-05-15 17:54:30

标签: python python-3.x pygame

import pygame
import sys
import time
import math
import random
from os import path

img_dir = path.join(path.dirname(__file__), 'INSERT DIRECTORY NAME')

#window settings
WINDOWHEIGHT = 600
WINDOWWIDTH = 900
FPS = 30

#colors
BLACK = (0,0,0)
WHITE = (255,255,255)

#initilize and create window
pygame.init()
pygame.mixer.init()
SIZE = (WINDOWWIDTH,WINDOWHEIGHT)
WINDOW = pygame.display.set_mode(SIZE)
pygame.display.set_caption('SOS')

FPSCLOCK = pygame.time.Clock()

class Ship(pygame.sprite.Sprite):
    def __init__(self, ships_imgs, all_sprites, ships_sprites):
        super().__init__()
        self.image_orig = random.choice(ships_imgs)
        self.image = self.image_orig.copy()
        self.rect = self.image.get_rect()
        self.radius = int(self.rect.width * .90 / 2)

        #set random spawn location for ships
        self.rect.x = random.randrange(0, WINDOWWIDTH - 25)
        self.rect.y = random.randrange(0, WINDOWHEIGHT - 25)

        #set speed for x and y values
        self.speed_x = random.randrange(-2,2)
        self.speed_y = random.randrange(1,2)

    def update(self):
        ''' update Ship class '''
        self.rect.y += self.speed_y
        self.rect.x += self.speed_x

        #set window boundaries as limits and make ship bounce back in
        if(self.rect.x < 0) or (self.rect.x > 900 - 16):
            self.speed_x *= -1
        if(self.rect.y < 0) or (self.rect.y > 600 - 16):
            self.speed_y *= -1

        self.rect.x = self.rect.x + self.speed_x
        self.rect.y = self.rect.y + self.speed_y

def main():
    #load all game images
    #load background image
    background = pygame.image.load('PATHTOFILE/ocean.jpg').convert_alpha()
    background_rect = background.get_rect()

    #create a list of all sprites
    all_active_sprites = pygame.sprite.Group()

    #create list for ships
    ships = pygame.sprite.Group()
    ships_imgs = []
    ships_list = [
            'ship1.png',
            'ship2.png',
            'ship3.png',
            'ship4.png'
    ]

    for image in ships_list:
        ships_imgs.append(pygame.image.load(path.join(img_dir, image)))

    for i in range(4):
        new_ship = Ship(ships_imgs, all_active_sprites, ships)
        all_active_sprites.add(new_ship)
        ships.add(new_ship)

    #process input/output events
    while True: # main game loop
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        #update all sprites
        all_active_sprites.update()

        # draw/render
        WINDOW.fill(BLACK)
        # draw background image to game
        WINDOW.blit(background, background_rect)
        all_active_sprites.draw(WINDOW)

        # done after drawing everything to the screen
        pygame.display.flip()

        #limit to 30 FPS
        FPSCLOCK.tick(FPS)

if __name__ == "__main__":
    main()

如果要选择将ships_list中的4张png图像添加到环境中,则我要为其分配唯一的运动模式。例如,ship2.png特有的锯齿形运动模式。

我不确定实现此目标的最有效方法。我是否需要用每种船的特定类别替换一般的class Ship(...):,然后在def main()中随机调用一个类别?

我来自统计学背景,因此任何您认为相关的文献都将是有益的。谢谢,身体健康!

0 个答案:

没有答案