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()
?
Я из области статистики, поэтому любая литература, которую вы считаете уместной, будет полезной. Спасибо и выздоровления!