Untitled

 avatar
unknown
python
a year ago
5.9 kB
9
Indexable
import cv2
import numpy as np
import random
from PIL import Image, ImageDraw, ImageFont
import time

# Pencere boyutları
genislik, yukseklik = 800, 600

# Kare boyutları ve aralık
kare_boyutu = 100
bosluk = 2

# Kare sayısı
satir_sayisi, sutun_sayisi = 4, 5

# Ortada hizalama için başlangıç koordinatları
baslangic_x = (genislik - (sutun_sayisi * kare_boyutu + (sutun_sayisi - 1) * bosluk)) // 2
baslangic_y = (yukseklik - (satir_sayisi * kare_boyutu + (satir_sayisi - 1) * bosluk)) // 2

# Metinler listesi
text = open("kelimeler.txt", "r", encoding="utf-8").read()
kelimeler=text.split("\n\n")
# Pencere oluşturma
pencere_adi = 'benzer kelimeler'
cv2.namedWindow(pencere_adi)

# Metin yazma fonksiyonu (PIL kullanarak)
def metin_yaz(resim, metin, pozisyon, font_path='arial.ttf', font_boyutu=24, renk=(0, 0, 0)):
    pil_img = Image.fromarray(cv2.cvtColor(resim, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(pil_img)
    font = ImageFont.truetype(font_path, font_boyutu)
    draw.text(pozisyon, metin, font=font, fill=renk)
    resim[:] = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)

# Rastgele kareler ve kelimeler seçme fonksiyonu
def rastgele_kareler_ve_metinler_sec():
    rastgele_kareler = random.sample(range(satir_sayisi * sutun_sayisi), 5)
    rastgele_kelimeler = random.sample(kelimeler, 5)
    return rastgele_kareler, rastgele_kelimeler

# Başlangıçta rastgele 5 kare ve metin seç
rastgele_kareler, rastgele_kelimeler = rastgele_kareler_ve_metinler_sec()

# Seçilen yeşil kareleri sayma
yesil_kare_sayisi = 0

# Mouse callback fonksiyonu
def renk_degistir(event, x, y, flags, param):
    global yesil_kare_sayisi, rastgele_kareler, rastgele_kelimeler
    if event == cv2.EVENT_LBUTTONDOWN:
        for i in range(satir_sayisi):
            for j in range(sutun_sayisi):
                sol_ust_x = baslangic_x + j * (kare_boyutu + bosluk)
                sol_ust_y = baslangic_y + i * (kare_boyutu + bosluk)
                sag_alt_x = sol_ust_x + kare_boyutu
                sag_alt_y = sol_ust_y + kare_boyutu
                
                if sol_ust_x <= x <= sag_alt_x and sol_ust_y <= y <= sag_alt_y:
                    kare_indeksi = i * sutun_sayisi + j
                    if kare_indeksi in rastgele_kareler:
                        metinler = rastgele_kelimeler[rastgele_kareler.index(kare_indeksi)].split('\n')
                        metin1 = metinler[0]
                        metin2 = metinler[1]
                    else:
                        metinler = kelimeler[kare_indeksi % len(kelimeler)].split('\n')
                        metin1 = metinler[0]
                        metin2 = metin1

                    if metin1 == metin2:
                        cv2.rectangle(param, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (0, 0, 255), -1)  # kırmızı renk
                        metin_yaz(param, metin1, (sol_ust_x + 10, sol_ust_y + 30))
                        metin_yaz(param, metin2, (sol_ust_x + 10, sol_ust_y + 70))
                        cv2.imshow(pencere_adi, param)
                        cv2.waitKey(500)  # 0.5 saniye bekle
                        cv2.rectangle(param, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (192, 192, 192), -1)  # eski rengi geri getir
                        metin_yaz(param, metin1, (sol_ust_x + 10, sol_ust_y + 30))
                        metin_yaz(param, metin2, (sol_ust_x + 10, sol_ust_y + 70))
                    else:
                        cv2.rectangle(param, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (0, 255, 0), -1)  # yeşil renk
                        metin_yaz(param, metin1, (sol_ust_x + 10, sol_ust_y + 30))
                        metin_yaz(param, metin2, (sol_ust_x + 10, sol_ust_y + 70))
                        yesil_kare_sayisi += 1
                        
                        if yesil_kare_sayisi == 5:
                            yesil_kare_sayisi = 0
                            time.sleep(1)
                            param[:] = np.ones((yukseklik, genislik, 3), dtype=np.uint8) * 255
                            rastgele_kareler, rastgele_kelimeler = rastgele_kareler_ve_metinler_sec()
                            kareleri_ve_metinleri_ciz(param)
                        break

# Kareleri ve metinleri çizme fonksiyonu
def kareleri_ve_metinleri_ciz(resim):
    for i in range(satir_sayisi):
        for j in range(sutun_sayisi):
            sol_ust_x = baslangic_x + j * (kare_boyutu + bosluk)
            sol_ust_y = baslangic_y + i * (kare_boyutu + bosluk)
            sag_alt_x = sol_ust_x + kare_boyutu
            sag_alt_y = sol_ust_y + kare_boyutu
            cv2.rectangle(resim, (sol_ust_x, sol_ust_y), (sag_alt_x, sag_alt_y), (192, 192, 192), -1)
            kare_indeksi = i * sutun_sayisi + j
            if kare_indeksi in rastgele_kareler:
                metinler = rastgele_kelimeler[rastgele_kareler.index(kare_indeksi)].split('\n')
                metin1 = metinler[0]
                metin2 = metinler[1]
            else:
                metinler = kelimeler[kare_indeksi % len(kelimeler)].split('\n')
                metin1 = metinler[0]
                metin2 = metin1
            metin_yaz(resim, metin1, (sol_ust_x + 10, sol_ust_y + 30))
            metin_yaz(resim, metin2, (sol_ust_x + 10, sol_ust_y + 70))

# Boş bir görüntü oluşturma (arka plan beyaz)
resim = np.ones((yukseklik, genislik, 3), dtype=np.uint8) * 255

# Başlangıçta kareleri ve metinleri çiz
kareleri_ve_metinleri_ciz(resim)

# Mouse callback fonksiyonunu ayarlama
cv2.setMouseCallback(pencere_adi, renk_degistir, resim)

while True:
    cv2.imshow(pencere_adi, resim)
    if cv2.waitKey(1) & 0xFF == 27:  # ESC tuşuna basıldığında döngüyü kır
        break

cv2.destroyAllWindows()
Editor is loading...
Leave a Comment