Pygamede takıldım

Merhaba ben pythonda pygame modülünü kullanarak bir oyun yapıyorum ve de bir karakterim var fakat bir kısımda takıldım. tuşlar ile karakteri haraket ettirerek ekranda belirli bir alana gelip ve e tuşuna basınca benim değişkenim True olsun mesela x = 200 ile x = 600 arası ve y= 100 ile y= 200 arası bir alana gelip e tuşuna basacak ve e adlı değişken true olacak bunu nasıl yapabilirim

şuan soyut kalmış olabilir kafanızda

Çarpışma kontrolü rutinlerini uygulamayı deneyebilirsiniz.

Collision Detection in PyGame - GeeksforGeeks

Verdiğiniz sınırların içine geldiğinde true değeri verir. Siz de bu noktada tuşa basıldığında ve bu alanda bulunulma durumu true ise değişkeninize ilgili değerinizi atarsınız.

Bir kod verirseniz üzerinde de gerçekleyebiliriz.

pygame.Rect — pygame v2.4.0 documentation

Üzerinde çarpışma tespiti için ilgili rutinleri bulabilirsiniz.

Merhaba.

Bahsini ettiğiniz durum için aşağıdaki örneği inceleyebilirsiniz.

import pygame
from random import randint

resolution = (800, 800)
screen = pygame.display.set_mode(resolution)
clock = pygame.time.Clock()


# Oyuncu için oluşturulan sınıf.
class Player:
    def __init__(self, x, y, color):
        self.x = x
        self.y = y
        self.width = 100
        self.height = 100
        self.color = color

    def draw(self):
        geometry = (self.x, self.y, self.width, self.height)
        pygame.draw.rect(screen, self.color, geometry)


# Söz konusu alan için oluşturulan sınıf.
class Area:
    def __init__(self, geometry, color):
        self.geometry = geometry
        self.color = color

    def draw(self):
        pygame.draw.rect(screen, self.color, self.geometry)

    # Alanın rengini rastgele bir renk ile değiştirdiğimiz fonksiyon.
    def change_color(self):
        r = randint(100, 255)
        g = randint(100, 255)
        b = randint(100, 255)
        self.color = (r, g, b)

        
# İki dikdörtgen arasında çarpışma olup olmadığını kontrol ettiğimiz fonksiyon.
def check_collision():
    x1, y1 = player.x, player.y
    w1, h1 = player.width, player.height
    x2, y2, w2, h2 = area.geometry
    # w: width (genişlik), h: height (yükseklik)
    
    if (x1 < x2 + w2 and
        x2 < x1 + w1 and
        y1 < y2 + h2 and
        y2 < y1 + h1):
        print("collision!")
        return True
    else:
        return False
            
player = Player(x=50, y=50, color=(255, 255, 255))
area = Area(geometry=(300, 300, 200, 200), color=(100, 100, 100))

while True:
    # Maksimum FPS değerini 60'a eşitleyelim.
    clock.tick(60)
    # Ekranı siyaha boyayalım.
    screen.fill((0, 0, 0))
    # Fare koordinatlarını alalım.
    mouse_x, mouse_y = pygame.mouse.get_pos()
    # Oyuncunun pozisyonunu fare koordinatlarına göre ortalayalım.
    player.x = mouse_x - (player.width / 2)
    player.y = mouse_y - (player.height / 2)
    # Alanı, ardından da oyuncuyu çizelim.
    area.draw()
    player.draw()
    # Ekranı güncelleyelim.
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
        if event.type == pygame.KEYDOWN:
            # Alanın içerisine girdiğimizde basacağımız tuş, "E".
            if event.key == pygame.K_e:
                # Oyuncunun alan içerisine girip girmediğini kontrol edelim.
                if check_collision() is True:
                    # Oyuncu alan içerisine girmişse ve "E" tuşuna basılmışsa,
                    # Alanın rengini değiştir.
                    area.change_color()
                

Karakterinizin ve söz konusu alanın geometrisine uygun bir şekilde, herhangi bir çarpışmanın var olup olmadığını kontrol edebilirsiniz. İnternet üzerinde pek çok farklı durum için geliştirilmiş pek çok algoritma mevcut. Yukarıda yer alan örnekte, hem oyuncunun hem de alanın dikdörtgensel bir şekle sahip olduğunu varsayarak, ona göre bir çözüm uyguladım. Yorum satırları ile yapmış olduğum açıklamaların yeterli olacağını umut ediyorum. İyi çalışmalar.

koordinatlar

2 Beğeni