#python #class #subclass
#python #класс #подкласс
Вопрос:
Я новичок в python и занимаюсь программированием уже месяц. Я решил создать простой игровой проект (в pygame), в котором игрок (круг) будет двигаться в направлении курсора мыши, используя векторы.
import pygame
import random
import pyautogui
#Add Mouse class and use pyautogui.position() to return mouse position later on
pygame.init()
screen_width, screen_height = 500, 500
screen = pygame.display.set_mode((screen_width, screen_height))
class Player:
def __init__(self, x, y, circle_color, circle_radius, circle_outline_width):
self.circle_color = circle_color
self.coordinates = (x, y)
self.circle_radius = circle_radius
self.circle_outline_widht = circle_outline_width
def draw(self, window):
pygame.draw.circle(window, self.circle_color, self.coordinates, self.circle_radius)
Мой класс игрока с основными атрибутами, необходимыми для создания игрока ^^^^
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def get_circle_position(self):
event = pygame.event.poll()
if event.type == pygame.MOUSEMOTION:
circle_position = f"Circle at X: {self.x}, Y:{self.y}"
return circle_position
Мой класс точек, который должен считывать положение круга в любой данный момент. Проблема в том (я знаю, что этот код неправильный), Я хочу использовать self.x
и self.y
из класса Player, которые являются координатами игрока с момента появления, и я не хочу снова повторять весь код. Я не знаю, возможно ли это? И как?
Остальная часть кода с def main()
def constantly_display(window, player):
window.fill(pygame.Color("white"))
player.draw(window)
pygame.display.update()
def main():
run = True
p = Player(random.randint(35, screen_width - 40), random.randint(35, screen_height - 40),
pygame.Color((random.randint(0, 200)),
(random.randint(0, 200)),
(random.randint(0, 200))), 40, 5)
c = Point(p, p)
p.getposition = c
while run:
p.getposition.get_circle_position()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
constantly_display(screen, p)
main()
Другая проблема заключается в том, как подключить все это к def main()
? (Улучшения кода / синтаксиса приветствуются)
Спасибо!
Комментарии:
1. Мне не очень понятно, почему у вас здесь два класса. Можете ли вы уточнить, что именно определяет, какой бит кода используется в одном по сравнению с другим? Возможно, вы хотите
self.coordinates = Point(x, y)
войтиPlayer.__init__
, но было бы гораздо разумнее вставить код поиска мышиPlayer
, а неPoint
(я бы ожидал, что это будет больше связано с векторной математикой).2. @Blckknight Я хотел сделать игру организованной по классам, просто для простой практики и возможности добавления все большего количества игроков позже, чтобы увидеть, как это будет иметь значение, конечной конечной целью было бы сделать ее многопользовательской, вот почему я подумал, что мне нужны классы, чтобы у каждого игрока были свои собственныеатрибуты, отслеживание кругов и отслеживание мыши. Я хочу каким-то образом наследовать self.x и self. y, которые являются круговыми шнурами в классе Player и используют его в классе Point, и основная функция для отслеживания круга / игрока. То же самое относится и к классу мыши, тогда я бы добавил точечные шнуры к шнурам мыши для движений игрока.
3. Занятия — это хорошо, но вам нужно научиться правильно их комбинировать. Вы на самом деле не объяснили, почему ваш
Point
класс должен существовать отдельно отPlayer
класса, или что означает «отслеживание круга» в этом контексте. Есть много способов получить доступ кx
иy
координатам одного класса из какого-то другого класса, не очевидно, что лучше для вас. Вероятно, вам нужны какие-то «композиционные» отношения, когда один из ваших классов имеет ссылку на экземпляр другого, но без понимания того, что означают классы, на самом деле не очевидно, что было бы лучше.