Импорт класса из другого файла
Я имею файл main.py в котором есть код:
import pygame
import os
import sys
import random as rand
from player import Player
def load_image(name, colorkey=None):
fullname = os.path.join('data', name)
# если файл не существует, то выходим
if not os.path.isfile(fullname):
print(f"Файл с изображением '{fullname}' не найден")
sys.exit()
image = pygame.image.load(fullname)
if colorkey is not None:
image = image.convert()
if colorkey == -1:
colorkey = image.get_at((0, 0))
image.set_colorkey(colorkey)
else:
image = image.convert_alpha()
return image
pygame.init()
pygame.display.set_caption('Battle City')
size = (500, 500)
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
FPS = 60
width = height = 25
player = None
enemies = []
all_sprites = pygame.sprite.Group()
tiles_group = pygame.sprite.Group()
player_group = pygame.sprite.Group()
enemy_group = pygame.sprite.Group()
tile_images = {
'wall': load_image('wall.png'),
'empty': load_image('empty.png'),
'iron-wall': load_image('iron-wall.png'),
'water': load_image('water.png'),
'base': load_image('base.png'),
'star': load_image('star.png'),
'grenade': load_image('grenade.png'),
'shovel': load_image('shovel.png')
}
player_image = load_image('player.png')
enemy_image = load_image("enemy1.png")
bullet_image = load_image('bullet.png')
tile_width = tile_height = 20
class Player(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, health, speed):
super().__init__(player_group, all_sprites)
self.image = player_image
self.rect = self.image.get_rect().move(
tile_width * pos_x, tile_height * pos_y)
self.x, self.y = pos_x, pos_y
self.angle = 0
self.top = self.down = self.left = self.right = False
self.last_direction = "top"
self.tile_type = "player"
self.hp = health
self.speed = speed
self.damage = 5
self.died = False
def get_position(self):
return self.rect.x, self.rect.y
def move(self):
if self.left:
self.rotate_player("left")
self.rect.x -= self.speed
elif self.right:
self.rotate_player("right")
self.rect.x += self.speed
elif self.top:
self.rotate_player("top")
self.rect.y -= self.speed
elif self.down:
self.rotate_player("down")
self.rect.y += self.speed
def rotate_player(self, side):
self.image = pygame.transform.rotate(self.image, -self.angle)
self.angle = 0
if side == "left":
self.image = pygame.transform.rotate(self.image, 90)
self.angle += 90
elif side == "right":
self.image = pygame.transform.rotate(self.image, 270)
self.angle += 270
elif side == "top":
pass
elif side == "down":
self.image = pygame.transform.rotate(self.image, 180)
self.angle += 180
self.last_direction = side
def check_position(self):
if self.rect.x < 0:
self.left = False
self.rect.x += 1
elif self.rect.x + 20 > size[0]:
self.right = False
self.rect.x -= 1
elif self.rect.y < 0:
self.top = False
self.rect.y += 1
elif self.rect.y + 20 > size[1]:
self.down = False
self.rect.y -= 1
def check_collision(self):
for sprite in all_sprites:
if pygame.Rect.colliderect(self.rect, sprite.rect) and sprite.tile_type in \
("wall", "iron-wall", "water", "base", "grenade", "shovel", "star", "enemy"):
if self.last_direction == "left":
self.rect.x += 1
self.left = False
elif self.last_direction == "right":
self.rect.x -= 1
self.right = False
elif self.last_direction == "top":
self.rect.y += 1
self.top = False
elif self.last_direction == "down":
self.rect.y -= 1
self.down = False
def death(self, damage):
self.hp -= damage
if self.hp <= 0:
self.died = True
def update(self, *args):
screen.blit(self.image, (self.rect.x, self.rect.y))
if args and args[0].type == pygame.KEYDOWN:
if args[0].key == pygame.K_LEFT:
self.left = True
elif args[0].key == pygame.K_RIGHT:
self.right = True
elif args[0].key == pygame.K_UP:
self.top = True
elif args[0].key == pygame.K_DOWN:
self.down = True
elif args and args[0].type == pygame.KEYUP:
if args[0].key == pygame.K_LEFT:
self.left = False
elif args[0].key == pygame.K_RIGHT:
self.right = False
elif args[0].key == pygame.K_UP:
self.top = False
elif args[0].key == pygame.K_DOWN:
self.down = False
self.check_position()
self.check_collision()
self.move()
Мне нужно перенести оттуда класс Player в другой файл. Проблема в том, что в классе используются переменные которые определяются до него, и мне бы не хотелось переписывать эти переменные в новый файл тоже.
Каким образом можно правильно вынести класс Player в другой файл для дальнейшего импорта?
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Думается мне, что лучше будет сделать так:
vars.py
#ваши переменные, которые вы не хотите переписывать
player.py
#class Player(): ....
main.py
from player import Player
from vars import *
...