Rastgele hareketli nesneler ekleyerek atari oyunlarınızı daha eğlenceli ve heyecanlı hale getirin.
Rastgele hareket eden nesneler, oyunlara heyecan ve öngörülemezlik getirebilir. Onları oyuncular için daha ilgi çekici ve zorlu hale getirir. Python'un Arcade kitaplığı, rastgele hareket eden nesneleri oyunlarınıza dahil etmenin basit ve verimli bir yolunu sunar.
Basit Bir Oyun Yaratın
Başlamadan önce, sahip olduğunuzdan emin olun. cihazınızda yüklü pip. yüklemek için bu komutu kullanın. oyun makinesi kütüphane:
pip yükleme çarşı
Bundan sonra, kullanarak bir pencere oluşturun. oyun makinesi. pencere class ve arka plan rengini beyaz olarak ayarlayın.
Bu makalede kullanılan kod bu makalede mevcuttur. GitHub deposu ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.
Oyuncunun konumunu yatay olarak ekranın ortasına ayarlayın ve yukarıdan küçük bir mesafe ekleyin. Ok tuşlarını kullanarak oyuncunun hareketini kontrol edebilirsiniz.
İşte temel oyunumuzun kodu:
içe aktarmak oyun makinesi
EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600
OYUNCU_RADIUS = 15sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
arcade.set_background_color (arcade.color. BEYAZ)self.player_x = SCREEN_WIDTH // 2
self.player_y = OYUNCU_RADIUS + 10kesinon_draw(kendi):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. MAVİ)kesingüncelleme(öz, delta_time):
geçmekkesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= 5
elif anahtar == çarşı.key. SAĞ:
self.player_x += 5
eğer __isim__ == "__ana__":
oyun = Oyunum (SCREEN_WIDTH, SCREEN_HEIGHT)
çarşı.run()
Birden Çok Nesne Ekleme
Oyununuza rastgele hareket eden nesneler eklemek için, nesnenin konumlarını saklayacak bir liste oluşturun ve bunları her karede güncelleyin. Ayrıca kullanabilirsin nesne olarak sprite'lar.
Oyun kodunuzda, adlı bir liste ekleyin. nesneler rastgele hareket eden nesnelerin konumlarını saklamak için. Bundan sonra, nesne sayısını oluşturun (NUM_OBJECTS) ekran sınırları içinde rastgele x ve y koordinatlarıyla. Nesneler kullanılarak kırmızı daireler olarak çizilir. arcade.draw_circle_filled işlev.
içe aktarmak oyun makinesi
içe aktarmak rastgeleEKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600
OYUNCU_RADIUS = 15
NESNE_RADIUS = 10
NUM_OBJECTS = 10sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
arcade.set_background_color (arcade.color. BEYAZ)self.player_x = SCREEN_WIDTH // 2
self.player_y = OYUNCU_RADIUS + 10self.nesneler = []
için _ içinde aralık (NUM_OBJECTS):
x = rastgele.randint(0, EKRAN GENİŞLİĞİ)
y = rastgele.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))kesinon_draw(kendi):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. MAVİ)için nesne içinde self.nesneler:
x, y = nesne
arcade.draw_circle_filled (x, y, OBJECT_RADIUS, arcade.color. KIRMIZI)kesingüncelleme(öz, delta_time):
geçmekkesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= 5
elif anahtar == çarşı.key. SAĞ:
self.player_x += 5
eğer __isim__ == "__ana__":
oyun = Oyunum (SCREEN_WIDTH, SCREEN_HEIGHT)
çarşı.run()
Çıktı aşağıdadır:
Rastgele Hareket Algoritmasını Uygulama
Nesnelerin rastgele hareket etmesini sağlamak için konumlarını güncelleyin. güncelleme Rastgele hareket algoritması kullanan yöntem.
Her nesneyi yineleyin ve için rasgele değerler oluşturun. dx Ve öl, x ve y koordinatlarındaki değişikliği temsil eder. Ardından, bu değerleri ekleyerek nesnenin konumunu güncelleyin. İşte değiştirilen kod:
kesingüncelleme(öz, delta_time):
için Ben içinde aralık (NUM_OBJECTS):
x, y = self.nesneler[i]
dx = rasgele.randint(-5, 5)
dy = rastgele.randint(-5, 5)
x += dx
y += gün
self.nesneler[i] = (x, y)
Çıktı aşağıdadır:
Oyuncuya Doğru Hareket Eden Nesneler
Daha fazla etkileşim eklemek için nesneleri oynatıcıya doğru hareket ettirin. Bunu, nesne ile oyuncu arasındaki yön vektörünü hesaplayarak ve nesnenin konumunu buna göre ayarlayarak elde edebilirsiniz.
Bunun için nesne ile oyuncu arasındaki x ve y koordinatlarındaki farkları hesaplayın. Bu değerleri normalleştirerek bir yön vektörü elde edersiniz. Daha sonra bu vektörü bir hız faktörüyle (bu durumda 3) çarpın ve bunu nesnenin konumuna ekleyin. İşte güncellenen güncelleme yöntem:
kesingüncelleme(öz, delta_time):
için Ben içinde aralık (NUM_OBJECTS):
x, y = self.nesneler[i]
dx = self.player_x - x
dy = self.player_y - y
mesafe = matematik.kare (dx ** 2 + can ** 2)
dx /= mesafe
dy /= mesafe
x += dx * 3
y += dy * 3
self.nesneler[i] = (x, y)
Çıktı aşağıdadır:
Oyuncu Çevreye Girdiğinde Nesneler Hareket Etmeye Başlar
Daha fazla dinamik eklemek için kodu, nesnelerin yalnızca oyuncu çevredeki alana girdiğinde hareket etmeye başlaması için değiştirin. Ekle oyuncunun hareketi için kod ve nesnelerin etkin hale geldiği bir yarıçap tanımlayın.
kesingüncelleme(öz, delta_time):
için Ben içinde aralık (NUM_OBJECTS):
x, y = self.nesneler[i]
dx = self.player_x - x
dy = self.player_y - y
mesafe = matematik.kare (dx ** 2 + can ** 2)
eğer mesafe < 100: # Yarıçapı gerektiği gibi ayarlayın
dx /= mesafe
dy /= mesafe
x += dx * 3
y += dy * 3
self.nesneler[i] = (x, y)
Çarpışma Algılama ve Etkileşim
Şimdi, oynatıcı ile nesneler arasına çarpışma algılama ekleyin ve bir çarpışma meydana geldiğinde davranışı tanımlayın. Değiştirmek güncelleme çarpışmaları işlemek için yöntem:
kesingüncelleme(öz, delta_time):
için Ben içinde aralık (NUM_OBJECTS):
x, y = self.nesneler[i]
dx = self.player_x - x
dy = self.player_y - y
mesafe = matematik.kare (dx ** 2 + can ** 2)
eğer mesafe < PLAYER_RADIUS + OBJECT_RADIUS:
# çarpışma meydana gelirse, burada halledin
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, EKRAN_YÜKSEKLİK)))
elif mesafe < 100:
dx /= mesafe
dy /= mesafe
x += dx * 3
y += dy * 3
self.nesneler[i] = (x, y)
Rastgeleliği Dengeleme
Dengeli bir oyun deneyimi oluşturmak için nesnelerin rastgele hareketine ve ortaya çıkmasına ince ayar yapmak önemlidir. Oyununuzda daha iyi bir denge elde etmek için kodu nasıl ayarlayabileceğinize dair birkaç örnek:
Maksimum Hızı Sınırlama
Nesnelerin çok hızlı hareket etmesini önlemek için bir maksimum hız sınırı belirleyebilirsiniz. Değiştirmek güncelleme hız kısıtlamalarını dahil etme yöntemi:
kesingüncelleme(öz, delta_time):
için Ben içinde aralık (NUM_OBJECTS):
x, y = self.nesneler[i]
dx = self.player_x - x
dy = self.player_y - y
mesafe = matematik.kare (dx ** 2 + can ** 2)eğer mesafe < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, EKRAN_YÜKSEKLİK)))
elif mesafe < 100:
dx /= mesafe
dy /= mesafehız = 3# Hız değerini gerektiği gibi ayarlayın
dx = min (maks (dx * hız, -MAX_SPEED), MAX_SPEED)
dy = min (maks (dy * hız, -MAX_SPEED), MAX_SPEED)
x += dx
y += gün
self.nesneler[i] = (x, y)
Yumurtlama Hızını Kontrol Etme
Oyunda yeni nesnelerin ortaya çıkma hızını da kontrol edebilirsiniz. Kodu, yeni nesnelerin oluşturulması arasında bir gecikme olacak şekilde ayarlayın:
içe aktarmak zaman
sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
arcade.set_background_color (arcade.color. BEYAZ)self.player_x = SCREEN_WIDTH // 2
self.player_y = OYUNCU_RADIUS + 10self.nesneler = []
self.last_spawn_time = zaman.time()kesingüncelleme(öz, delta_time):
# yumurtlama oranını buradan kontrol edin
eğer time.time() - self.last_spawn_time > SPAWN_DELAY:
eğer len (self.nesneler) < MAX_OBJECTS:
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, EKRAN_YÜKSEKLİK)))
self.last_spawn_time = zaman.time()için Ben içinde aralık (len (self.nesneler)):
x, y = self.nesneler[i]
dx = self.player_x - x
dy = self.player_y - y
mesafe = matematik.kare (dx ** 2 + can ** 2)eğer mesafe < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, EKRAN_YÜKSEKLİK)))
elif mesafe < 100:
dx /= mesafe
dy /= mesafe
x += dx * 3
y += dy * 3
self.nesneler[i] = (x, y)
Ayarla SPAWN_DELAY Ve MAX_OBJECTS Oyununuz için doğru dengeyi bulmak için değerler. Daha uzun bir gecikme veya daha az sayıda nesne oyunu daha az kalabalık hale getirecektir. Oysa daha kısa bir gecikme veya daha büyük bir maksimum, zorluğu artıracaktır.
Hareketli Nesneleri Kullanarak Oyunları Daha Eğlenceli Hale Getirin
Oyunlara rastgele hareketli nesneler eklemek, genel deneyimi önemli ölçüde artırabilir. Oynanışı daha ilgi çekici ve dinamik hale getirerek öngörülemezlik ve meydan okuma sunarlar. Oyuncular, çarpışmalardan kaçınmak veya nesneleri yakalamak için hızlı bir şekilde adapte olmak ve tepki vermek zorunda kalacak ve bu da bir heyecan ve başarı duygusu sağlayacak.