เกมที่สร้างขึ้นหลังผ่านมากว่า 20 ปีด้วยพลังของ vibe coding : Mirror Break Out
(mirror-breakout-web.vercel.app)ในฤดูร้อนปี 2004 ตอนที่ผมกำลังใช้ชีวิตช่วงปลดประจำการในกองทัพ ผมเริ่มคิดว่าเวลาว่างที่เหลือจะทำอะไรดี แล้วก็เริ่มวางแผนทำเกม ตอนนั้นน้องชายเรียนด้านออกแบบกราฟิกเกมอยู่พอดี ผมเลยคิดว่าหลังปลดประจำการแล้วน่าจะลองทำอะไรสักอย่างด้วยกันดู (อ้อ... ผมเป็นแค่สายมนุษยศาสตร์ธรรมดา ๆ ไม่ได้มีทักษะทางเทคนิคเลย)
เพราะเป็นการท้าทายแบบมือสมัครเล่น ผมเลยตั้งใจจะทำอะไรเล็ก ๆ และเรียบง่าย ผมเอาเกมทุบอิฐ (Arkanoid) ซึ่งเป็นหนึ่งในเกมที่เริ่มทำได้ง่ายที่สุดมาเป็นพื้นฐาน แล้วเพิ่มรูปแบบการแข่งแบบใหม่เข้าไป ถึงจะเป็นเกมที่มีคนทำเวอร์ชันใหม่ออกมาแล้วนับไม่ถ้วน แต่ผมไม่เห็นมีใครทำแบบที่ผมคิดไว้
หลังปลดประจำการ ผมก็ดึงน้องชายกับเพื่อน ๆ ของน้องมารวมทีมกันอย่างทะเยอทะยาน แต่ไม่นานแต่ละคนก็มีเหตุจำเป็นของตัวเอง ทีมเลยล้มไปอย่างรวดเร็ว ตอนนั้นคิดว่าไว้มีโอกาสค่อยทำใหม่ แต่โอกาสนั้นก็ไม่กลับมาอีกเลย เวลาผ่านไป ระหว่างใช้ชีวิตทำงาน ผมก็ยังนึกถึงมันเป็นครั้งคราว แม้แต่ช่วงที่เคยตั้งใจจะลองเรียน Python ผมก็เอาเกมนี้เป็นเป้าหมายไว้เหมือนกัน แต่สำหรับผมมันเป็นงานที่ยากเกินไป
แล้วเวลาก็ผ่านไปอีกกว่า 20 ปี จนถึงฤดูร้อนปีที่แล้ว หลังจบมีตติ้ง ผมไปกินข้าวเย็นกับบรรดาซีอีโอที่ไปประชุมด้วยกัน พวกเขาคุยกันว่าเดี๋ยวนี้มีหลายอย่างมากที่สร้างด้วย AI ได้ จนทุกคนอยากกลับไปเริ่มธุรกิจใหม่กันอีกครั้ง คืนนั้นผมได้รับแรงกระตุ้นมาก พอกลับถึงบ้านก็ลองติดตั้ง Claude Code ที่เคยได้ยินแต่ชื่อ และอีก 2 ชั่วโมงต่อมา… ปัง!!
ตอนแรกผมก็คิดอยู่ว่าจะให้ Claude Code ทำอะไรเป็นโปรเจกต์แรกดี สุดท้ายเลยย้อนกลับไปหยิบไอเดียเมื่อ 20 ปีก่อนมาสั่งให้มันทำ ผ่านไปประมาณ 2 ชั่วโมง ผมก็เห็นแพดเดิลกับลูกบอลเคลื่อนไหวอยู่ตรงหน้าและกำลังทุบอิฐอยู่ ความรู้สึกสั่นสะเทือนตอนนั้นบรรยายยาก เรื่องเล่าแนวนี้เดี๋ยวนี้อาจจะมีมากจนคุ้นกันแล้ว แต่ครึ่งปีให้หลัง ตอนนี้ผมกลายเป็นคนที่อยู่ไม่ได้ถ้าไม่มี Claude Code ไปแล้ว
ระหว่างนั้นผมค่อย ๆ ขัดเกลาเกมมาเรื่อย ๆ จนตอนนี้อย่างน้อยก็พออยู่ในระดับที่กล้าเรียกว่าเดโมได้แล้ว เลยขอรวบรวมความกล้ามาเปิดเผยให้ลองเล่นกัน แถมยังเอามาลงใน GeekNews ที่ปกติผมเป็นแค่นักอ่านเงียบ ๆ ด้วย!! เดิมทีผมวางคอนเซปต์ให้เป็นเกมต่อสู้แบบ 2 คน แต่ฟีเจอร์ผู้เล่นหลายคนยังเป็นกำแพงที่สูงเกินไปสำหรับผม เลยทำออกมาเป็นรูปแบบแข่งกับคอมพิวเตอร์แทน
แนะนำสั้น ๆ คือ
- สำหรับคอมพิวเตอร์เท่านั้น ตอนนี้ยังไม่รองรับมือถือ
- เป็นเกมทุบอิฐที่ผู้เล่น 2 คนอยู่ในพื้นที่เดียวกันและหันหลังให้กัน ฝ่ายที่ทุบอิฐหมดก่อนเป็นผู้ชนะ
- ถ้าผมพลาดลูกบอล มันจะข้ามไปยังพื้นที่ของฝ่ายตรงข้าม ถ้าอีกฝ่ายพลาด มันก็จะกลับมาหาผม
- มีการใส่แนวคิดฟิสิกส์ของโลกจริงเข้าไป เช่น น้ำหนัก แรงกระแทก ความเร่ง และความเฉื่อย ยากกว่าที่คิด
- เป็นเวอร์ชันเดโม จึงเล่นเป็นตาเดียวแล้วเริ่มใหม่เล่นต่อได้เรื่อย ๆ
- ถ้าทำสถิติได้ ก็สามารถสลักชื่อลงไปได้เหมือนเกมตู้สมัยเด็ก
ถ้าจะเขียนบทเรียนจากกระบวนการพัฒนาด้วยก็คงเป็น
- รีแฟกเตอร์! รีแฟกเตอร์! รีแฟกเตอร์!
- ผมได้รู้แล้วว่ารีแฟกเตอร์ที่เคยได้ยินกันคืออะไร และเริ่มคิดว่าบางทีในนรกอาจมีสิ่งที่เรียกว่า “นรกแห่งการรีแฟกเตอร์” อยู่จริงก็ได้
- ตอนแรกผมฝันใหญ่ อยากทำให้ไปถึงระดับ Battle.net เลยแยกฟังก์ชันแตกย่อยและพองระบบออกไปเต็มที่ สุดท้ายโดนคลื่นบั๊กถล่มจนต้องรีเซ็ตทั้งหมด แล้วก็แยกใหม่ รวมใหม่... ทั้งหมดนี้เกิดขึ้นก่อนที่ Opus 4.5 จะออกเสียอีก
- แค่ทำของเล็ก ๆ ชิ้นนี้ชิ้นเดียวก็ขนาดนี้แล้ว เลยทำให้ผมเกิดความเคารพต่อโปรแกรมเมอร์มากขึ้นจริง ๆ
โชคดีที่ตอนนี้ผมเริ่มรู้ขีดจำกัดของตัวเองมากขึ้นแล้ว และกลายเป็นคนทำงานที่แบ่งงานออกเป็นชิ้นเล็ก ๆ ทำเอกสารเวิร์กโฟลว์ และเก็บทั้งบันทึกการพัฒนากับ Git commit อย่างละเอียด สิ่งที่ได้มามากที่สุดคือผมมีสิ่งที่อยากลองทำเพิ่มขึ้นมหาศาล ตอนนี้เลยกำลังขะมักเขม้นคิดว่าจะลองสร้างเครื่องมือที่จำเป็นต่อการทำงานขึ้นมาใช้เอง
ผมยังคิดอยู่เหมือนกันว่าจะพาเกมนี้ไปทางไหนดี ด้วยสถานการณ์ของผมตอนนี้คงยากจะพัฒนาอย่างจริงจังต่อ แต่ถ้าจะปล่อยให้มันหายไปเฉย ๆ ก็น่าเสียดาย ผมหวังว่ามันจะกลายเป็นเกมที่เด็ก ๆ เล่นกันอย่างสนุกได้
ผมได้เรียนรู้อะไรมากมายจากข่าวสารต่าง ๆ ใน GeekNews มาโดยตลอด และติดตามด้วยความขอบคุณเสมอ ขอบคุณมากครับ
14 ความคิดเห็น
คอนเซปต์สนุกดี แต่ความรู้สึกในการบังคับแย่มาก ดูเหมือนว่าการใส่แรงเฉื่อยให้การบังคับในเกมแบบนี้จะไม่ใช่ไอเดียที่ดีนัก ผมว่านี่น่าจะเป็นคนละประเด็นกับเรื่องความยากนะ
ขอบคุณสำหรับความเห็นครับ ผมได้ลองพิจารณาประเด็นที่คุณพูดถึงแล้ว และลดแรงเฉื่อยลงครึ่งหนึ่งเพื่อให้ควบคุมได้ง่ายขึ้น เดิมทีผมให้ความสำคัญกับคอนเซปต์ด้านฟิสิกส์ที่ผมคิดไว้เป็นหลัก แต่ก็ทำให้ได้กลับมาคิดมากขึ้นเรื่องการควบคุมของเกมและควรจัดการอย่างไรเวลาชนกัน ผมจะค่อยๆ ปรับปรุงต่อไปครับ (ช่วงนี้งานประจำยุ่งขึ้น เลยอัปเดตช้าไปหน่อยครับ)
คุณ FURY เป็นใครกันนะ.. ทำคะแนนไว้สูงมากเลยครับ.;;
เกมนี้ใส่แนวคิดทางฟิสิกส์ของโลกจริงเข้าไป จึงมีน้ำหนัก แรงกระแทก ความเร่ง และความเฉื่อยอยู่ด้วย ค่อนข้างยากกว่าที่คิด
เป็นถ้อยคำที่ทำให้รู้สึกว่ายังเข้าใจฟิสิกส์ของเกมไม่มากนัก เลยคิดว่าน่าจะช่วยขัดเกลาให้ดีขึ้นอีกหน่อยครับ
ช่วยปรับแต่งเองหน่อย 555 อย่ามาวางมาดต่อหน้านักสายศิลป์เลยนะ
ขอบคุณที่เป็นห่วงความรู้สึกของสายศิลป์นะครับ 555 ^^
เหตุผลที่ฉันช่วยขัดเกลาถ้อยคำให้ได้ยากก็เพราะฉันยังไม่ได้เห็นโค้ดที่คุณเขียน จึงไม่ทราบว่าคุณได้พัฒนาเอนจินฟิสิกส์ไว้ด้วยวิธีใด
ผมขออภัยสำหรับส่วนที่ผมได้แสดงความเห็นที่ไม่พึงประสงค์ไว้
มีหลายท่านที่โปรโมตผลิตภัณฑ์กัน ซึ่งบ่อยครั้งก็มีกรณีที่โปรโมตด้วย AI หรือแนบคำอธิบายที่ไม่เหมาะสมมาด้วย ผมเลยเขียนคอมเมนต์ไว้ครับ ไม่ได้เขียนเพื่อจะทำให้โกรธแต่อย่างใด
ขอบคุณที่ให้ความสนใจครับ/ค่ะ ผม/ฉันไม่ได้รู้สึกไม่ดีเลยแม้แต่น้อย และก็ขอบคุณสำหรับคำแนะนำเสมอ จริง ๆ แล้วผม/ฉันยังไม่ค่อยเข้าใจว่าควรต้องแก้ตรงไหนอย่างไร จึงอยากให้ช่วยอธิบายเพิ่มเติมให้ละเอียดกว่านี้หน่อย
ขออธิบายเพิ่มเติมเกี่ยวกับเรื่องที่บอกว่าได้นำฟิสิกส์โลกจริงมาใช้ เกมแนวนี้โดยทั่วไปมักจะทำแค่การตรวจจับการชนและการสะท้อนแบบง่ายมากเท่านั้น แต่ผม/ฉันอยากให้ตอนที่ลูกบอลหรืออิฐชนกัน มันให้ความรู้สึกถึงน้ำหนักและพลังงานจากความเร็วของการปะทะเหมือนเกมพินบอลจริง ๆ เลยไปหาและลองใช้ Planck.js ซึ่งมีความละเอียดมากกว่าไลบรารีสำหรับทำเกมทั่วไป ผม/ฉันทำให้เวลาอิฐโดนลูกบอลชนแล้วเกิดการถูกผลักและหมุนจากแรงกระแทกได้ด้วย และในส่วนการตั้งค่าก็สามารถปรับน้ำหนักของลูกบอล น้ำหนักของอิฐ การลดทอนพลังงานจากการชน และแรงต้านต่าง ๆ ได้ ทำให้ผู้เล่นได้รับประสบการณ์ที่แตกต่างกันไปตามการตั้งค่า
(มีการตั้งค่าหนึ่งที่ผม/ฉันเรียกว่าโหมด Crazy คือถ้าปรับน้ำหนักลูกบอลให้มากที่สุดและลดน้ำหนักอิฐให้ต่ำที่สุด เกมจะมีความไดนามิกมาก ๆ)
โค้ดก็อยู่บน GitHub ด้วยครับ/ค่ะ
https://github.com/gogodevelop2/mirror-breakout
ขอแสดงความคิดเห็นนะครับ
ก่อนอื่น ดูเหมือนว่าคุณจะทุ่มเทกับการออกแบบการชน การตั้งค่าสัมประสิทธิ์การคืนตัว และส่วนอื่น ๆ มากพอสมควร
และโดยเฉพาะ การชนถูกคำนวณและเกิดขึ้นจากมวลกับสัมประสิทธิ์การคืนตัวของแต่ละวัตถุ แต่ถ้าจะพูดถึงส่วนที่ต่างจากเป้าหมายที่คุณตั้งใจไว้
สิ่งอย่างมวลหรือความเร็วของ
paddleหรือbrickในความเป็นจริงมีผลแค่ต่อโมเมนตัมของballเท่านั้น ดังนั้นโดยแก่นแล้วจึงใกล้เคียงกับการนำแนวคิดจากแบบจำลองทางฟิสิกส์มาใช้กับรูปแบบการชน
แล้วเขียนการชนระหว่างลูกบอลกับ (อิฐ, แพดเดิล, กำแพง) ให้แตกต่างกันในแต่ละแบบมากกว่า
ดังนั้น แทนที่จะอธิบายว่าเป็นฟิสิกส์โลกจริง น่าจะเหมาะกว่าถ้าจะบอกว่าเป็นการยืมองค์ประกอบบางอย่างของฟิสิกส์เอนจินมาใช้ เพื่อออกแบบการชนและการเปลี่ยนแปลงของโมเมนตัมให้มีความไดนามิก
โดยเฉพาะอย่างยิ่ง ในกระบวนการชนมีส่วนที่ไม่สมจริงจนทำให้โมเมนตัมเปลี่ยนไป ซึ่งคุณนำไปปรับด้วยการชดเชยความเร็ว ตรงนี้ในแง่ความรู้สึกตอนเล่นอาจถูกมองว่าเหมือนเป็นลูกเล่นลับ ๆ หรืออาจให้ความรู้สึกว่าไม่ค่อยเป็นมิตรกับผู้เล่นก็ได้ครับ
ถ้าอธิบายให้ง่ายขึ้นอีกหน่อย
แม้จะมีการใช้สูตรและวิธีคำนวณทางฟิสิกส์ แต่ในเชิงผลลัพธ์แล้วมันเป็น
โมเดลที่ไม่สมจริง และยังมีการใส่ส่วนชดเชยไว้หลายจุดเพื่อป้องกันปัญหาที่เกิดจากส่วนที่ไม่สมจริงเหล่านั้นในเชิงเกมเพลย์ (เช่น ความเร็วไม่สิ้นสุด การหยุดนิ่ง การควบคุมทิศทาง เป็นต้น)
ขอบคุณสำหรับคำอธิบายละเอียดมากครับ/ค่ะ ผม/ฉันเข้าใจได้ดีขึ้นมาก เนื่องจากนี่เป็นครั้งแรกที่ผม/ฉันลองทำเกม จึงยังไม่ค่อยรู้จักโลกของฟิสิกส์ในเกมและความเหมาะสมของการใช้คำศัพท์มากนัก เลยเขียนคำอธิบายออกไปในแบบที่อาจทำให้เกิดความเข้าใจผิดได้ พอได้ฟังคำอธิบายแล้ว ผม/ฉันก็รู้สึกว่าพอจะเข้าใจขึ้นมาบ้างว่าคนที่ทำงานอยู่ในสายอาชีพนี้มองผลงานกันในระดับไหน ผม/ฉันหาวิธีแก้ไขเนื้อหาหลักไม่เจอ... จะลองค้นดูแล้วแก้ไขครับ/ค่ะ ขอบคุณครับ/ค่ะ
ขอบคุณครับ ฮ่าๆ ผมก็จะขอเป็นกำลังใจให้กับงานอดิเรกของคุณเช่นกัน!