Programmin 'Pac-Man
Pengaturan
Anda bermain sebagai Pac-Man. Anda ingin mengumpulkan pelet, buah, dan pelet listrik sebelum orang lain, sambil menghindari hantu.
Aturan
- Setiap Pac-Man yang valid akan berada dalam satu labirin. Pemain dengan skor kumulatif tertinggi setelah 10 pertandingan akan menang.
- Sebuah permainan berakhir ketika semua Pac-Men mati, semua pelet hilang, atau 500 putaran telah berlalu
- Jika Pac-Man meninggal, ia terus bermain sebagai hantu
- Makan pelet Power akan membuat Anda tak terkalahkan selama 10 putaran, dan memungkinkan Anda untuk makan Hantu
- Makan Hantu akan memindahkan hantu ke lokasi acak
- Hantu tidak bisa makan apa pun kecuali Pac-Men, dan tidak mendapat poin
- Makan item berikut sebagai Pac-Man akan memberi Anda poin-poin berikut:
- Pelet: 10
- Power Pellet: 50
- Buah: 100
- Hantu: 200
Labirin
Jika ada n Pac-Men, maka labirin ukuran sqrt(n)*10
oleh sqrt(n)*10
akan dihasilkan menggunakan algoritma Prim (karena faktor sungai rendah), kemudian dikepang sepenuhnya, memberikan preferensi untuk jalan buntu yang sudah ada. Selanjutnya, jalinan ini dapat dilakukan melintasi tepian, sehingga ada beberapa jalur dari atas ke bawah dan dari kiri ke kanan.
Akan ada:
2n
Hantu4n
Pelet Daya2n
Buahn
Pac-Men di tempat di mana kotak tetangga yang terhubung kosong.- Semua tempat kosong yang tersisa akan diisi dengan pelet
Karenanya, peta awal dengan 10 pemain akan terlihat seperti ini (Hantu = hijau, Pelet = aqua, buah = merah, Pac-Man = kuning):
Input output
Di awal permainan , Anda akan diberikan satu baris karakter, yang mewakili dinding di setiap kotak peta. Untuk setiap kotak, mulai dengan kiri atas, bergerak ke kanan, dan membungkus ke baris berikutnya, Anda akan diberi digit heks yang mewakili situasi dinding:
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
Sederhananya, Utara = 1, Timur = 2, Selatan = 4, dan Barat = 8, ditambahkan bersamaan.
Kemudian, setiap belokan , Anda akan diberikan posisi Anda saat ini dan barang-barang di garis pandang Anda (jika Anda adalah Pac-Man. Semua hantu menerima semua kotak dari -5 hingga +5 dari posisi relatif mereka). Garis pandang Anda akan didasarkan pada arah perjalanan terakhir Anda. Jika Anda bepergian ke utara, Anda akan diberikan semua bujur sangkar langsung ke Utara, Timur, dan Barat sampai dinding memotong pandangan Anda ditambah satu bujur sangkar Northwest dan Northeast, jika tidak ada dinding yang memotong pandangan Anda. Jika Anda memilih untuk tidak bergerak, Anda akan diberikan kotak di semua 8 arah.
Untuk visual, I
berarti tidak terlihat, V
berarti terlihat, P
berarti Pac-Man (dengan asumsi Pac-Man menghadap ke utara):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Setiap kotak akan diberikan oleh koordinat, dan kemudian isinya. Konten itu diwakili oleh karakter berikut:
P
: 1 atau lebih Pac-ManG
: 1 atau lebih Hantuo
: PeletO
: Power pelletF
: Sepotong BuahX
: Tidak ada
Jika ada hantu dan sesuatu yang lain di lapangan, G
akan dikembalikan.
Oleh karena itu, jika Anda berada di bujur sangkar 23,70
, Anda baru saja bergerak ke utara, alun-alun di atas Anda adalah jalan buntu dan berisi pelet Power, dan Anda memiliki dinding di kedua sisi Anda, input Anda adalah:
23,70X 22,70O
Di alun-alun Anda saat ini, maka akan tampil G
jika Anda Ghost, satu P
jika ada yang lain Pac-Man di alun-alun Anda, jika tidak sebuahX
Maka Anda akan mengembalikan barang-barang berikut melalui STDOUT:
Karakter tunggal mewakili arah ( N
ort, E
ast, S
outh, W
est, atau X
Stay).
Sebelum melewati suatu arah, Anda juga dapat melewati koordinat apa pun sebagai x,y
, dan dinding persegi itu akan dilewati kembali (seperti dijelaskan di atas)
Program harus terus berjalan sampai Q
dilewatkan melalui STDIN. Program akan dimulai kembali untuk setiap game.
Mengakses informasi lain di luar apa yang diteruskan ke STDIN (termasuk data Pac-Men lainnya atau data yang dipegang oleh program host) tidak diizinkan.
Gagal mengembalikan gerakan dalam waktu 1000 ms akan menghentikan program (Menjalankan mesin Win8 saya yang cukup baik). Anda akan diberikan 2 detik untuk memproses tata letak labirin awal saat diberikan
Host akan ditulis dengan Python, dan kode untuk menguji bot Anda akan datang.
Kasus luar biasa
- Jika beberapa Pac-Men berakhir di lokasi yang sama, keduanya tidak mendapatkan isi dari kuadrat saat ini, kecuali jika salah satu dari mereka tidak terkalahkan, dalam hal ini, Pac-Man yang tak terkalahkan akan menerima pelet.
- Pac-Man yang dimakan oleh Ghost tidak akan diteleportasi ke tempat lain. Jika dua Pac-Men berada di bujur sangkar, dan satu tidak terkalahkan, hantu itu akan diteleportasi.
- Teleportasi sebagai Hantu mencegah Anda bergerak untuk 1 giliran. Saat bermain sebagai Hantu, giliran Anda akan dilewati
- Mencoba bergerak melalui dinding akan ditafsirkan sebagai "Tetap"
Setiap hantu awal akan menerima salah satu dari 4 ciri kepribadian, seperti yang dijelaskan di sini , dengan modifikasi berikut:
- Bug yang dijelaskan tidak akan diduplikasi
- Mereka semua akan aktif dari awal
- Mereka hanya rentan terhadap pemain yang memakan pelet
- Mereka akan secara tak terbatas beralih dari scatter ke chase, masing-masing memiliki jumlah putaran sebelum beralih
- Setelah beralih ke pengejaran, mereka akan menemukan Pac-Man terdekat untuk mengejar, dan akan mengejar Pac-Man itu selama durasi pengejaran mereka. (Jika ada dasi untuk kedekatan, Pac-Man akan dipilih secara acak)
- Blinky tidak akan mempercepat
- Inky akan memilih hantu terdekat untuk mendasarkan perhitungannya setelah beralih ke pengejaran.
- Clyde akan menemukan semua pemain 8 kotak jauhnya, kemudian ikuti pemain terjauh.
- Semua hantu kecuali Clyde tidak akan menargetkan pemain lebih jauh dari 5 kotak jauhnya
Saya akan menerima kode yang dapat dikompilasi dari bahasa standar atau .exe (dengan kode yang disertakan).
Tips Pemrograman
Anda mungkin dengan controller saya. Anda harus meletakkan folder / bots / your_bot_name / di direktori yang sama dengan program. Di dalam folder, Anda perlu menambahkan command.txt yang berisi perintah untuk menjalankan program Anda (mis:) python my_bot.py
, dan bot Anda.
Kode pengontrol ada di Github (kode Python, membutuhkan Pygame jika Anda ingin grafik.) Diuji pada windows dan linux
SKOR
ghostbuster: 72.840 poin
pathy: 54.570 poin
picik: 50.820 poin
Hindari interaksi: 23.580 poin
fisikawan: 18.330 poin
jalan acak: 7.760 poin
dumbpac: 4.880 poin