Python ve OpenCV Kullanarak Yılan Oyunu Yapımı

0 173

Python ile neredeyse sınırsız sayıda, farklı alanlarda uygulamalarda geliştirmek mümkün. Python ile farklı şekiller de bir takım kütüphaneler kullanarak oyunlar geliştirmekte mümkün.

Bu yazımız da Python ve OpenCV kullanarak basit bir yılan oyunu (snake game) uygulaması geliştireceğiz. Bu yılan uygulamayı “pygames” gibi sadece oyun geliştirmek için hazırlanmış spesifik kütüphaneleri kullanarak daha gelişmiş biçimde yapabilirsiniz. Bu yazımızdaki amaç OpenCV kütüphanesini kullanarak farklı uygulama örneklerini yapabilmek.

Python ve OpenCV Kullanarak Yılan Oyunu Yapımı

Sadece Python ve OpenCV kullanarak bir oyun yapmak oldukça ilginç bir fikir. Ve bu uygulamayı sadece alttaki komutları kullanarak gerçekleştireceğiz.

  • cv2.imshow()
  • cv2.waitKey()
  • cv2.putText()
  • cv2.rectangle()

Gerekli Kütüphaneler

Yılan oyunumuzu yapabilmek için sadece 4 kütüphaneye ihtiyacımız var. Bu kütüphaneleri alttaki gibi kodumuza dahil edelim.

import numpy as np
import cv2
import random
import time

Oyun Bileşenlerini Ekranda Gösterme

Oyun Penceresi : Oyun penceresi olarak 500×500 piksellik bir pencere kullanacağız.

  • Snake and Apple: I have used green squares for displaying a snake and a red square for an apple. Each square has a size of 10 units.
  • Sınırlarla çarpışma: Eğer yılan sınırlarla çarpışırsa ölür.
  • Kendisiyle çarpışma: Yılan kendisiyle çarpışırsa ölmelidir. Bunun için sadece yılanın kafasının yılan gövdesinde olup olmadığını kontrol etmemiz gerekir.
  • Elma ile çarpışma: Yılan elma ile çarpışırsa, skor artar ve elma yeni bir yere taşınır.
  • Tuşa Basma Olayı :Yılan oyunu bir tuşa basmak için sabit bir zaman var. Bu süre içinde herhangi bir düğmeye basarsanız, yılan bu yönde hareket etmelidir, aksi takdirde önceki yönde hareket etmeye devam eder. Ne yazık ki, OpenCV cv2.waitKey () işleviyle, sol yön düğmesini basılı tutarsanız yılan bu yönde hızlı hareket etmeye başlar. Yani, yılan hareketini üniform hale getirmek için,
    böyle bir şey yaptım.
  • Yılan geriye doğru hareket edemez: Burada, yılanı hareket ettirmek için w, a, s, d kontrollerini kullandım. Yılan sağa hareket ediyor ve sol düğmeye basarsak, sağa hareket etmeye devam eder veya kısa yılan doğrudan geriye doğru hareket edemez.

Son puanı görüntülemek için, cv2.putText () işlevini kullandım.

Son olarak, yılan oyunumuz hazır ve şöyle görünüyor.

python ve opencv yılan oyunu

Kodların Tamamı

import numpy as np
import cv2
import random
import time
def collision_with_apple(apple_position, score):
    apple_position = [random.randrange(1,50)*10,random.randrange(1,50)*10]
    score += 1
    return apple_position, score

def collision_with_boundaries(snake_head):
    if snake_head[0]>=500 or snake_head[0]<0 or snake_head[1]>=500 or snake_head[1]<0 :
        return 1
    else:
        return 0

def collision_with_self(snake_position):
    snake_head = snake_position[0]
    if snake_head in snake_position[1:]:
        return 1
    else:
        return 0
