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
sumber
Jawaban:
GhostBuster - Python
Pilihan tempat acak di peta, menggunakan algoritma A * untuk menemukan jalur terbaik ke depan. Setelah mencapai tujuannya, ia akan memilih yang baru dan melanjutkan. Ini akan mencoba untuk menghindari hantu, tetapi dengan FOV terbatas, itu kadang-kadang akan menabrak mereka. Ini akan menghindari berjalan di tempat yang sudah dikunjungi.
Menggunakan beberapa kode Sparr, terima kasih atas logikanya.
Windows 7, Visual Studios dengan Python Tools. Harus bekerja di kotak linux.
sumber
rabun dekat
Pac ini menghindari hantu yang berdekatan kecuali dia bisa memakannya, bergerak ke buah atau pelet yang berdekatan, dan berjalan secara acak sebagai pilihan terakhir.
sumber
penghindar
Hindari semua hantu sebagai pacman, dan semua pacmen saat hantu. Cobalah untuk menghindari jenisnya sendiri jika memungkinkan, dan kemudian hindari memutar 180 jika memungkinkan.
sumber
Fisikawan, Haskell
Fisikawan Pac-Man percaya bahwa hukum gravitasi universal Newton dapat membantunya memenangkan permainan. Lalu dia hanya menerapkannya ke semua objek lain yang dia tahu selama pertandingan. Karena fisikawan sudah tua dan memiliki ingatan yang buruk, ia hanya dapat mengingat hal-hal dalam 5 putaran. Hooooly, memori buruk sebenarnya membantunya untuk mencetak skor yang lebih baik.
Jawaban ini memiliki dua fille:
Main.hs
, mengandung bagian yang menarik.Pacman.hs
, hanya beberapa kode yang membosankan menangani protokol. Anda dapat menggunakannya untuk menulis solusi haskell Anda sendiri. Itu tidak mengandung kode AI apa pun.Oh, tunggu, kami juga punya
Makefile
.Mereka datang:
Main.hs
Pacman.hs
Makefile
command.txt
sumber
Main' Expected
Pacman '" ketika saya mencoba membuatnya. Juga, untuk menjalankannya, apakah saya hanya perlu membuatnya, atau adakah perintah lain yang perlu saya jalankan?physicist
executable. Diedit dan ditambahkancommand.txt
, sekarang.physicist.hs
menjadiMain.hs
dapat bekerja. Saya sudah memperbarui jawabannya.dumbpac
Pac ini hanya bergerak secara acak, tanpa memperhatikan tata letak labirin atau hantu atau faktor lainnya.
Perl:
Python:
sumber
jalan acak
pac ini berjalan secara acak, tetapi tidak ke dinding
sumber
Pathy, Python 3
Bot ini menggunakan banyak jalan menemukan. Diberikan posisi awal dan kondisi akhir, ia menggunakan BFS sederhana untuk menemukan jalur terpendek. Temuan jalur digunakan di:
command.txt
pathy.py
sumber
objects = [(tuple(map(int, x[:-1].split(',')))[::-1], x[-1]) for x in line.split(' ')]
throws aValueError: invalid literal for int() with base 10: '8o'