PlayPendium
Bulwark · อาหารสมอง

ขุนศึกคิดอย่างไร

เล่นคนเดียวแล้วสามในสี่ปราสาทจะถูกป้องกันโดยเครื่องจักร ขุนศึกคอมพิวเตอร์แต่ละตนรันลูปสั้น ๆ ชุดเดียวกัน คือหาลูกบอลที่ควรค่าแก่การกลัว เดาว่ามันจะข้ามกำแพงของตนตรงไหน เลื่อนไปรับมัน และช่องว่างระหว่างขุนศึกที่กินง่ายกับขุนศึกที่น่าสะพรึงก็ลงเอยอยู่ที่ตัวเลขสี่ตัว

ง่าย · ความสั่นคลอนของการเล็ง 0.18 เศษส่วนของรางที่คลาดเคลื่อน
เทียบกับ
ยาก · ความสั่นคลอนของการเล็ง 0.015 การวางตำแหน่งที่แทบสมบูรณ์แบบ

เขียนและเรียบเรียงเป็นภาษาอังกฤษ ฉบับภาษาไทยนี้จัดทำขึ้นด้วยการแปลด้วยเครื่อง ในจุดที่ความแม่นยำมีความสำคัญ ให้ถือต้นฉบับภาษาอังกฤษเป็นหลัก อ่านต้นฉบับภาษาอังกฤษ →

01 · เลือกว่าจะกลัวอะไร

ไม่ใช่ลูกบอลทุกลูกที่เป็นภัยคุกคาม

งานแรกของขุนศึก ซึ่งทำหนึ่งร้อยยี่สิบครั้งต่อวินาที คือการคัดแยกลำดับความสำคัญ เมื่อมีลูกบอลลอยอยู่ในสนามได้ถึงสองลูก AI ต้องตัดสินว่าลูกไหนคู่ควรกับโล่ของมัน มันให้คะแนนลูกบอลทุกลูกที่ยังทำงานอยู่และไม่ได้ถูกถือไว้ ด้วยระยะห่างจากราชาของตนเอง แล้วหักโบนัสคงที่ 250 หน่วยออกจากลูกที่กำลังมุ่งหน้ามายังมุมของตนจริง ๆ ส่วนลูกที่กำลังเคลื่อนออกห่างจะถูกปฏิบัติราวกับว่ามันอยู่ไกลกว่าความเป็นจริงไปอีก 250 หน่วย 1 ลูกที่ได้คะแนนต่ำที่สุดคือลูกที่ชนะความสนใจของโล่

ผลลัพธ์คือผู้ป้องกันที่ไม่ตื่นตระหนกกับลูกบอลซึ่งลอยผ่านไปเฉย ๆ อย่างไม่มีพิษภัย แต่จะจับจ้องลูกที่อยู่ใกล้กว่าและกำลังพุ่งเข้ามาทันที มันเป็นแบบจำลองหยาบ ๆ ของสิ่งที่มนุษย์ทำโดยไม่ต้องคิด คือมองสิ่งที่กำลังพุ่งเข้าหาตัว และเมินสิ่งที่กำลังจากไป การตัดสินทั้งหมดนี้คือผลคูณจุด (dot product) เพียงค่าเดียวระหว่างความเร็วของลูกบอลกับทิศทางที่ชี้ไปยังราชา ค่าบวกแปลว่า “เล็งมาที่ข้า” และเท่านั้นก็พอแล้ว

02 · เดาว่ามันจะไปลงตรงไหน

เล็งนำลูกบอลไปยังราง

เมื่อเลือกภัยคุกคามได้แล้ว ขุนศึกต้องตัดสินว่าจะไปอยู่ตรงไหนบนรางแนวทแยงของตน มันไม่ได้แก้เส้นทางการสะท้อนทั้งหมด ไม่มีการไล่รอยการสะท้อน ไม่มีการพยากรณ์การกระดอนจากผนัง มันเอาตำแหน่งของลูกบอล ดันไปข้างหน้าอีกก้าวสั้น ๆ ตามความเร็วปัจจุบันของมัน (เล็งนำ 0.12 วินาที) แล้วฉายจุดในอนาคตนั้นลงบนรางตรง ๆ เพื่อให้ได้เศษส่วนเป้าหมายระหว่าง 0 ถึง 1 1

นี่คือการทำนายแบบตื้นเขินโดยเจตนา และมันคือเหตุผลที่ AI ตัวนี้เอาชนะได้ เพราะมันเล็งนำเพียงหนึ่งในแปดวินาทีและไม่เคยคาดการณ์การกระดอน ลูกบอลที่จะมาถึงโดยผ่านการกระทบผนังจึงหลอกมันได้ มันผูกมัดตัวเองไว้กับทิศที่ลูกบอลชี้อยู่ในขณะนี้ มนุษย์ที่ยิงลูกกระทบขอบสนามก็กำลังใช้ประโยชน์จากจุดบอดนี้พอดี เครื่องจักรตอบสนองต่อปัจจุบันด้วยการมองล่วงหน้าเพียงเส้นยาแดง มันไม่ได้วางแผน

