Pygame не отображает желаемый результат после нажатия на изображение - PullRequest
1 голос
/ 28 апреля 2020

Эй, я новичок в Pygame, и я только начал создавать игры, но я застрял в этой игре, и я не могу понять, что я делаю неправильно. Я сделал игру, в которой заряжается машина либо через свет, либо через электричество. Когда на солнечном свете уровень батареи начинает увеличиваться, в то время как в более холодной области он может заряжаться, только если есть станция зарядки электричества c. Проблема заключается в том, что уровень заряда батареи увеличивается в остальных код, но когда я нажимаю на значок зарядки в конце кода, это не так. Кстати, значок зарядки является своего рода усилителем, который предоставляется только в том случае, если он доступен в конце игры. Я попытался изменить этот конкретный код несколько раз и проверил, что в других модулях, но он не работает вообще. Пожалуйста, скажите мне, почему уровень заряда батареи не увеличивается в этом случае. Я застрял там по крайней мере пять дней. Любая помощь будет заметна.

    import pygame, time, random

    pygame.init()
    screen = pygame.display.set_mode((800, 600))

    dual_car = pygame.image.load("dual-car.png")
    carX = 300
    carY = 528
    carX_change = 0
    carY_change = 0

    charging_icon = pygame.image.load("chargingicon.png").convert()
    iconX = 500
    iconY = 200


    charging_station = pygame.image.load("charging-station.png")
    chargingX = 0
    chargingY = 475

    first_location = pygame.image.load("bright-road.png")
    firstX = 0
    firstY = 0

    second_location = pygame.image.load("snow-road.png")
    secondX = 2000
    secondY = 0

    third_location = pygame.image.load("sunny.png")
    thirdX = 4000
    thirdY = 0

    fourth_location = pygame.image.load("snow-road2.png")
    fourthX = 6000
    fourthY = 0

    battery_level = 1

    game_level = 1

    font = pygame.font.Font("freesansbold.ttf", 32)

    second_font = pygame.font.Font("freesansbold.ttf", 20)

    warning_time = 30

    draw_rectangles =  "a"

    transparent = (0, 0, 0, 0)


    def text():
       text = font.render("Battery Level:" + str(battery_level) +        
       "%",True, (48, 88, 123))
       screen.blit(text, (0, 0))


    def text2():
        text2 = font.render("BATTERY CHARGING", True, (69,117,203))
        screen.blit(text2, (300, 250))


    def text3():
      text3 = font.render("BATTERY DISCHARGING", True, (28, 229,7))
      screen.blit(text3, (300, 250))


    def text4():
        text4 = font.render("BATTERY FULLY CHARGED", 
        True(11,103,77))
        screen.blit(text4, (300, 250))


    def text5():
       text5 = font.render("GAME LEVEL: " + str(game_level), True, 
       (255, 0, 255))
       screen.blit(text5, (0, 130))


    def first():
       screen.blit(first_location, (firstX, firstY))


    def second():
       screen.blit(second_location, (secondX, secondY))


    def third():
       screen.blit(third_location, (thirdX, thirdY))


    def fourth():
        screen.blit(fourth_location, (fourthX, fourthY))


    def car():
        screen.blit(dual_car, (carX, carY))


    def show():
       first()
       second()
       third()
       fourth()
       car()
       text()
       text5()


       run = True
       while run:
       screen.fill((255, 255, 255))
       show()

       firstX -= 2
secondX -= 4
thirdX -= 4
fourthX -= 4


if draw_rectangles == False:
 rect1 = pygame.draw.rect(screen, (49, 97, 132), (100, 200, 500, 150))
 rect2 = pygame.draw.rect(screen, (27, 166, 166), (100, 300, 500, 150))
 text7 = second_font.render("Press below to quit!!", True, (100, 200, 99))
 rect3 = pygame.draw.rect(screen, (255, 255, 255), (100, 450, 100, 100))
 text8 = second_font.render("QUIT", True, (87, 163, 249))
 text9 = second_font.render("SORRY YOU COUDN'T CHARGE THE BATTERY", True, (249, 133, 87))
 rect4 = pygame.draw.rect(screen, (255, 0, 255), (200, 450, 400, 100))
 text10 = second_font.render("USE POWER SUPPLY", True, (0, 0, 0))
 screen.blit(text7, (100, 300))
 screen.blit(text8, (100, 450))
 screen.blit(text9, (100, 200))
 screen.blit(text10, (200, 450))
 pygame.display.flip()
elif draw_rectangles == True:
    screen.blit(charging_icon,(iconX,iconY))
    pygame.display.update()




carX += carX_change
carY += carY_change

if carX >= 0:
    pygame.time.delay(100)
    carX_change = 1

if carX >= 574:
    carX = 300

if secondX - carX > 10 and battery_level < 100 and carX % 2 == 0:
    battery_level += 1
    text2()
    pygame.display.flip()
if secondX - carX <= 10 and battery_level > 0 and carX % 1 == 0:
    battery_level -= 1
    text3()
    pygame.display.flip()

if secondX - carX <= 10 and battery_level == 0:
    minutes = warning_time // 60
    seconds = warning_time - (60 * minutes)
    warning_time -= 1
    if warning_time > -1 and battery_level == 0:
        screen.blit(charging_station, (chargingX, chargingY))
        text6 = font.render("WARNING TIME " + str(minutes) + ":" + str(seconds), True, (56, 70, 72))
        screen.blit(text6, (400, 0))
        pygame.display.flip()
        time.sleep(1)
    elif warning_time > -1 and battery_level > 0:
        game_level += 1
    if warning_time == -1 and battery_level == 0:
        draw_rectangles = False

if carX - chargingX < 200 and battery_level == 0:
    battery_level += 100
    game_level += 1
    carX = 300
if thirdX - carX <= 10 and battery_level < 100 and carX % 1 == 0:
    battery_level += 1
if fourthX - carX <= 10 and battery_level > 0 and carX % 2 == 0:
    battery_level -= 1

if battery_level == 100:
    text4()

    pygame.display.update()

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            carX -= 10
        if event.key == pygame.K_RIGHT:
            carX += 10
    elif event.type == pygame.MOUSEBUTTONDOWN:
        mouse_position = pygame.mouse.get_pos()
        if rect3.collidepoint(mouse_position):
            pygame.quit()
        if rect4.collidepoint(mouse_position):
           draw_rectangles = True
        if charging_icon.get_rect().collidepoint(mouse_position) and warning_time < -1:
            battery_level += 1

        pygame.quit()

1 Ответ

0 голосов
/ 28 апреля 2020

charging_icon - это объект pygame.Surface. Объект Surface не имеет позиции. Он помещается в положение, которое указано, когда оно составляет blit на целевой поверхности. Следовательно, позиция объекта pygame.Rect, который возвращается .get_rect(), всегда (0, 0).

Вы должны установить местоположение прямоугольник, например, путем передачи аргумента ключевого слова в .get_rect():

charging_rect = charging_icon.get_rect(topleft = (iconX,iconY))

if charging_rect.collidepoint(mouse_position) and warning_time < -1:
    battery_level += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...