Pygame oyun kodum keyerror hatasi veriyor

2-Oyun iki aşamalı.
3-Oyunun 1. aşamasında sağ tarafta uçaklar,sol tarafta hayvanlar bulunuyor. Oyunun amacı doğru hayvan, fotoğraflarını, doğru uçaklara sürükleyebilmektedir.

hayvan fotoğraf dosyalarının ismi:
-akbaba.jpeg
-ebabil.jpeg
-yusufçuk.jpeg
-yunus.jpeg

uçak fotoğraf dosyalarının ismi:
-concorde.jpeg
-helikopter.jpeg
-a320.jpeg
-savasucagi.jpeg

4-Oyunun 1. aşamasında eşleştirilmesi gereken hayvan ve uçak çiftleri aşağıdaki gibidir:
yusufçuk.jpeg-helikopter.jpeg
yunus.jpeg-concorde.jpeg
ebabil.jpeg-savasucagi.jpeg
akbaba.jpeg-concorde.jpeg

5-Oyunun birinci aşamasında bu eşleştirmeler dışındaki sürüklemeler yanlıştır ve yanlış eşleşmelee sonrasinda ekranda “tekrar dene” yazar ve bir saniye sonra kaybolur.

6- Doğru eşleştirilem fotoğraflar ekrandan kaybolur. Tüm hayvanlar doğru eşlestirildikten sonra (ekranda hiç resim kalmaması gerekmektedir.)oyunun ikinci aşamasına geçilir. Ekrana ikinci aşama için fotoğraflar gelir.

7-Oyunun ikinci aşaması da birinci aşamasıyla aynı amacı taşır. Sol tarafta hayvan resimleri, sağ tarafta ise uçak resimleri durmaktadır. Oyunun ikinci aşamasında gösterilecek olan resimlerin uzantıları aşağıdaki gibidir:

oyunun 2. aşamasındaki hayvan resimlerinin dosyalarinin ismi:
-aa.jpeg
-se.jpeg
-hy.jpeg
-cy.jpeg

oyunun 2. aşamasındaki uçak resimlerinin dosyalarının ismi:
-tuyyapisi.jpeg
-kuyrukyapisi.jpeg
-ucusstili.jpeg
-burunyapisi.jpeg

8-Oyunun 2. aşamasında eşleştirilmesi gereken hayvan ve uçak çiftleri aşağıdaki gibidir:

aa.jpeg-tuyyapisi.jpeg
se.jpeg-kuyrukyapisi.jpeg
hy.jpeg-ucusstili.jpeg
cy.jpeg-burunyapisi.jpeg

9-Oyunun ikinci aşamasında bu eşleştirmeler dışındaki sürüklemeler yanlıştır ve yanlış eşleşmeler sonrasinda ekranda “tekrar dene” yazar ve bir saniye sonra kaybolur.

10- Doğru eşleştirilen fotoğraflar ekrandan kaybolur. Tüm hayvanlar doğru eşlestirildikten sonra (ekranda hiç resim kalmaması gerekmektedir.)oyun biter.

11-Fotograglarin eşleştirilmesi olayı birbiri üzerine “sürüklenilmesi” ile gerçekleştirilir.

12- Doğru eslestirilen hem hayvan hem de uçak fotoğrafı kaybolur.

13- Fotoğraflar 0.1 oranında küçültülür ve Fotoğraflar alt alta iken arasında biraz boşluk bırakılır.

şeklinde bir oyun asamam var ve ben aşağıdaki kodları yazdım.

import pygame
import sys

# Pygame başlatma
pygame.init()

# Ekran ayarları
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Eşleştirme Oyunu')

# Renkler
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# Fotoğrafların yüklenmesi ve boyutlandırılması için fonksiyon
def load_and_scale_image(image_path, scale_factor):
    # Resmi yükle
    image = pygame.image.load(image_path)
    # Resmin boyutunu al
    original_size = image.get_size()
    # Yeni boyutları hesapla
    scaled_size = (int(original_size[0] * scale_factor), int(original_size[1] * scale_factor))
    # Resmi yeni boyutlara göre ölçeklendir
    return pygame.transform.scale(image, scaled_size)

# Resimleri yükle ve %7 oranında küçült
scale_factor = 0.07
animal_images = {
    'akbaba': 'akbaba.jpeg',
    'ebabil': 'ebabil.jpeg',
    'yusufçuk': 'yusufçuk.jpeg',
    'yunus': 'yunus.jpeg'
}
plane_images = {
    'concorde': 'concorde.jpeg',
    'helikopter': 'helikopter.jpeg',
    'a320': 'a320.jpeg',
    'savasucagi': 'savasucagi.jpeg'
}
second_stage_animal_images = {
    'aa': 'aa.jpeg',
    'se': 'se.jpeg',
    'hy': 'hy.jpeg',
    'cy': 'cy.jpeg'
}
second_stage_plane_images = {
    'tuyyapisi': 'tuyyapisi.jpeg',
    'kuyrukyapisi': 'kuyrukyapisi.jpeg',
    'ucusstili': 'ucusstili.jpeg',
    'burunyapisi': 'burunyapisi.jpeg'
}

# Eşleştirme sözlüğü
matching_pairs_first_stage = {
    'yusufçuk': 'helikopter',
    'yunus': 'concorde',
    'ebabil': 'savasucagi',
    'akbaba': 'a320'
}
matching_pairs_second_stage = {
    'aa': 'tuyyapisi',
    'se': 'kuyrukyapisi',
    'hy': 'ucusstili',
    'cy': 'burunyapisi'
}

# Fotoğrafların Pygame yüzeylerine yüklenmesi ve ölçeklendirilmesi
loaded_animal_images = {name: load_and_scale_image(img, scale_factor) for name, img in animal_images.items()}
loaded_plane_images = {name: load_and_scale_image(img, scale_factor) for name, img in plane_images.items()}
loaded_second_stage_animal_images = {name: load_and_scale_image(img, scale_factor) for name, img in second_stage_animal_images.items()}
loaded_second_stage_plane_images = {name: load_and_scale_image(img, scale_factor) for name, img in second_stage_plane_images.items()}

# Boşluk değeri
spacing = 20  # Fotoğraflar arası boşluk

# Oyun durumları
first_stage_complete = False
second_stage_complete = False
dragging = False
selected_image = None
selected_key = None

# Oyun döngüsü
running = True
while running:
    screen.fill(WHITE)
    
    # Olayları kontrol etme
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if not first_stage_complete or (first_stage_complete and not second_stage_complete):
                for key, img in loaded_animal_images.items():
                    if img.get_rect(topleft=(100, list(loaded_animal_images.keys()).index(key) * (img.get_height() + spacing))).collidepoint(event.pos):
                        dragging = True
                        selected_image = img
                        selected_key = key
                        break
        elif event.type == pygame.MOUSEBUTTONUP:
            if dragging:
                dragging = False
                if not first_stage_complete:
                    correct_plane = matching_pairs_first_stage[selected_key]
                    plane_img = loaded_plane_images[correct_plane]
                    plane_rect = plane_img.get_rect(topleft=(700, list(loaded_plane_images.keys()).index(correct_plane) * (plane_img.get_height() + spacing)))
                    if plane_rect.collidepoint(event.pos):
                        # Doğru eşleştirme yapıldığında her iki resmi de kaldır
                        del loaded_animal_images[selected_key]
                        del loaded_plane_images[correct_plane]
                        if not loaded_animal_images:  # İlk aşama tamamlandıysa ikinci aşamaya geç
                            first_stage_complete = True
                            loaded_plane_images = {name: load_and_scale_image(img, scale_factor) for name, img in second_stage_plane_images.items()}
                            loaded_animal_images = {name: load_and_scale_image(img, scale_factor) for name, img in second_stage_animal_images.items()}
                    else:
                        # Yanlış eşleştirme mesajı
                        font = pygame.font.Font(None, 36)
                        text = font.render('Tekrar Dene', True, RED)
                        screen.blit(text, (width // 2 - text.get_width() // 2, height // 2 - text.get_height() // 2))
                        pygame.display.flip()
                        pygame.time.wait(500)  # Mesajın süresini 500 milisaniye olarak ayarla
                elif first_stage_complete and not second_stage_complete:
                    correct_plane = matching_pairs_second_stage[selected_key]
                    plane_img = loaded_second_stage_plane_images[correct_plane]
                    plane_rect = plane_img.get_rect(topleft=(700, list(loaded_second_stage_plane_images.keys()).index(correct_plane) * (plane_img.get_height() + spacing)))
                    if plane_rect.collidepoint(event.pos):
                        # Doğru eşleştirme yapıldığında her iki resmi de kaldır
                        del loaded_second_stage_animal_images[selected_key]
                        del loaded_second_stage_plane_images[correct_plane]
                        if not loaded_second_stage_animal_images:  # İkinci aşama tamamlandıysa oyunu bitir
                            second_stage_complete = True
                            font = pygame.font.Font(None, 36)
                            text = font.render('Oyun Bitti', True, RED)
                            screen.blit(text, (width // 2 - text.get_width() // 2, height // 2 - text.get_height() // 2))
                            pygame.display.flip()
                            pygame.time.wait(3000)
                            running = False

    # Fotoğrafları ekrana çizme
    if not first_stage_complete or (first_stage_complete and not second_stage_complete):
        for key, img in loaded_animal_images.items():
            screen.blit(img, (100, list(loaded_animal_images.keys()).index(key) * (img.get_height() + spacing)))
        for key, img in loaded_plane_images.items():
            screen.blit(img, (700, list(loaded_plane_images.keys()).index(key) * (img.get_height() + spacing)))

    # Sürüklenen fotoğrafı ekranda gösterme
    if dragging:
        mouse_x, mouse_y = pygame.mouse.get_pos()
        screen.blit(selected_image, (mouse_x - selected_image.get_width() // 2, mouse_y - selected_image.get_height() // 2))

    # Ekranı güncelleme
    pygame.display.flip()

kod doğru bir şekilde çalışıyor herhangi bir sorun yok. fakat ikinci aşamaya geçildiğinde eslestirilmeler yapılmıyor ve keyError vererek ekran kapanıyor. sorun nedir

Bu satırdaki hatayı düzeltip dener misin?

# Renkler
WHITE = (255, 
![17105803727702815267711897971623|375x500](upload://6mGCxvvKfXp1l7M3blt7wFsFP15.jpeg)
255, 255)

olması gereken;

# Renkler
WHITE = (255, 255, 255)

oraya fotoğraf koymaya çalışmıştım kodun aslı dediğiniz gibi bir yanlışlık olmuş.