DOOM CAPTCHA
(doom-captcha.vercel.app)- DOOM CAPTCHA เป็น CAPTCHA เชิงทดลองเพื่อการศึกษาและความบันเทิง ที่ให้ผู้ใช้ เล่น DOOM® ด้วยตัวเอง เพื่อพิสูจน์ว่าเป็นมนุษย์
- การทำงานหลักคือคอมไพล์พอร์ต Doom ขั้นต่ำเป็น WebAssembly ด้วย
Emscriptenและเชื่อมลูปเกมภาษาCเข้ากับ UI ภาษาJavaScript - สถานะเกมที่จำเป็นต่อการตัดสิน CAPTCHA เช่น การเกิดและการตายของผู้เล่น รวมถึงการกำจัดศัตรู จะถูกส่งไปยัง UI ผ่าน JavaScript callback
- ตัวเลือกการรันเริ่มต้นตั้งไว้เป็น
-skill 5,-fast,-warp e1m1,-nomenuเพื่อเข้าสู่การต่อสู้ที่ยากทันทีโดยไม่มีเมนู - เพื่อการใช้งานอย่างถูกกฎหมาย ได้ปรับให้เข้ากันได้กับ shareware
wadอย่างdoom1.wadและสามารถดูซอร์สโค้ดกับลิงก์สร้าง UI ด้วย v0 ได้
โครงสร้างการรัน Doom ในรูปแบบ CAPTCHA
- DOOM CAPTCHA คือ CAPTCHA ที่ให้ผู้ใช้ เล่น DOOM® เพื่อพิสูจน์ว่าเป็นมนุษย์
- การใช้งานทำโดยใช้
Emscriptenคอมไพล์พอร์ต Doom ขั้นต่ำเป็นWebAssembly - มีการจัดโครงสร้างให้ลูปเกมที่ใช้
Cอย่างg_game.cและ UI CAPTCHA ที่ใช้JavaScriptสามารถส่งสถานะระหว่างกันได้ - จุดเริ่มต้นคือพอร์ต Doom ขั้นต่ำที่ใช้
SDLซึ่งสามารถคอมไพล์เป็นWebAssemblyได้อย่างมีประสิทธิภาพ - เพื่อการใช้งานอย่างถูกกฎหมาย จึงปรับบิลด์ให้เข้ากันได้กับ
doom1.wadซึ่งเป็นwadเวอร์ชัน shareware
การปรับเกมให้เหมาะกับ CAPTCHA
-
การจัดการเมนูและการคืนชีพ
-
อีเวนต์เกมที่ส่งไปยัง UI
- UI ของ CAPTCHA รับสถานะเกมผ่าน JavaScript callback เพื่อนำไปใช้ในโฟลว์การตัดสิน
onPlayerBorn: ถูกเรียกเมื่อผู้เล่นเกิดหรือคืนชีพonPlayerKilled: ถูกเรียกเมื่อผู้เล่นตายonEnemyKilled: ถูกเรียกเมื่อผู้เล่นหลักกำจัดศัตรู
-
ระดับความยากเริ่มต้น
- เปลี่ยนแฟล็กการรันเริ่มต้นใน
d_main.cเพื่อให้เริ่มต้นในสถานการณ์ที่ยากขึ้น -skill 5: ตั้งค่าระดับความยากเป็น"Nightmare!"-fast: ทำให้เกมยากขึ้น-warp e1m1: เริ่มเกมจากจุดที่มีแอ็กชัน-nomenu: ป้องกันไม่ให้ผู้เล่นเปิดเมนูหลักได้
- เปลี่ยนแฟล็กการรันเริ่มต้นใน
ซอร์สและเงื่อนไขการใช้งาน
- สามารถดู ผลลัพธ์การสร้าง UI ด้วย v0 และ ซอร์สโค้ด ได้
- โปรเจกต์นี้อ้างอิงจากเวอร์ชัน DOOM® shareware ที่เผยแพร่สำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์ และ DOOM® เป็นเครื่องหมายการค้าจดทะเบียนของ id Software LLC
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
พยายามเล่นตามวิธีที่ตั้งใจไว้แล้ว แต่มันยากเกินไป เลยสามารถ ผ่านแบบใช้ทริก ได้ด้วยการยืนอยู่ที่จุดเริ่มต้นแล้วจัดการเฉพาะศัตรูที่โผล่มาจากด้านขวา
ในเกมพวกนี้ ความแม่นของปืนพก ดีแบบเหลือเชื่อ ยิงจากระยะไกลทีละไม่กี่นัดก็เก็บศัตรูได้ ส่วนศัตรูในนี้ใช้ปืนลูกซอง ซึ่งไร้ประสิทธิภาพมากในระยะไกล เกมจำลองการกระจายของกระสุนลูกซองให้กว้างเกินจริง ดังนั้นแม้ศัตรูไกล ๆ จะเล็งตรงเป๊ะ ความเสียหายก็น้อยมาก
สมัยก่อนตอนเล่นบน NetWare LAN ของมหาวิทยาลัย แค่รักษาระยะห่างไว้ก็ชนะคนที่ถืออาวุธแรงกว่าแต่แม่นน้อยกว่าได้แล้ว ปกติก็ปืนลูกซองหรือปืนลูกซองสองลำกล้องในเวอร์ชันหลัง ๆ และทุกคนมองว่าอันนั้นสะใจที่สุด
มันใช้ได้ดีจนกว่าจะมีใครอ้อมมาติดหลังในระยะประชิด และถ้าตายแล้วเกิดใหม่ในตำแหน่งดี ๆ ก็หาเจ้านั่นเจอเร็วแล้วแก้แค้นด้วยปืนพกได้ ใช้กับเครื่องยิงจรวดก็ได้เหมือนกัน ตราบใดที่ไม่โดนยิงตรง ๆ หรือไม่ได้อยู่ในจุดที่ความเสียหายจากแรงระเบิดของลูกที่ยิงพลาดจะทำแผนพังง่าย ๆ
พูดแบบยุคเก่า นี่เป็นวิธีที่ใช้ได้ใน เกมแนว DOOM จำนวนมากและเกมสืบทอดของมัน แม้แต่ใน HL2 ปืนพกพื้นฐานก็ยิงได้ไม่จำกัดตามจำนวนครั้งที่กดปุ่มยิง และไม่มีช่วงหน่วงขั้นต่ำระหว่างนัดเหมือนอาวุธอื่น จึงใช้ได้ผลดี
แถมยังใช้คีย์บอร์ดอย่างเดียว ปุ่มลูกศรซ้ายขวาจะหมุนตัวละคร แต่ใน เกมยิงมุมมองบุคคลที่หนึ่ง สมัยใหม่ เราชินกับการใช้มันเคลื่อนที่ซ้ายขวาแล้วใช้เมาส์หมุน ทำให้รีเฟล็กซ์รวน
ฝีมือด้านเทคนิค +100, การใช้งาน -100. ทริปย้อนความทรงจำ +10 และได้ตระหนักรู้ด้วยว่าตอนนี้ฉันเล่นเกมไม่เป็นแล้ว
การให้เริ่มด่านนี้ด้วยปืนพกอย่างเดียว และดูเหมือนเป็นระดับ Ultra-Violence หรือ Nightmare นี่แทบจะขอให้โดนยิงตายชัด ๆ
ถ้าการทำงานนี้รองรับ WASD ซึ่งตอนนี้เป็นมาตรฐานแล้ว และยิงด้วยปุ่มซ้ายของเมาส์ได้เหมือนต้นฉบับ การพิสูจน์ว่าผมเป็นมนุษย์ก็คงง่ายขึ้นเยอะ
เป็นด่านที่ยาก และถ้าจำไม่ผิดเป็นหนึ่งในด่านลับ รู้สึกเหมือนเปิด
-fastอยู่ด้วย และยิ่งยากขึ้นมากเพราะ เคลื่อนที่ซ้ายขวา ไม่ได้ แต่ก็น่ารักมากถ้ากด Alt ค้างตามวิธีสมัยก่อน จะเคลื่อนที่ซ้ายขวาได้
ในเครื่องผมเสียงออกมาสูงผิดปกติ ไม่รู้ทำไม แต่ก็ไม่ใช่ปัญหาใหญ่ เพราะมันเข้ากับประสบการณ์บ้าบอนี้ดี
แต่ก็จริงว่าช่วงหลังผมเล่น Classic Doom ค่อนข้างเยอะ
มอนสเตอร์เยอะเกินไป ต้องลอง 3–4 ครั้งถึงผ่าน เหมือน CAPTCHA จริง ๆ
สัตว์ประหลาดแบบไหนกันที่ไม่ให้ WASD แถมอย่างน้อยก็ไม่ให้ยิงด้วย Ctrl? แต่ก็เป็น CAPTCHA ที่เท่ดี
ทุกครั้งที่ต้องแก้ CAPTCHA เพื่อเข้าสู่ระบบคอนโซล AWS ผมมักคิดว่า เป้าหมายที่มันพยายามกันไว้น่าจะทำอัตโนมัติได้ง่าย ๆ แต่ผู้ใช้ส่วนใหญ่ต้องทรมานกับ “ฟีเจอร์” นี้
โมเดลโอเพนซอร์สบางตัวแก้ของพวกนั้นได้โดยไม่ต้องมีด่านเฝ้าประตูแบบ “ความปลอดภัย AI” ด้วยซ้ำ
Apple เสนอทางออกสำหรับ CAPTCHA ไว้แล้ว[1] ผมกำลังรอให้มันกลายเป็นมาตรฐานและถูกใช้กันแพร่หลาย
[1] https://support.apple.com/en-us/102591
เรื่องนี้ไม่ได้ดีกว่าด้านความเป็นส่วนตัวอย่างชัดเจนเลย และยังให้อำนาจควบคุมกับ Apple มากขึ้น ผมยอมเสียเวลาเพิ่มอีก 3 วินาทีกับ CAPTCHA ดีกว่า
ผมอ่านประโยคนั้นแล้วก็หยุดอ่านเอกสารซัพพอร์ตของ Apple ทันที
เกร็ดเล็กน้อย: ผู้สร้าง Doom เคยเล่นทดสอบเองเพื่อยืนยันว่าแต่ละด่านสามารถเคลียร์ได้แม้เริ่มด้วย ปืนพกกับกระสุน 50 นัด เท่านั้น
การให้เครดิตผู้สร้าง Doom Captcha ต้นฉบับ ในรีโพ GitHub เป็นเรื่องที่ถูกต้องแล้ว ทุกวันนี้ความคาดหวังต่ออุตสาหกรรมซอฟต์แวร์โดยรวมต่ำสุดเป็นประวัติการณ์ เลยรู้สึกดีที่ได้เห็น
ต้นฉบับเมื่อไม่กี่ปีก่อนอยู่ที่นี่
https://vivirenremoto.github.io/doomcaptcha
https://github.com/vivirenremoto/doomcaptcha
อันนี้ยากนะ ผมคงไม่ใช่มนุษย์แล้วมั้ง
ไม่ได้เล่น Doom มานานเกินไป และถ้าไม่มีการเคลื่อนที่ซ้ายขวาก็แทบเป็นไปไม่ได้
อันนี้สร้างด้วย v0 ผู้ช่วย AI ของ Vercel
ลิงก์แชตอยู่ที่นี่: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0
ฟังดูน่าประทับใจได้ก็จริง แต่ถ้าไม่นับการเพิ่มปฏิสัมพันธ์เล็ก ๆ อย่างปุ่มที่แสดง “loading” อยู่ไม่กี่วินาที ในเชิงฟังก์ชันก็ไม่ได้ต่างจาก ตัวออกแบบ UI แบบลากแล้ววาง อย่าง winforms มากนัก ส่วนบรรพบุรุษของมันอย่าง Visual Basic ก็มีมาตั้งแต่ยุค 90 แล้ว
ถึงอย่างนั้น แชตนั้นพออ่านไปสักพักก็ทรมานอยู่ดี ใจความประมาณว่า “จัดข้อความในปุ่มให้อยู่กึ่งกลาง”, “ยังไม่กลางเลย ทำให้กลาง”, “ขอร้องล่ะ ทำให้ข้อความอยู่กึ่งกลาง”
รีโพที่มีซอร์สส่วนที่เหลืออยู่ที่นี่: https://github.com/rauchg/doom-captcha
ต้องแก้ Doom ด้วยเพื่อปรับบางอย่าง เช่น ข้ามเมนูและเพิ่ม callback ที่จำเป็น