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.
İçerik Tablosu
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.
img = np.zeros((500,500,3),dtype='uint8')
Yılan ve Elma : Yılanımızı oluşturmak için yeşil renkte bir Dikdörtgen, yılanımızın yiyeceği elmayı da kırmızı renkli bir Dikdörtgenkullanacağız. Tüm Dikdörtgenlerimiz 10 ünite boyutunda olacak.
- 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.
- Uzunluğun Artması : Ayrıca, yeme elma yılan uzunluğu artmalıdır. Aksi takdirde, yılan olduğu gibi hareket eder.
- 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.
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] -= 10v
Final Sonucunu Gösterme
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.
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:
- OpenCV Nedir?
- Python ve OpenCV ile Video Oynatma
- Python ve OpenCV ile Videoyu Renklerine Ayırma
- Python ve OpenCV İle Video Kaydetme
- Python ve OpenCV ile Resim İşlemlerine Giriş
- Python ve OpenCV Kullanarak Yüz Tanıma Uygulaması
- Python ve OpenCV Kullanarak Bilgisayar Kamerasından Görüntü Almak
- Pyton ve OpenCV Kullanarak Kenar Algılama Uygulaması
- Python ve OpenCV Kullanarak Resimlere Elastik Efekti Verme
- Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması
- Python Ve OpenCv İle WebCam’den Aldığınız Görüntüyü İşlemek
- Python Ve OpenCV Ile Resimlerinizi JSON Formatına Çevirin
- Python Ve OpenCV Ile Youtube Videolarını Stream Yapma
- Python Ve OpenCV Kullanarak Bir Resmin Tüm Piksellerine Ulaşmak
- Python ve OpenCV kullanarak komik aynalar uygulaması
- Python Ve OpenCV Ile Basit Şekil Algılama Uygulaması
- Python Ve OpenCV Kullanarak Görüntülere Gerçek Zamanlı Metin Yazma
- Python Ve OpenCV Kullanarak Belli Bir Nokta Ile Hareket Arası Mesafe Ölçümü
- Python ve OpenCV Kullanarak Yılan Oyunu Yapımı