Pygame: назначение уникального пути движения для определенного изображения / спрайта - PullRequest
0 голосов
/ 15 мая 2019
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()

Я хотел бы назначить уникальный шаблон движения для каждого из 4 изображений PNG из моего ships_list, если они выбраны для добавления в среду. Например, модель зигзагообразного движения, уникальная для ship2.png.

Я не уверен в наиболее эффективном способе реализации этого. Должен ли я заменить мой общий class Ship(...): конкретным классом для каждого типа корабля, а затем случайно вызвать класс в моем def main()?

Я из области статистики, поэтому любая литература, которую вы считаете уместной, будет полезной. Спасибо и выздоровления!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...