โปรแกรมของ Pac-Man
การตั้งค่า
คุณเล่นเป็น Pac-Man คุณต้องการรวบรวมเม็ดผลไม้และเม็ดพลังงานก่อนใครในขณะที่หลีกเลี่ยงผี
กฎระเบียบ
- Pac-Man ที่ถูกต้องทุกคนจะอยู่ในเขาวงกตเดียว ผู้เล่นที่มีคะแนนสะสมสูงสุดหลังจาก 10 เกมจะเป็นผู้ชนะ
- เกมจะจบลงเมื่อ Pac-Men ทั้งหมดตายไปเม็ดทั้งหมดจะหายไปหรือครบ 500 รอบ
- หาก Pac-Man ตายเขาจะยังคงเล่นเป็นผี
- กินเม็ดพลังงานจะทำให้คุณอยู่ยงคงกระพันเป็นเวลา 10 รอบและช่วยให้คุณกินผี
- กินผีจะส่งผีไปยังตำแหน่งสุ่ม
- ผีไม่สามารถกินอะไรได้นอกจาก Pac-Men และไม่ได้รับคะแนนใด ๆ
- การรับประทานรายการต่อไปนี้เป็น Pac-Man คุณจะได้รับคะแนนต่อไปนี้:
- เม็ด: 10
- เม็ดพลังงาน: 50
- ผลไม้: 100
- ผี: 200
เขาวงกต
หากมีn Pac-Men แล้วเขาวงกตของขนาดsqrt(n)*10
โดยsqrt(n)*10
จะได้รับการสร้างขึ้นโดยใช้อัลกอริทึมของ Prim (เนื่องจากมันปัจจัยแม่น้ำต่ำ) ถักสมบูรณ์แล้วให้ตั้งค่าไปยังปลายตายที่มีอยู่แล้ว นอกจากนี้การถักเปียนี้สามารถทำได้ข้ามขอบเพื่อให้มีเส้นทางไม่กี่จากบนลงล่างและจากซ้ายไปขวา
จะมี:
2n
ผี4n
เม็ดพลังงาน2n
ผลไม้n
Pac-Men ในจุดที่ช่องว่างของเพื่อนบ้านที่เชื่อมต่อนั้นว่างเปล่า- จุดที่ว่างเปล่าที่เหลือทั้งหมดจะถูกเติมด้วยเม็ด
ดังนั้นแผนที่เริ่มต้นที่มีผู้เล่น 10 คนจะมีลักษณะเช่นนี้ (Ghosts = green, Pellets = aqua, fruit = red, Pac-Man = yellow):
Input / Output
ในตอนต้นของเกมคุณจะได้รับอักขระหนึ่งบรรทัดซึ่งแสดงถึงกำแพงในทุกตารางของแผนที่ สำหรับแต่ละช่องสี่เหลี่ยมเริ่มต้นด้วยซ้ายบนขวาเคลื่อนที่และล้อมรอบบรรทัดถัดไปคุณจะได้รับเลขฐานสิบหกที่แสดงถึงสถานการณ์ของกำแพง:
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
ใส่อย่างง่ายทิศเหนือ = 1, ตะวันออก = 2, ใต้ = 4 และตะวันตก = 8, รวมเข้าด้วยกัน
จากนั้นในแต่ละตาคุณจะได้รับตำแหน่งปัจจุบันของคุณและรายการในสายตาของคุณ (ถ้าคุณเป็น Pac-Man ผีทั้งหมดจะได้รับสี่เหลี่ยมทั้งหมดตั้งแต่ -5 ถึง +5 จากตำแหน่งที่สัมพันธ์กัน สายตาของคุณจะขึ้นอยู่กับทิศทางที่คุณเดินทางไปทางโค้งสุดท้าย หากคุณเดินทางไปทางเหนือคุณจะได้รับสี่เหลี่ยมทั้งหมดโดยตรงเหนือตะวันออกและตะวันตกของคุณจนกว่ากำแพงจะตัดมุมมองของคุณบวกกับสี่เหลี่ยมจัตุรัสตะวันตกเฉียงเหนือและตะวันออกเฉียงเหนือเดียวหากไม่มีกำแพงตัดมุมมองของคุณ หากคุณเลือกที่จะไม่ย้ายคุณจะได้รับสี่เหลี่ยมทั้ง 8 ทิศทาง
สำหรับภาพI
หมายถึงมองไม่เห็นV
หมายถึงมองเห็นได้P
หมายถึง Pac-Man (สมมติว่า Pac-Man หันหน้าไปทางทิศเหนือ):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
แต่ละตารางจะได้รับจากพิกัดแล้วเนื้อหาของมัน มันเป็นเนื้อหาที่แสดงโดยตัวละครต่อไปนี้:
P
: Pac-Man 1 รายการขึ้นไปG
: 1 ผีขึ้นไปo
: เม็ดO
: เม็ดพลังงานF
: ชิ้นส่วนของผลไม้X
: ไม่มีอะไร
หากมีผีและอย่างอื่นในสี่เหลี่ยมG
จะถูกส่งกลับ
ดังนั้นถ้าคุณอยู่ที่จตุรัส23,70
คุณเพิ่งขยับไปทางเหนือสี่เหลี่ยมจัตุรัสเหนือคุณคือจุดจบและบรรจุเม็ดพลังงานและคุณมีกำแพงทั้งสองด้านของคุณอินพุตของคุณจะเป็น:
23,70X 22,70O
บนสแควร์ปัจจุบันของคุณมันจะแสดงG
ว่าคุณเป็นผีหรือไม่P
ถ้ามีPac-Man อีกอันหนึ่งอยู่ในสแควร์ของคุณX
จากนั้นคุณจะส่งคืนรายการต่อไปนี้ผ่าน STDOUT:
อักขระตัวเดียวที่แสดงทิศทาง ( N
orth, E
ast, S
outh, W
est หรือX
Stay)
ก่อนที่จะผ่านไปในทิศทางหนึ่งคุณอาจผ่านไปในพิกัดใด ๆ เช่นx,y
กันและผนังของสี่เหลี่ยมนั้นจะถูกส่งกลับ (ดังอธิบายข้างต้น)
โปรแกรมจะต้องทำงานอย่างต่อเนื่องจนกว่าQ
จะผ่านมันผ่านทาง STDIN โปรแกรมจะเริ่มใหม่สำหรับแต่ละเกม
การเข้าถึงข้อมูลอื่นนอกเหนือจากสิ่งที่ส่งผ่านไปยัง STDIN (รวมถึงข้อมูล Pac-Men อื่น ๆ หรือข้อมูลที่โฮสต์โดยโปรแกรมโฮสต์) ไม่ได้รับอนุญาต
ความล้มเหลวในการส่งคืนการย้ายภายใน 1,000 มิลลิวินาทีจะเป็นการยุติโปรแกรม (การรันบนเครื่อง Win8 ที่เหมาะสมของฉัน) คุณจะได้รับ 2 วินาทีในการประมวลผลรูปแบบเขาวงกตเริ่มต้นเมื่อได้รับ
โฮสต์จะถูกเขียนใน Python และรหัสเพื่อทดสอบบอทของคุณกำลังจะมาถึง
กรณีพิเศษ
- หาก Pac-Men หลายคนจบลงที่สถานที่เดียวกันไม่ได้รับเนื้อหาของจัตุรัสปัจจุบันเว้นแต่ว่าพวกเขา 1 คนจะอยู่ยงคงกระพันในกรณีนี้ Pac-Man ที่อยู่ยงคงกระพันจะได้รับเม็ด
- Pac-Man ที่ผีกินเข้าไปจะไม่ถูกเคลื่อนย้ายไปที่อื่น หาก Pac-Men สองคนอยู่ในจตุรัสและอีกคนอยู่ยงคงกระพันผีจะหายตัวไป
- การถูกเทเลพอร์ตเป็นผีจะป้องกันไม่ให้คุณเคลื่อนที่ 1 เทิร์น เมื่อเล่นเป็นผีคุณก็จะได้ตาของคุณข้าม
- ความพยายามที่จะย้ายผ่านกำแพงจะถูกตีความว่าเป็น "อยู่"
ผีเริ่มต้นแต่ละตัวจะได้รับหนึ่งใน 4 ลักษณะตามที่อธิบายไว้ที่นี่พร้อมกับการดัดแปลงต่อไปนี้:
- ข้อบกพร่องที่อธิบายไว้จะไม่ซ้ำกัน
- พวกเขาทั้งหมดจะเปิดใช้งานตั้งแต่ต้น
- พวกเขามีความเสี่ยงต่อผู้เล่นที่กินเม็ดเท่านั้น
- พวกเขาจะเปลี่ยนจากการกระจายไปยังการไล่ล่าอย่างไม่มีกำหนดแต่ละคนมีจำนวนรอบที่แน่นอนก่อนที่จะเปลี่ยน
- เมื่อเปลี่ยนไปใช้การไล่ล่าพวกเขาจะพบ Pac-Man ที่ใกล้ที่สุดเพื่อไล่ล่าและจะไล่ล่า Pac-Man นั้นในช่วงระยะเวลาของการไล่ล่า (หากมีเน็คไทสำหรับความใกล้ชิด Pac-Man จะได้รับการสุ่มหลอก)
- บลิงกี้จะไม่เร่งความเร็ว
- Inky จะเลือกผีที่อยู่ใกล้ที่สุดเพื่อยึดการคำนวณของเขาหลังจากเปลี่ยนไปใช้การไล่ล่า
- ไคลด์จะพบผู้เล่นทั้งหมด 8 สแควร์สจากนั้นทำตามผู้เล่นที่ไกลที่สุด
- ผีทั้งหมดยกเว้นไคลด์จะไม่พุ่งเป้าไปยังผู้เล่นที่อยู่ไกลออกไปมากกว่า 5 สี่เหลี่ยม
ฉันจะยอมรับรหัสที่คอมไพล์ได้จากภาษามาตรฐานหรือ. exe (พร้อมกับรหัสประกอบ)
เคล็ดลับการเขียนโปรแกรม
คุณอาจมีตัวควบคุมของฉัน คุณต้องใส่ a / bots / your_bot_name / folder ในไดเรกทอรีเดียวกับโปรแกรม ภายในโฟลเดอร์คุณจะต้องเพิ่ม command.txt ที่มีคำสั่งเพื่อรันโปรแกรมของคุณ (เช่น:) python my_bot.py
และบอทของคุณ
รหัสคอนโทรลเลอร์อยู่บนGithub (รหัส Python ต้องการ Pygame หากคุณต้องการกราฟิก) ทดสอบบน windows และ linux
คะแนน
ghostbuster: 72,840 คะแนน
น่ากลัว: 54,570 คะแนน
สายตาสั้น: 50,820 คะแนน
หลีกเลี่ยงการโต้ตอบ: 23,580 คะแนน
นักฟิสิกส์: 18,330 คะแนน
Randomwalk: 7,760 คะแนน
dumbpac: 4,880 คะแนน