คอมพิวเตอร์ไม่ได้คำนวณอนาคตของลูกบอล มันเพียงโน้มตัวไปข้างหน้าหนึ่งในแปดวินาที ชี้โล่ไปยังจุดที่ลูกบอลจะอยู่หากไม่มีอะไรมาขวาง แล้วปล่อยให้ทุกสิ่งที่เข้ามาขวางกลายเป็นโอกาสของคุณ

03 · สามระดับ สี่ปุ่มปรับ

ความยากคือตาราง ไม่ใช่การเขียนใหม่

ความยากทั้งสามระดับใช้เนื้อโค้ดชุดเดียวกันทุกประการ สิ่งที่เปลี่ยนไประหว่างง่าย ปานกลาง และยาก คือแถวของตัวเลขปรับจูนสี่ตัว 1 ความสั่นสุ่มเพิ่มความคลาดเคลื่อนแบบสุ่มให้แก่เป้าหมายของโล่ การเล็งของขุนศึกระดับง่ายจึงเถลไถลไปเกือบหนึ่งในห้าของรางของมัน ขณะที่ระดับยากแทบจะเป๊ะ ระยะตอบสนองกำหนดว่าลูกบอลต้องเข้ามาใกล้แค่ไหนก่อนที่ขุนศึกจะยอมติดตามมัน ระดับง่ายจะเมินทุกอย่างที่ห่างจากราชาของตนเกิน 420 หน่วย ซึ่งน้อยกว่าครึ่งหนึ่งของความกว้างกระดานอยู่เล็กน้อย ส่วนระดับยากติดตามได้ทั่วทั้งสนาม โอกาสรับลูกคือความน่าจะเป็นที่มันจะคว้าลูกบอลซึ่งเข้ามาใกล้โล่พอที่จะรับได้ และการเล็งใส่คู่แข่งคือสวิตช์ตัวเดียวที่ตัดสินว่าขุนศึกจะเล่นเกมรุกหรือไม่

ตารางปรับจูน AI ซึ่งคือความแตกต่างทั้งหมดระหว่างแต่ละระดับ
ปุ่มปรับง่ายปานกลางยาก
ความสั่นสุ่มของการเล็ง (เศษส่วนของราง)0.180.070.015
ระยะตอบสนอง (หน่วย)4207002,000
โอกาสรับลูก0%25%55%
เล็งใส่คู่แข่งไหมไม่ไม่ใช่

ค่าทั้งสี่มาจากตารางปรับจูนเล็ก ๆ ตารางเดียวภายในเอนจินเกม Bulwark หนึ่งแถวต่อหนึ่งระดับ ระยะตอบสนองของระดับยากถูกเขียนไว้เป็นสองเท่าของความกว้างสนาม และสนามเป็นจัตุรัสขนาด 1,000 หน่วย ดังนั้น 2,000 หน่วยจึงหมายถึง “ติดตามตลอดเวลา” 1

04 · เมื่อเครื่องจักรบุก

สวิตช์ตัวเดียวที่ทำให้ขุนศึกระดับยากกลายเป็นอันตราย

ขุนศึกระดับง่ายหรือปานกลางไม่เคยรับลูกโดยตั้งใจจะโจมตี ระดับง่ายไม่เคยรับลูกเลยแม้แต่ครั้งเดียว ส่วนระดับปานกลางก็รับเพียงนาน ๆ ครั้ง โดยไม่มีแผนว่าจะทำอย่างไรกับลูกบอลเมื่อได้มันมาแล้ว แต่พอสับสวิตช์เล็งใส่คู่แข่ง ซึ่งเป็นสิ่งที่มีเฉพาะในระดับยากเท่านั้น AI ก็เลิกเป็นฝ่ายตั้งรับอย่างเดียว เมื่อมันถือลูกบอลไว้ มันจะมองข้ามกระดานออกไป เลือกคู่แข่งที่บอบช้ำที่สุด (ผู้ที่เหลืออิฐน้อยที่สุด) แล้วเล็งไปทางนั้น 1

