Задать вопрос
Alex_Kuzen
@Alex_Kuzen

Почему не двигается объект в pygame?

Надо что бы красная точка перемещалась к белым точкам, но почему то она стоит на месте. Простите за ужасный код, но как мог, так и сделал.

import pygame
import sys
import random
import time

pygame.init()
win = pygame.display.set_mode((800, 800))
white = (200, 200, 200)
red = (220, 51, 102)
green = (120, 120, 200)
black = (0, 0, 0)


class Hunter:
    white = pygame.Color(220, 100, 100)

    def __init__(self, x, y, h, w, color):
        self.x = x
        self.y = y
        self.h = h
        self.w = w
        self.color = color

    def hunter_show(self):
        pygame.draw.rect(win, (self.color), (self.x, self.y, self.h, self.w))

    def huner_move(self, x, y):
        self.x = x
        self.y = y


class Ex:
    def __init__(self, x, y, h, w, color):
        self.x = x
        self.y = y
        self.h = h
        self.w = w
        self.color = color

    def ex_show(self):
        pygame.draw.rect(win, (self.color), (self.x, self.y, self.h, self.w))

    def ex_position(self, x, y):
        self.x = x
        self.y = y


while True:
    color = white
    h_color = red
    pos_x_rand = random.randint(1, 790)
    pos_y_rand = random.randint(1, 790)

    hunter_pos_x = 0
    hunter_pos_y = 0
    time.sleep(0.0007)
    hunter_1 = Hunter(hunter_pos_x, hunter_pos_y, 5, 5, h_color)
    exl = Ex(pos_x_rand, pos_y_rand, 3, 3, color)
    if hunter_pos_y < pos_y_rand:
        hunter_pos_y += 1
    if hunter_pos_x < pos_x_rand:
        hunter_pos_x += 1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()


    exl.ex_show()
    hunter_1.hunter_show()
    pygame.display.update()
  • Вопрос задан
  • 255 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@o5a
Потому что сравниваете координаты не объекта hunter_1, а не связанные с ним координаты
if hunter_pos_y < pos_y_rand:
        hunter_pos_y += 1

когда должно быть примерно так
if hunter_1.y < pos_y_rand:
        hunter_1.y += 1

Аналогично и координаты целей (pos_y_rand). Сейчас координаты охотника сравниваются просто с этой рандомной точкой каждый раунд, а не с координатами реального объекта - цели.
К тому же этот самый hunter каждый цикл создается заново, хотя по логике предполагаю он должен быть только 1.
Т.е. создание объекта hunter нужно вынести наружу цикла, а координаты проверять по аттрибутам объекта, его же и двигать.
Во-вторых, эти цели (звёзды?) в текущем виде нигде не сохраняются, каждый цикл предыдущие объекты-цели перезаписываются, остается только их изображение на экране. Т.е. координаты ранее созданных целей взять будет негде. Если все же логика работы была - ходить за этими целями, то их нужно хранить (самое простое - добавлять к списку).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Тут вероятно нужно вынести инициализации положения охотника за пределы цикла while.
Я про вот этот код:
hunter_pos_x = 0
hunter_pos_y = 0

А так у вас на каждой итерации цикла все начинается с 0,0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы