class Snake(pygame.sprite.Sprite):
# constructor
def __init__(self, all_sprites_group, x, y, w, h, color):
...
def move(self, x=0, y=0):
self.x += x
self.y += y
def update(self):
self.rect.x = self.x * 32
self.rect.y = self.y * 32
Sıra move metotunu oyun döngüsünde yer alan event loop içinde kullanmaya geldi. Oyuncu, yukarı ok tuşuna bastığında y=-1, aşağı ok tuşuna bastığında y=1, sağ ok tuşuna bastığında x=1 ve sol ok tuşuna bastığında x=-1 argümanlarını alacaktır:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
snake.move(x=-1)
if event.key == pygame.K_RIGHT:
snake.move(x=1)
if event.key == pygame.K_UP:
snake.move(y=-1)
if event.key == pygame.K_DOWN:
snake.move(y=1)
Şimdi oyunu çalıştıralım ve hareket işleminin nasıl gerçekleştiğine bakalım:
Görüldüğü gibi yılanı hareket ettirdiğimizde geçtiği her yeri kırmızı yapıyor. Bunun çözümü ise oldukça basit. Her güncelleme esnasında yine aynı şekilde ekranı da siyah renk ile doldurursak çözüm sağlanmış olur:
# çizim
display.fill((0,0,0))
for x in range(0, 720, 32):
...
for y in range(0, 480, 32):
...
all_sprites_group.draw(display)
pygame.display.flip()
Oyunu tekrar çalıştırdığımızda ise aşağıdaki sonucu elde ederiz:Normalde yılan oyununda yılan sürekli hareket eder, oyuncu ise ona sadece yön verir. Ancak şu ana kadar yılanı hareket ettirmek tuşlara tekrar basılı tutmalıyız. Normal sadece bir kere sol ok tuşuna bastığımızda yılan hiç durmadan sol yöne doğru hareket etmeli.
Yön doğrultusunda hareket yapılacağı için dir adında bir özellik tanımlanır Snake sınıfı içinde ve move fonksiyonu aşağıdaki gibi güncellenir, yılan hareket ettikten sonra aktif yönde durmadan hareket etmesi gerektiği için update fonksiyonu da yine aşağıdaki gibi değiştirilir:
class Snake(pygame.sprite.Sprite):
# constructor
def __init__(self, all_sprites_group, x, y, w, h, color):
...
self.dir = ""
def move(self, dir):
self.dir = dir
def update(self):
if self.dir == 'left':
self.rect.x -= 1 * 32
self.x -= 1
self.rect.y = self.y * 32
if self.dir == 'right':
self.rect.x += 1 * 32
self.x += 1
self.rect.y = self.y * 32
if self.dir == 'up':
self.rect.x = self.x * 32
self.rect.y -= 1 * 32
self.y -= 1
if self.dir == 'down':
self.rect.x = self.x * 32
self.rect.y += 1 * 32
self.y += 1
Nesnenin yönlere göre hareket ettirilmesi için event loop içinde aşağıdaki değişiklikler yapılır:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
snake.move(dir='left')
if event.key == pygame.K_RIGHT:
snake.move(dir='right')
if event.key == pygame.K_UP:
snake.move(dir='up')
if event.key == pygame.K_DOWN:
snake.move(dir='down')
Oyun çalıştırıldığında ve yılan hareket ettirildiğinde muhtemelen ekranda hiçbir şey görünmeyecektir. Bu durumda yapmamız gereken oldukça basit, kare hızını düşürmek olacaktır. Bunun için tick metotu kullanılacak. İlk olarak clock adında bir zaman nesnesi tanımlanır:
display = pygame.display.set_mode((720, 480))
# **
clock = pygame.time.Clock()
pygame.display.set_caption('Merhaba Dünya')
Sonrasında oyun döngüsü içinde flip fonksiyonundan sonra tick metotu aşağıdaki gibi kullanılır:
while True:
for event in pygame.event.get():
...
# güncelle
...
# çizim
...
pygame.display.flip()
clock.tick(5)
clock.tick(5)'in anlamı her bir saniyede sadece 5 frame(kare) gösterileceğidir. Bu kısım oldukça önemli çünkü yılanın hızını yine tick metotuna göre değiştireceğiz.
Bunun için yüklememiz gereken bir paket var mı, çalıştıramadım bir türlü.
YanıtlayınSilÖncelikle Python'un kurulu olmalıdır. Sonrasında ise modül olarak Pygame yüklenmelidir. pip install pygame komutu ile terminal(cmd) üzerinden yükleyebilirsiniz. Eğer çalışmadıysa pip muhtemelen kurulu değildir, onu da yüklemelisiniz.
Sil