มันทำเช่นนี้ได้โดยไม่ต้องใช้การค้นหาเส้นทางใด ๆ เลย มันสุ่มตัวอย่างตำแหน่งผู้สมัครสิบเอ็ดตำแหน่งตลอดรางของตนเอง และสำหรับแต่ละตำแหน่งก็จำลองคณิตศาสตร์การปล่อยลูกของเอนจินขึ้นมาใหม่ เพื่อดูว่าการยิงจากจุดนั้นจะพุ่งไปในทิศใด แล้วเก็บตำแหน่งที่เวกเตอร์ขาออกชี้ตรงไปยังเหยื่อที่เลือกไว้มากที่สุด 1 มันคือการไล่ลองทุกทางบนตัวเลือกไม่กี่ทางมากกว่าจะเป็นความฉลาด แต่มันก็อดทนกับสิ่งนี้ คือเมื่อเลือกจุดได้แล้ว ขุนศึกจะถือลูกบอลไว้จนกว่าโล่จะเลื่อนไปถึงจุดนั้นจริง ๆ และจะปล่อยก็ต่อเมื่อไปถึงแล้ว หรือถือไว้นานพอจนการรอต่อไปมีต้นทุนสูงกว่าคุณค่าของการยิงนั้น เจตนานั้นเป็นเชิงยุทธศาสตร์อย่างไม่ต้องสงสัย เป็นสิ่งที่มนุษย์ซึ่งกำลังล่าเหยื่อที่ฆ่าได้ง่ายจะทำเป๊ะ ๆ การเลือกเป้าหมายด้วยเกณฑ์ “อิฐเหลือน้อยที่สุด” เท่ากับหันผู้ป้องกันอิสระสามตนไปยังผู้ที่กำลังเป็นฝ่ายแพ้อยู่แล้ว

05 · ขุนศึกตนเดิม ทุกครั้งไป

ความสุ่มที่เล่นซ้ำได้

ทุกสิ่งที่ “สุ่ม” ซึ่งขุนศึกทำ ไม่ว่าจะเป็นความสั่นสุ่มในการเล็งหรือการโยนหัวก้อยว่าจะรับลูกหรือไม่ ล้วนถูกดึงมาจากตัวสร้างเลขสุ่มที่มีค่าซีด เป็นรูทีนกะทัดรัดที่รู้จักกันในชื่อ mulberry32 ซึ่งเปลี่ยนเลขตั้งต้นเพียงตัวเดียวให้กลายเป็นสายค่าสุ่มเทียมที่ยาวและทำซ้ำได้ 2 ป้อนค่าซีดเดิมให้มัน แล้วมันก็จะผลิตลำดับเดิมออกมาตลอดกาล แมตช์สดจะเอาค่าซีดมาจากนาฬิกา จึงไม่มีสองเกมใดเปิดฉากเหมือนกัน แต่ถ้าป้อนค่าซีดเดิมกลับเข้าไป แมตช์นั้นก็จะดำเนินซ้ำอย่างเป๊ะ ๆ ทั้งมุมยิงเดิม ความสั่นคลอนเดิม และการรับลูกเดิม

ความตายตัวนั้นไม่ใช่รายละเอียดเชิงผิวเผิน มันคือสิ่งที่ทำให้เกมทดสอบได้ ชุดทดสอบของเกมเล่นแมตช์คอมพิวเตอร์ปะทะคอมพิวเตอร์ทั้งแมตช์จากค่าซีดที่ตรึงไว้ และคาดหวังผลลัพธ์เดิมทุกครั้ง และมันคือสิ่งที่ทำให้การจำลองทั้งหมด รวมถึงเคอร์เซอร์ของตัวสร้างเลขสุ่มด้วย ถูกอัดลงใน JSON แล้วสร้างขึ้นใหม่ได้ เพื่อให้เมื่อเล่นออนไลน์ โฮสต์สตรีมสถานะของตนออกไป และผู้เล่นคนอื่นแต่ละคนก็สร้างกระดานที่เหมือนกันเป๊ะขึ้นมาใหม่ได้ ขุนศึกเหล่านี้รู้สึกเหมือนมีชีวิตเพราะความผิดพลาดของพวกมันดูเป็นมนุษย์ แต่ลึกลงไป “สัญชาตญาณ” ของพวกมันคือความสัมพันธ์เวียนบังเกิดทางเลขคณิตสั้น ๆ ที่ใครก็หมุนย้อนกลับไปยังจุดเริ่มต้นได้ เครื่องจักรที่เฝ้าปราสาท เอาเข้าจริงแล้วต้องการเพียงตัวเลขไม่กี่ตัวกับสายธารของโชคที่ทำซ้ำได้ 2

Sources & notes
  1. Bulwark game engine: the warlord AI. Threat scoring (distance from a ball to the king, minus a 250-unit bonus for inbound balls), the 0.12-second lead used to project the intercept point, the tuning table that holds jitter, react distance, catch chance and the aim-at-rivals switch for each tier, the “most wounded rival” target selection, and the eleven-sample search over release positions. Read from the game's own source.
  2. Bulwark game engine: the deterministic random generator, an implementation of mulberry32, the compact public-domain algorithm by Tommy Ettinger that maps a 32-bit seed to a repeatable stream. Its own comment notes that it seeds ball launches and AI jitter so that games are reproducible and testable, and it can save and restore its cursor so the state round-trips through JSON. Read from the game's own source.
    Algorithm origin: Tommy Ettinger, “Mulberry32 PRNG” (public domain).
Was this worth reading?
Play Bulwark
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Classic arcade games · © 2026