• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pygame- kod sterowania kwadratem

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
751 wizyt
pytanie zadane 16 marca 2022 w Python przez crispia Nowicjusz (150 p.)

Wieczne początki z Pythonem i programowaniem

Chciałem w ramach treningu  napisać kod który wyświetla dwa kwadraty. Poruszamy jednym z nich (niebieskim) wokół zielonego tak aby kwadrat sterowany przez użytkownika nie „wchodził” na zielony.  Tu pojawia się moje pytanie. Chciałem to zrobić jak poniżej. Przy  tym kodzie współrzędna x obu kwadratów, po ich zetknięciu  jest jednak przy każdym obiegu pętli zdarzeń while taka sama. Niebieski kwadrat po zetknięciu z zielonym nie przesuwa się w lewo i prawo.

czy da się stworzyć taki warunek if aby dało się przesunąć kwadrat niebieski w prawo, za zielony kwadrat ( przy użyciu   

if event.key==pygame.K_UP: 

  lub cofnąć go w lewo.

Z góry dziękuję za pomoc. Pozdrawiam

 

import pygame
from sys import exit
pygame.init()

screen=pygame.display.set_mode((800,400))
pygame.display.set_caption('Square')
clock=pygame.time.Clock()



GREEN=(0,255,0)
BLUE=(0,0,255)


green_square_x_pos=500
green_square_y_pos=100

blue_square_x_pos=250
blue_square_y_pos=100


while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            exit()



    if event.type==pygame.KEYDOWN:
        if event.key==pygame.K_LEFT:
            if(square_green.left==square_blue.right):
                
                blue_square_x_pos==green_square_x_pos
            else:
            
                blue_square_x_pos-=2


        if event.key==pygame.K_RIGHT:
            if(square_blue.right==square_green.left):
                blue_square_x_pos==green_square_x_pos
            else: 
            
                blue_square_x_pos+=2



screen.fill((0,0,0))

    square_green=pygame.draw.rect(screen,GREEN,(green_square_x_pos,green_square_y_pos,100,100))
    
    square_blue=pygame.draw.rect(screen,BLUE,(blue_square_x_pos,blue_square_y_pos,100,100))

pygame.display.update()
clock.tick(60)

 

1 odpowiedź

0 głosów
odpowiedź 18 marca 2022 przez VBService Ekspert (256,600 p.)

Spróbuj użyć:  smiley

 

przykład

import pygame
from pygame.locals import *
from sys import exit
pygame.init()

window_size = (800, 400) 
window = pygame.display.set_mode(window_size)
pygame.display.set_caption('Square')
clock = pygame.time.Clock() 
 
GREEN = (0, 255, 0)
BLUE  = (0, 0, 255)
BLACK = (0, 0, 0)
 
green_square_x_pos = 500
green_square_y_pos = 100
 
blue_square_x_pos = 250
blue_square_y_pos = 100

window_frame = Rect(0, 0, window_size[0], window_size[1])
square_green = Rect(green_square_x_pos, green_square_y_pos, 100, 100)
square_blue  = Rect(blue_square_x_pos, blue_square_y_pos, 100, 100)

pixel_step = 5
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

        blue_square_x_pos = 0
        blue_square_y_pos = 0
        
        if event.type == pygame.KEYDOWN:            
            if event.key == pygame.K_RIGHT:
                blue_square_x_pos = pixel_step
                    
            if event.key == pygame.K_LEFT:
                blue_square_x_pos = -pixel_step

            if event.key == pygame.K_DOWN:
                blue_square_y_pos = pixel_step
                    
            if event.key == pygame.K_UP:
                blue_square_y_pos = -pixel_step                

        square_blue.move_ip(blue_square_x_pos, blue_square_y_pos)            
        collide = pygame.Rect.colliderect(square_blue, square_green)

        if collide:
            if event.key == pygame.K_RIGHT:
                blue_square_x_pos = -pixel_step
                    
            if event.key == pygame.K_LEFT:
                blue_square_x_pos = pixel_step
                
            if event.key == pygame.K_DOWN:
                blue_square_y_pos = -pixel_step
                    
            if event.key == pygame.K_UP:
                blue_square_y_pos = pixel_step
                
            square_blue.move_ip(blue_square_x_pos, blue_square_y_pos)

        square_blue.clamp_ip(window_frame)
 
    window.fill(BLACK)
 
    pygame.draw.rect(window, GREEN, square_green)
    pygame.draw.rect(window, BLUE, square_blue)
    
    pygame.display.flip()
    clock.tick(60)

 

Podobne pytania

0 głosów
0 odpowiedzi 300 wizyt
pytanie zadane 7 lipca 2022 w Python przez Karp.exe Początkujący (340 p.)
0 głosów
0 odpowiedzi 141 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)
+1 głos
1 odpowiedź 536 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,440 p.)

93,436 zapytań

142,431 odpowiedzi

322,669 komentarzy

62,801 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...