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 = 15

instagram viewer

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 + 10

kesinon_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çmek

kesinon_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 rastgele

EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600
OYUNCU_RADIUS = 15
NESNE_RADIUS = 10
NUM_OBJECTS = 10

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 + 10

self.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çmek

kesinon_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 /= mesafe

hı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 + 10

self.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.