Pac-Man'in Programlanması
Ayar
Pac-Man olarak oynuyorsun. Hayaletlerden sakınırken, diğerlerinden önce topakları, meyveleri ve güç topaklarını toplamak istiyorsunuz.
kurallar
- Her geçerli Pac-Man tek bir labirentte olacak. 10 maçtan sonra toplam puanı en yüksek olan oyuncu kazanır.
- Tüm Pac-Men'ler öldüğünde, tüm peletler bittiğinde veya 500 tur geçtiğinde oyun biter
- Bir Pac-Man ölürse, hayalet gibi oynamaya devam eder.
- Power pelet yemek, sizi 10 tur yenilmez yapar ve Ghosts yemene izin verir.
- Bir hayalet yemek hayaleti rastgele bir yere ışınlar
- Hayaletler Pac-Men dışında hiçbir şey yiyemez ve puan alamaz
- Aşağıdaki öğeleri Pac-Man olarak yemek size aşağıdaki puanları verecektir:
- Pelet: 10
- Güç Peleti: 50
- Meyve: 100
- Hayalet: 200
Labirent
Varsa n Pac-Men, büyüklüğü sonra bir labirent sqrt(n)*10
tarafından sqrt(n)*10
kullanılarak oluşturulacak Prim algoritması (nedeniyle 's düşük nehir faktörüne), sonra zaten varolan çıkmaz öncelik vererek, tamamen örgülü. Ayrıca, bu örgü kenarlar boyunca yapılabilir, böylece yukarıdan aşağıya ve soldan sağa birkaç yol vardır.
Olacak:
2n
Hayaletler4n
Güç Peletleri2n
Meyven
Bağlı komşuların karelerinin boş olduğu noktalarda Pac-Men.- Kalan tüm boş noktalar peletlerle doldurulacak
Dolayısıyla, 10 oyunculu bir ilk harita şöyle görünecektir (Hayaletler = yeşil, Peletler = su, meyve = kırmızı, Pac-Man = sarı):
Giriş çıkış
Oyunun başında , haritanın her bir köşesindeki duvarları temsil eden tek bir karakter satırı verilecek. Her kare için üst soldan başlayarak, sağa hareket ederek ve bir sonraki satıra sararak, duvar durumunu gösteren altıgen bir rakam verilecektir:
0: No walls
1: North wall
2: East wall
3: East & North wall
4: South wall
5: South & North wall
6: South & East wall
7: Won't occur
8: West wall
9: West & North wall
A: West & East wall
B: Won't occur
C: West & South wall
D: Won't occur
E: Won't occur
F: Won't occur
Basitçe söylemek gerekirse, Kuzey = 1, Doğu = 2, Güney = 4 ve Batı = 8, birlikte eklendi.
Sonra, her bir dönüşte , o anki pozisyonunuz ve görüş hattınızdaki öğeler verilecektir (eğer bir Pac-Man iseniz. Bütün hayaletler göreceli konumlarından -5 ile +5 arasındaki kareleri alır). Görüş hattınız, son turda seyahat ettiğiniz yöne göre olacaktır. Kuzeyi dolaştıysanız, bir duvar görüşünüzü kesinceye kadar doğrudan kuzey, doğu ve batıdaki tüm meydanlara ve bir duvarınız görüşünüzü kesemezse tek bir kuzeybatı ve kuzeydoğuya verilir. Hareket etmemeyi seçerseniz, 8 yönde de kareler verilecektir.
Görsel için, I
görünmez V
demektir, görünür P
demektir, Pac-Man (Pac-Man'in kuzeye baktığını varsayarsak) anlamına gelir:
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Her kare bir koordinat tarafından verilecek ve daha sonra içeriği. İçeriği aşağıdaki karakterlerle temsil edilir:
P
: 1 veya daha fazla Pac-ManG
: 1 veya daha fazla hayaleto
: PeletO
: Güç peletiF
: Bir parça meyveX
: Hiçbir şey değil
Bir hayalet ve meydanda başka bir şey varsa, G
iade edilecektir.
Dolayısıyla, meydanda 23,70
olsaydınız, kuzeye yeni geçtiyseniz, üstünüzdeki kare çıkmazdır ve bir Güç topağı içerir ve her iki tarafında da duvarlarınız varsa, girişiniz şöyle olacaktır:
23,70X 22,70O
Şu anki meydanınızda, G
bir Hayalet iseniz, bir meydanda başka bir Pac-Man P
varsa , yoksa birX
Daha sonra aşağıdaki maddeleri STDOUT aracılığıyla iade edersiniz:
Bir yönü temsil eden tek bir karakter ( N
orth, E
ast, S
outh, W
est veya X
Stay).
Bir yöne geçmeden önce, aynı şekilde herhangi bir koordinattan da geçebilirsiniz x,y
ve o karenin duvarları geri geçirilecektir (yukarıda açıklandığı gibi).
Program Q
STDIN üzerinden kendisine geçinceye kadar sürekli çalışıyor olmalıdır . Her oyun için programlar yeniden başlatılacak.
STDIN'e iletilenin dışındaki başka bilgilere erişme (diğer Pac-Men verileri veya ana program tarafından tutulan veriler dahil) yasaktır.
1000 ms içinde bir hamle yapmamak, programı sonlandıracak (Oldukça iyi Win8 makinemde çalışıyor). Size verildiğinde ilk labirent düzenini işlemek için size 2 saniye verilecek
Host Python ile yazılacak ve botunuzu test etmek için bir kod gelecek.
İstisnai durumlar
- Birden fazla Pac-Men aynı yere gelirse, tam olarak 1 tanesi yenilmez olmadığı sürece hiçbiri geçerli karenin içeriğini alamaz, bu durumda yenilmez Pac-Man topağı alır.
- Bir hayalet tarafından yenen bir Pac-Man başka bir yere ışınlanmayacak. Eğer iki Pac-Men meydanda ve biri yenilmez ise, hayalet ışınlanır.
- Bir hayalet gibi ışınlanmak, 1 tur boyunca hareket etmenizi önler. Hayalet olarak oynarken, sıranı atlayacaksın.
- Bir duvardan geçmeye çalışmak "Stay" olarak yorumlanır.
İlk hayaletlerin her biri , aşağıdaki değişiklikle birlikte, burada açıklandığı gibi, 4 kişilik özelliğinden birini alacaktır :
- Açıklanan hatalar kopyalanmayacak
- Hepsi baştan aktif olacak
- Onlar sadece pelet yiyen oyuncuya karşı savunmasız
- Her biri değişmeden önce sabit bir tur sayıları olan süreklilikten kovalamaya süreklilik göstereceklerdir.
- Kovalamaya geçtiklerinde, kovalanacak en yakın Pac-Man'i bulacaklar ve kovalamak için bu Pac-Man'i kovalayacaklar. (Yakınlık için bir bağ varsa, Pac-Man sahte olarak seçilecektir.)
- Blinky hızlanmayacak
- Inky, hesaplamaları kovalamaya geçtikten sonra hesaplamak için en yakın hayaleti seçecek.
- Clyde 8 oyuncuya tüm oyuncuları bulacaktır, ardından en uzaktaki oyuncuları takip edecektir.
- Clyde dışındaki tüm hayaletler 5 kareden uzaktaki bir oyuncuyu hedeflemeyecek
Derlenebilir kodları standart bir dilden veya bir .exe'den (eşlik eden kodla) kabul edeceğim.
Programlama İpuçları
Benim kontrolörümle olabilirsin. Bir / bots / your_bot_name / klasörünü programla aynı dizine koymanız gerekir. Klasör içinde, programınızı çalıştırmak için bir komut içeren bir command.txt eklemeniz gerekir (örneğin python my_bot.py
:) ve botunuz.
Denetleyici kodu Github'da (Grafik istiyorsanız, Python kodu, Pygame gerektirir.) Windows ve Linux'ta test edildi.
PUANLAR
hayalet avcısı: 72,840 puan
pathy: 54,570 puan
dar görüşlü: 50,820 puan
Kaçınmayı önleme: 23.580 puan
fizikçi: 18.330 puan
randomwalk: 7.760 puan
dumbpac: 4.880 puan