img = np.zeros((500, 500, 3), dtype='uint8')
# Initial Snake and Apple position
snake_position = [[250, 250], [240, 250], [230, 250]]
apple_position = [random.randrange(1, 50) * 10, random.randrange(1, 50) * 10]
score = 0
prev_button_direction = 1
button_direction = 1
snake_head = [250, 250]
while True:
    cv2.imshow('a', img)
    cv2.waitKey(1)
    img = np.zeros((500, 500, 3), dtype='uint8')
    # Display Apple
    cv2.rectangle(img, (apple_position[0], apple_position[1]), (apple_position[0] + 10, apple_position[1] + 10),
                  (0, 0, 255), 3)
    # Display Snake
    for position in snake_position:
        cv2.rectangle(img, (position[0], position[1]), (position[0] + 10, position[1] + 10), (0, 255, 0), 3)

    # Takes step after fixed time
    t_end = time.time() + 0.2
    k = -1
    while time.time() < t_end:
        if k == -1:
            k = cv2.waitKey(125)
        else:
            continue

    # 0-Left, 1-Right, 3-Up, 2-Down, q-Break
    # a-Left, d-Right, w-Up, s-Down

    if k == ord('a') and prev_button_direction != 1:
        button_direction = 0
    elif k == ord('d') and prev_button_direction != 0:
        button_direction = 1
    elif k == ord('w') and prev_button_direction != 2:
        button_direction = 3
    elif k == ord('s') and prev_button_direction != 3:
        button_direction = 2
    elif k == ord('q'):
        break
    else:
        button_direction = button_direction
    prev_button_direction = button_direction

    # Change the head position based on the button direction
    if button_direction == 1:
        snake_head[0] += 10
    elif button_direction == 0:
        snake_head[0] -= 10
    elif button_direction == 2:
        snake_head[1] += 10
    elif button_direction == 3:
        snake_head[1] -= 10

    # Increase Snake length on eating apple
    if snake_head == apple_position:
        apple_position, score = collision_with_apple(apple_position, score)
        snake_position.insert(0, list(snake_head))

    else:
        snake_position.insert(0, list(snake_head))
        snake_position.pop()

    # On collision kill the snake and print the score
    if collision_with_boundaries(snake_head) == 1 or collision_with_self(snake_position) == 1:
        font = cv2.FONT_HERSHEY_SIMPLEX
        img = np.zeros((500, 500, 3), dtype='uint8')
        cv2.putText(img, 'Your Score is {}'.format(score), (140, 250), font, 1, (255, 255, 255), 2, cv2.LINE_AA)
        cv2.imshow('a', img)
        cv2.waitKey(0)
        cv2.imwrite('D:/downloads/ii.jpg', img)
        break

cv2.destroyAllWindows()

 

Diğer OpenCV Örnekleri

Python ve OpenCv görüntü işleme kütüphanesi kullanarak hazırladığımız diğer örneklerimizin listesi:

  1. OpenCV Nedir?
  2. Python ve OpenCV ile Video Oynatma
  3. Python ve OpenCV ile Videoyu Renklerine Ayırma
  4. Python ve OpenCV İle Video Kaydetme
  5. Python ve OpenCV ile Resim İşlemlerine Giriş
  6. Python ve OpenCV Kullanarak Yüz Tanıma Uygulaması
  7. Python ve OpenCV Kullanarak Bilgisayar Kamerasından Görüntü Almak
  8. Pyton ve OpenCV Kullanarak Kenar Algılama Uygulaması
  9. Python ve OpenCV Kullanarak Resimlere Elastik Efekti Verme
  10. Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması
  11. Python Ve OpenCv İle WebCam’den Aldığınız Görüntüyü İşlemek
  12. Python Ve OpenCV Ile Resimlerinizi JSON Formatına Çevirin
  13. Python Ve OpenCV Ile Youtube Videolarını Stream Yapma
  14. Python Ve OpenCV Kullanarak Bir Resmin Tüm Piksellerine Ulaşmak
  15. Python ve OpenCV kullanarak komik aynalar uygulaması
  16. Python Ve OpenCV Ile Basit Şekil Algılama Uygulaması
  17. Python Ve OpenCV Kullanarak Görüntülere Gerçek Zamanlı Metin Yazma
  18. Python Ve OpenCV Kullanarak Belli Bir Nokta Ile Hareket Arası Mesafe Ölçümü
  19. Python ve OpenCV Kullanarak Yılan Oyunu Yapımı

Kaynak https://theailearner.com/2019/03/10/creating-a-snake-game-using-opencv-python/

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku