Orientation 2018 กับการสร้าง SIT Dino ที่ไม่ได้ให้แค่การเป็นเกมบนเว็บไซต์
⸻ วันนั้นเป็นวันแรกของการประชุมงาน SITOrientation2018
เป็นวันหนึ่งในช่วงกลางเดือนมิถุนายน และก็เป็นช่วงปิดเทอมด้วย วันนั้นเป็นวันที่ทีม Alchemist ทั้งหมดมารวมตัวกันเพื่อวางแผนสิ่งที่จะทำต่อจากนี้ ซึ่งก็มีหลายโปรเจ็คด้วยกัน อาทิ KMUTT Passport, ASK รวมถึง Orientation ซึ่งแปลเป็นไทยได้เป็น ปฐมนิเทศ ซึ่งมันก็คือ โปรเจ็คเกมในวันปฐมนิเทศ นั่นเอง
เกมในวันปฐมนิเทศมีไว้เพื่ออะไรกันนะ?
ลองนึกภาพดูว่า เมื่อพูดถึงงานปฐมนิเทศ — แค่ได้ยินชื่อก็น่าเบื่อแล้ว ก็ไม่เถียงหรอกว่าการมางานปฐมนิเทศนั้นจะทำให้เราได้ความรู้เรื่องการเรียน หรือแม้แต่ทุนการศึกษา ภาพแรกที่แวบเข้ามาในหัวก็คงไม่ไกลจากภาพที่ท่านอาจารย์ผู้สอนนั่งเรียงกันอยู่ข้างหน้า บ้างก็มีอาจารย์ขึ้นมาพูดในเรื่องต่างๆ ตัดมาที่ฝั่งนักศึกษาอย่างเราที่คงมีทั้งคุยกับเพื่อนข้างๆ เล่นโทรศัพท์ นั่งหลับ หรือนั่งให้มันผ่านๆไป ฟังดูน่าเบื่อเนอะ แล้วมีอะไรที่เราพอจะทำให้มันน่าเบื่อน้อยลงได้บ้าง แม้เป็นเพียงช่วงหนึ่งของงาน ถ้าสมมติเราเอาเกมมาช่วยในส่วนนี้ มันจะพอเป็นไปได้ไหมนะ?
ปีที่แล้วตอนยังเป็นเด็กน้อยปีหนึ่ง ก็มีเกมในวันปฐมนิเทศแบบนี้เหมือนกัน
จากที่คิดว่ามันต้องน่าเบื่อไปทั้งงานแน่ๆ — จนกระทั่งช่วงท้ายๆ จู่ๆก็มีเกมบนเว็บไซต์ให้เราเข้าไปเล่น เป็นเกมเขย่าโทรศัพท์ เลือกตัวละครเสร็จก็เขย่า แล้วก็จะได้แต้มไปโหวตให้อาจารย์แต่ละคน อาจารย์ท่านไหนที่มีแต้มสูงสุดก็จะได้รับเชิญออกมาพูด เรียกได้ว่าเป็นวิธีที่ทำให้อาจารย์มีส่วนร่วมกันกับนักศึกษาได้แบบสนุกสนานเป็นกันเอง ได้ยินเสียงหัวเราะและรอยยิ้มกลางงานน่าเบื่อๆแบบนี้ บอกได้เต็มปากเลยว่าเป็นหนึ่งในหลายๆสิ่งที่ทำให้เรารู้สึกประทับใจกับไอทีบางมดแห่งนี้มากๆ ใครจะไปคิดล่ะว่างานปฐมนิเทศจะมีเกมแบบนี้ด้วย โคตรเท่!
จากวันนั้นถึงวันนี้ ความรู้สึกประทับใจเหล่านั้นก็ยังคงอยู่ ถึงตาที่เราต้องมาทำเกมไว้เล่นในงานปฐมนิเทศแล้ว ก็อยากส่งต่อความรู้สึกประทับใจเหล่านั้นให้น้องๆได้รับเหมือนที่เราเคยได้รับมาแหละนะ
หยุดช่วงย้อนอดีตแล้วกลับมาที่งาน⸻
(อารมณ์แบบดีดนิ้วดังเป๊าะที่ข้างหูให้หลุดจากภวังค์)
วันประชุมงานวันแรกนั้น สิ่งที่ทีมวางไว้มีเพียงแค่เอนจิ้นทำเกม Phaser 3 หรือ Phaser.js สำหรับทำเกมขึ้นเว็บไซต์, ใช้ Node.js ในการ Build & Run, Socket.io สำหรับการใช้งานฟังก์ชันต่างๆ การแสดงผลแบบ Real-time รวมถึงการสร้างห้องเพื่อรองรับคนด้วย ส่วนธีมที่ได้รับมาคือไดโนเสาร์
ทีม Orientation วางหน้าตาเกมกันคร่าวๆกันว่าจะมีอะไรบ้าง (จริงๆในบรรดาเราๆปีสองก็คุยฟุ้งเรื่องเกมนี้กันตั้งแต่ตอนนั่งกินข้าวเที่ยงเลยล่ะ ละคุยกันจริงจังมากเว่อร์) หลังจากถกหาข้อสรุปที่เหมาะสมอยู่นาน โดยมีการวางไว้ 2 Phase คือ
หนึ่ง ช่วงก่อนวันปฐมนิเทศ จะเป็นเกมเลี้ยงไข่ไดโนเสาร์
และสอง ช่วงในวันปฐมนิเทศ ไข่ไดโนเสาร์จะฟักออกมาแล้วไปตีบอสไดโนเสาร์เพื่อช่วยเหลืออาจารย์ออกมา (ใช่ค่ะ เพื่อให้ออกมาพูดกับนักศึกษา … มาช่วยจริงๆนะคะ)
เกมเลี้ยงไข่ไดโนเสาร์ ก็นึกภาพกันได้คร่าวๆว่า มีไข่อยู่กลางจอ มีปุ่มสำหรับดูแลไข่ เช่นกดปุ่มพระอาทิตย์แล้วให้ความอบอุ่นไข่ กดปุ่มรูปหยดน้ำแล้วอาบน้ำไข่ มีค่าสถานะความเป็นอยู่ของไข่ ว่ามีความสุขหรืออยู่ดีกินดี(?)รึเปล่า นอกจากนี้ยังคำนึงถึงค่าลักษณะนิสัยไปยังตอนไข่ไดโนเสาร์ฟักออกในวันงานว่า ยิ่งมีค่าลักษณะนิสัยค่อนไปทางเป็นมิตรก็จะได้ไดโนเสาร์หน้าตาเป็นมิตร ถ้าค่อนไปทางดุร้ายพอฟักออกมาก็หน้าตาไปทางทีเร็กซ์ เพิ่มค่าโดยการตอบคำถามในฟังก์ชัน Daily Quest ถ้าตอบถูกก็จะเพิ่มค่า อะไรทำนองนี้
มาต่อกันที่ส่วนหน้าต่อสู้หรือตีบอสไดโนเสาร์นั่นแหละ เราวางกันไว้ว่าจะมีการรวมพลังเหล่าไดโนเสาร์นักศึกษาเข้ามาตีบอส โดยจะมีห้องบอสหลายตัวแยกกันไปตามจำนวนอาจารย์ เมื่อตายบอสจะดรอปไข่ โดยจะเลือกบอสประจำอาจารย์มาสามอันดับแรกที่บอสตายก่อนขึ้นมาพูดกล่าวกับนักศึกษา ซึ่งไข่จะแตกออกก็จะเป็นรูปท่านอาจารย์ท่านนั้นๆ
จากภาพร่างเหล่านั้นก็พอทำให้เราได้อ๋อและเข้าใจคร่าวๆแล้วว่า เกมของเราจะมีอะไรบ้าง ทั้งหน้าตา ฟังก์ชันต่างๆที่ต้องมี เป็นต้น พอทุกคนในทีมเข้าใจตรงกันแล้ว ขั้นต่อไปก็คือลงมือทำงาน … แต่เอ๊ะ ที่ผ่านมาเรายังไม่เคยใช้ Phaser 3 เลยนะ แล้วจะทำได้ยังไงกันล่ะ? ที่ผ่านมาก็เคยใช้แค่ Phaser 2 (ตอนเกมรามรัน) แล้วเวอร์ชั่น 3 มันแตกต่างจากเวอร์ชั่น 2 เยอะไหม? รอบนี้ต้องเขียนแบบ ES6 ด้วย แล้วมันคืออะไรง่ะ? ไหนจะ Socket.io อีก น้องงงไปหมดแล้วค่ะ
ในขณะที่เดฟหญิงคนเดียวในกลุ่มอย่างอิฉันกำลังนั่งเอ๋อตาแป๋วแหว๋วเป็นปลาทองในขวดโหล พี่เบ๊นซ์ก็พูดขึ้นมาว่า ยังไม่เคยใช้มาก่อน ก็ลองทำ Hello World สิ
… ม .. มันคืออะไรหรอคะ?
ตามความเข้าใจของเราหลังจากได้ฟังพี่เบ๊นซ์อธิบาย
การทำ Hello World คือการเข้าไปเรียนรู้กับเรื่องใดเรื่องหนึ่งจนเข้าใจ อย่างประโยค Hello World นั้นมาจากการเขียนโปรแกรมพื้นฐานอย่างง่ายที่สุดคือการแสดงผลประโยค Hello World กว่าจะแสดงผลข้อความนี้ออกมาได้ ก็ต้องเข้าใจในภาษาที่เราใช้ก่อน ถูกไหมล่ะคะ?
ซึ่งเราก็ต้องมาทำความเข้าใจกับตัวภาษาที่ใช้เขียนก่อนกว่าจะแสดงผลประโยคนี้ได้ เช่นเดียวกับ Phaser 3 ที่เราจะต้องใช้ เราก็ต้องไปเรียนรู้และทำความรู้จักกับมันจนเข้าใจก่อนถึงจะเขียนเกมได้
ซาลาร่ากับการ Hello World
เรียกได้ว่ามืด 20 ด้าน (ยืมคำพูดไนล์มา) แต่ก็พยายามเริ่มจากตัว Phaser 3 ที่เราจะใช้เขียนเกมก่อน วันแรกที่เริ่มนี่ก็แอบท้อ ทั้งวันหมดไปกับการ Clone ตัวอย่างต่างๆมาเพื่อดูโค้ด การติดตั้ง Node.js ลงในตัวเกม การทำความเข้าใจกับการเขียนแบบ ES6 การทำความเข้าใจกับการแบ่ง State ต่างๆของ Phaser 3 บลาๆๆ
วันแรกได้แค่กดลูกศรแล้วเห็ดหมุน วันที่สองทำระบบปุ่มได้ วันที่สามมีฟังก์ชันกดปุ่มแล้วเพิ่มค่าความเป็นอยู่พร้อม Text แสดงผล วันที่สี่ทำระบบเพิ่มลดหลอดค่าความเป็นอยู่ วันที่ห้าทำระบบพลังงาน เมื่อกดแล้วจะมีการใช้ Energy เมื่อหมดจะกดปุ่มต่อไม่ได้ ไปได้สวยสุดๆ การพัฒนาแบบต่อเนื่องนี่มันสุดยอดไปเลย
ส่วนวันที่หก … พบว่าเขียน Phaser ผิดเวอร์ชั่นมาตลอด เผลอทำด้วย Phaser 2 จ้า (ยิ้มแห้ง) แต่ถ้ามองในแง่ดี อย่างน้อยเราค้นคว้าและเห็นโค้ด Phaser 3 แบบผ่านๆ แถมได้ทำความรู้จักกับการเขียนแบบ ES6 (แม้จะใช้เป็นแค่ let กับ const) ด้วยนะ แหะๆ
ประชุมงาน แบ่งงาน คุยกันให้เห็นภาพตรงกัน
และแล้วการประชุมทุกสัปดาห์ก็วนเวียนมาอีกครา
โดยครั้งนี้เรามาการคุยกันแบบละเอียดมากขึ้น แตกแยกย่อยกันออกมาอีก เช่น การจะมีปุ่มให้ความอบอุ่นไข่เราต้องทำอะไรบ้าง ก็จะมีโค้ดแสดงผลไข่ เมื่อกดแล้วมีฟังก์ชันเพิ่มค่าความเป็นอยู่ (Mood) ของไข่ เป็นต้น แยกย่อยออกมาให้ครบทุกส่วน ทำให้เราได้เห็นภาพงานที่เราต้องทำในสเกลที่ละเอียดมากขึ้น
ข้อดีของการแบ่งงานเป็น Task ให้เห็นภาพโดยละเอียดคือทำให้เราได้เห็นว่ามีอะไรที่ต้องทำบ้าง ช่วยให้เราจัดระเบียบในตัวเองได้ว่าทำส่วนนี้เสร็จจะทำส่วนไหนต่อ วันนี้จะทำอะไรและพรุ่งนี้จะทำอะไร การทำแบบนี้ทำให้เพื่อนๆฝ่าย Dev รวมถึงตัวเราเองทำงานกันเป็นระบบมากขึ้นเยอะเลย
ซึ่งทุกครั้งที่ประชุมงาน ฟังก์ชัน ระบบของตัวเกม หน้าตาก็จะเปลี่ยนไปเรื่อยๆ เรียกได้ว่าเป็นรูปเป็นร่างขึ้นเรื่อยๆนั่นแหละ หลอด Mood จะไว้หน้าแรกไหม? กดดูตรงชื่อแล้วจะมีอะไรแสดงบ้าง? ระบบ Energy พร้อมตัวเลขจะอยู่ตรงไหน? ระบบ EXP จะเป็นยังไง? ยิ่งเราคุยกัน ทิศทางของเกมก็มีแต่จะดีขึ้น ดีสุดๆไปเลย ❤
คำว่าพยายามไม่เคยทำร้ายสักคนที่ตั้งใจ
(อยากจะเปิดเพลง Shonichi ประกอบ)
เอาล่ะหว่า ตอน Hello World ก็เรียนรู้ Phaser ผิดเวอร์ชั่น พอถึงเวลาต้องลงมือทำจริงๆ ช่วงแรกก็หนักเอาเรื่อง เพราะต้องทำไปด้วยเรียนรู้ไปด้วย หลายๆครั้งที่รู้สึกเหนื่อยเพราะทำไม่ได้ซักที แต่ก็ไม่ยอมแพ้หรอกนะ :D
ความรู้สึกที่ได้เรียนรู้อะไรใหม่ๆมันน่าตื่นเต้นอยู่เสมอเลยเนอะ
ระหว่างที่เขียนโค้ด รูปจากฝ่าย Design ก็มารอแล้ว ซึ่งเมื่อไหร่ที่รูปจาก Design เสร็จแต่ฟังก์ชันส่วนที่ต้องใช้รูปนั้นยังไม่เสร็จนี่จะรู้สึกกดดันตัวเองอีก 2.5 เท่า แบบว่าตอนวาดเขาก็ต้องใช้เวลา แต่เขาใช้เวลาน้อยกว่าที่เราทำฟังก์ชันส่วนนี้อีก ฉะนั้นรีบๆทำได้แล้วว้อยยย เรียกได้ว่าเป็นแรงผลักดันชนิดหนึ่งก็ว่าได้นะ
และแล้ว ซาลาร่าก็ทำได้ (เย้)
แม้จะไม่เป๊ะ แต่กว่าจะมาถึงจุดนี้เราก็เข้าใจถึงการใช้ Phaser 3 ในระดับที่มากพอจะดราฟเกมตัวเองให้ออกมาเป็นหน้าตาแบบนี้ได้ รวมถึงการเรียกใช้ฟังก์ชันต่างๆ ถึงแม้จะเป็นแค่เป้าหมายเล็กๆแต่สำหรับเราแล้วมันคือภาพแห่งความสำเร็จจริงๆ
เมื่อพื้นฐานเราแน่น จะต่อเติมขึ้นไปอีกเท่าไหร่ก็ไม่หวั่น นับวันที่ทำก็มีแต่จะทำได้เร็วขึ้น แต่ละงานที่วางไว้ให้ตัวเองได้ทำก็ไปได้ราบรื่นและสำเร็จตามที่วางไว้ในแต่ละวัน เส้นการทำงานเริ่มนิ่งต่างจากช่วงแรกที่หนักไปกับการดิ้นรนเรียนรู้ ทีนี้ก็เริ่มเขียนเกมได้อย่างไม่กระวนกระวานและมีความสุขมากขึ้นแล้ว
เรียกได้ว่างานดราฟ UI ตัวเกมเราจะรับหน้าที่เอง ทั้งการ Preload รูปเข้ามา, การเซ็ต x y ให้กับรูป, scale ของรูป, ฟังก์ชันการเปิดปิดการแสดงผลของรูป รวมถึงฟังก์ชัน Responsive …
ฟังก์ชัน Responsive ตัวร้าย!
ด้วยความที่เราโค้ดเกมและรันบนจอคอมพ์มาตลอด ทำให้เราเห็นการแสดงผลของตัวเกมกับทุกหน้าจอโทรศัพท์ได้ไม่มาก แต่ละครั้งที่คนอื่นเข้าเว็บมาลองก็ล้วนมีปัญหากับ Responsive ของหน้าจอ แล้วเราเป็นคนที่รับทำในส่วนนี้ไง แก้วนไปค่ะ
หลังจากที่ตบตีกับมันจนท้อไปหลายที ก็แก้จนผ่านไปได้ด้วยดี โคตรภูมิใจตัวเองเลย เก่งมากแล้วนะคะลาร่า ❤
ทั้งหมดทั้งมวล เกือบทุกอย่างที่เห็นในตัวเกมคือฝีมือเราเอง เรียกได้ว่าค่า x y คือมือซ้าย ค่า scale คือมือขวา สมองคือ setVisible() หัวใจคือฟังก์ชัน Responsive ออกมาเป็นพลังแห่งซาลาร่า (เว่อร์)
ยังไม่นับฟังก์ชันอีกหลายตัวที่เป็นส่วนช่วยให้เกมมันทำงานได้ รวมถึงฟังก์ชันบางตัวที่เขียนได้แล้วยังขนลุกตัวเองว่าเขียนได้ไงฟะ!
ยอมรับเลยนะว่าการมาทำตรงนี้ทำให้ Logic เราดีและไวขึ้นจริงๆ ;)
ในระหว่างนี้ เอนจิ้นที่ต้องใช้งานก็มีเพิ่มขึ้นมาอีกมาก อาทิ Vue.js สำหรับแสดงผลบนจอโปรเจ็คเตอร์, React, Axios สำหรับดึงค่าจาก Database โดยตัวที่ใช้คือ MariaDB แต่เราที่หนักไปทางการโค้ด Phaser แล้วเลยไม่ได้มาช่วยทางนี้ซักเท่าไหร่ เลยไม่ได้รู้เรื่องอะไรทางนี้เท่าไหร่เลย ฮือๆ
แต่ละครั้งที่ประชุม ก็ได้อะไรใหม่ๆกลับมาเสมอ
“วันนี้เราจะมาเขียน Blueprint กันนะ”
สิ่งหนึ่งที่ได้เรียนรู้จากการประชุมงานและมีประโยชน์มากๆเลยก็คือการเขียน Blueprint หรือที่เรียกเต็มๆว่า A-DAPT Blueprint ซึ่งจะมีลักษณะแตกต่างกันไปในแต่ละที่หรือรูปแบบงาน
การเขียน A-DAPT Blueprint มีเพื่อให้เราได้รู้ว่า ในระบบๆหนึ่งมีการทำงานลงลึกไปถึงขั้นไหน ทำให้เราเห็นภาพเงื่อนไขเหตุการณ์ที่จะเกิด สิ่งที่ต้องคำนึงถึงและสิ่งที่ต้องเรียกใช้ได้ง่ายขึ้น
พูดถึงระดับของ A-DAPT Blueprint ก่อน ซึ่งจะพูดจากบนสุดลงลึกไปเรื่อยๆ
- Acceptance Test หรือที่ย่อว่า Test คือหัวข้อของสิ่งที่จะเกิดขึ้น
ตามรูปด้านล่างแม้จะพูดถึงระบบเลือกบอสไดโนเสาร์ไปรอหน้าต่อสู้เหมือนกัน แต่เหตุการณ์ที่เกิดขึ้นไม่เหมือนกัน อันแรกคือกรณี User มีการเลือกบอส ก็จะส่ง User ไปห้อง Socket ที่เลือกไว้ แต่หากไม่ได้เลือกล่ะ? ก็จะเป็นอีก Test หนึ่งนั่นคือกรณีที่ User ไม่ได้เลือกบอส ทำให้เราต้องมาคิดเพิ่มว่าเราจะทำยังไง ทำให้เกมของเราครอบคลุมสภาพแวดล้อมอื่นๆที่จะเกิดขึ้นได้มากขึ้น ซึ่งเราได้วิธีแก้ปัญหาเป็นการ Random ให้นั่นเอง (ซึ่งก็ไม่คิดเลยว่าส่วนนี้จะกลายมาเป็นระบบกันตายในงานวันจริง เดี๋ยวจะพูดอีกทีนะ)
- UI (User Interface) คือหน้าตาที่ User จะเห็น
- State หรือส่วนที่เป็นโค้ดและฟังก์ชันในการทำงาน ทำให้เราเห็นได้ว่า การที่ User จะเปลี่ยนจากหน้านี้ไปหน้านี้เราต้องมีอะไรบ้าง มีการเก็บค่าหรือเรียกใช้อะไรไหม
- API (Application Programming Interface) เป็นส่วนที่เชื่อมระหว่างโค้ดกับดาต้าเบส หรือบ้างก็เรียกใช้ฟังก์ชันอื่นๆนอกเหนือจากโค้ดของตัวเกม อาทิ การดึงข้อมูล การควบคุมการเปลี่ยนหน้าผ่าน Socket
- Database สำหรับเก็บข้อมูล User ไว้และเรียกใช้เมื่อต้องการ อะไรที่เกี่ยวกับดาต้าเบสก็จะเขียนในส่วนนี้
- 3rd Party จะพูดให้เข้าใจง่ายๆคือสิ่งที่อยู่นอกเหนือจากนี้ เราไม่ได้เขียนโค้ดขึ้นเอง แต่นำมาเรียกใช้ อย่างเช่นการใช้งานระบบ Login ด้วย Facebook นั่นเอง
อีกอย่างที่ได้เรียนรู้คือการแบ่งงานที่ละเอียดขึ้น จากเดิมจะเขียนแค่ว่ามี Task งานอะไรบ้าง เอามารวมๆกันแล้วรวบว่าก้อนนี้ใช้เวลากี่ชั่วโมง พอมาคราวนี้ เราแบ่งเป็น Task ไปว่า งานนี้ใช้เวลากี่นาที แล้วใครจะเป็นคนรับหน้าที่ทำ ซึ่งทำให้เพื่อนในทีมได้รู้หน้าที่ตัวเองว่าต้องทำอะไร ทำให้งานที่ทำไม่ไปทับกับเพื่อนหรือส่วนอื่นๆ
ด้วยความที่การเขียน Blueprint มันก็เปลืองกระดาษอะนะ #ทีมเกมทำให้โลกร้อน
บางวันที่ไม่เหลือกระดาษ ก็กลายเป็นว่าต้องติดบนกระจกซะงั้น (ฮา)
ส่งเกมออกสู่สายตาโลกภายนอก
และแล้ววันนี้ก็มาถึง … วันปล่อยเกม SIT Dino นั่นเองงงงงงงงงง (จุดพลุ)
ระหว่างที่ทำนี่ก็มีเพื่อนหลายคนแวะมาบอก
“ลาร่า อยากเล่นเกมเลี้ยงไข่แล้วอะ” บ้างก็ “เมื่อไหร่จะเปิดให้เล่น อยากเลี้ยงงงง”
การเรียกร้องของท่านสิ้นสุดลงแล้วค่ะ!
ทีมเกมได้ทำการปล่อยเกมในช่วงหนึ่งสัปดาห์ก่อนวันปฐมนิเทศตามที่วางแผนไว้ (แต่มีน้องปีหนึ่งมาเล่นเยอะตามที่วางแผนไว้ไหม … ไม่รู้) ก็ถือว่าเป็นไปได้ด้วยดี ระหว่างนี้เราก็แก้บัคและทำส่วนที่เป็นระบบต่อสู้เพื่อให้พร้อมกับวันปฐมนิเทศ
ทั้งๆที่เป็นช่วงปล่อยเกมแท้ๆแต่กลับไม่ค่อยรู้สึกตื่นเต้นเลย คงเป็นเพราะอยู่กับเกมนี้มานานแล้วล่ะมั้งคะ อยู่ด้วยกันมาตั้งสองเดือนแน่ะ (ฮา)
วันนี้ที่ลอยคอ เอ้ย! รอคอย
วันงาน วันจริง วันนี้ที่รอคอย วันที่จะชี้ว่าสิ่งที่ทำมา จะรอดหรือจะร่วง
เข้ามาช่วงเกมจะเริ่มพอดี ได้เห็นลำดับเกมตัวเองตั้งแต่ต้นจนจบงาน …
หน้าซีด..
เกมบัคตั้งแต่จบการเลือกบอสครั้งแรก พอจะเลือกบอสครั้งที่สองนั้นเกิดการบัคทำให้มีตัวที่เลือกไม่ได้มากกว่า 3 ตัว ได้ไปฟังจากพีเบ็นซ์ตอนจบงานได้ความว่า ข้อมูลที่ส่งมาหา Socket มันเยอะและเป็นก้อนใหญ่เนื่องด้วยในห้องรับรองมี User จำนวนมาก ทำให้ตอนปิดรับข้อมูลมีข้อมูลตกค้างที่ยังส่งมาไม่ถึง ทำให้ส่วนที่ตามมานั้นทับกับที่มีอยู่ กลายเป็นว่าข้อมูลที่เก็บไว้ในดาต้าเบสบึ้มไปเลย … โอ้
ระหว่างงานที่ช็อคในใจไปแล้ว ก็ได้เห็นว่าแม้น้องๆจะเลือกบอสกันไม่ได้ แต่ยังมีระบบ Random User เข้าห้อง Socket เพื่อเข้าสู่หน้าการตีบอสต่อได้อยู่ดี เรียกได้ว่ารอดตาย ยังคงตีบอสเอาคะแนนมาเรียกท่านอาจารย์ขึ้นไปพูดได้ตามลำดับที่วางไว้ไปจนจบงาน เรียกได้ว่าแบกตัวเองสภาพโชคเลือดจนชนะเกมได้ในท้ายที่สุด
โล่งใจ…
ขอกราบขอบคุณการเขียน A-DAPT Blueprint มา ณ ที่นี้ด้วยค่ะ (ฮาาาาา)
จบจากงานนี้ช่วงบ่ายก็ได้เอาเรื่อง SIT Dino นี้ไปพูดต่อในงาน BrownBag ด้วย มีน้องๆเข้ามาฟังจนเต็มห้อง Train 4 เลยทีเดียว ขอบคุณที่มาฟังพี่พูดนะคะ ❤
โปรเจกต์นี้สอนให้รู้ว่า
- จงอย่า Hello World ผิดอย่าง เพราะมันจะทำให้เสียเวลาที่ต้องเรียนรู้เพิ่ม
- ได้ฝึกการเขียนโค้ดที่เป็นระเบียบมากขึ้น (อย่างน้อยก็มากกว่าเกมก่อน ฮาา) รวบอะไรได้รวบ รวมถึงเป็นครั้งแรกที่ได้ลองเขียนแบบ OOP สุดยอดไปเลย
- คุยกันเยอะๆ คุยกันดีๆ เพื่อให้งานเราเดินไปในทางเดียวกัน
- การจัดการงานเป็นระบบล้วนส่งผลดีต่อตัวเอง ต่องาน ต่อผู้อื่น
- ได้เรียนรู้การใช้ Tools ใหม่ๆ ทั้งเอนจิ้นเกมที่ใช้ หรือแม้แต่โปรแกรมคุยงานอย่าง Slack ซึ่งโคตรจะคูล
- ไม่มีอะไรที่เราจะผ่านไปไม่ได้ พยายามเข้าไว้ เหนื่อยก็พัก ไม่ไหวก็นอน อย่าหักโหมเมื่อพร้อมแล้วก็ลุยต่อได้เลยยย
- จะทำอะไรอยากให้คำนึงในมุมมองของ User ไว้เสมอว่ากับสิ่งๆหนึ่งมันจะสามารถเกิดเหตุการณ์แบบไหนได้บ้าง ยากไปซับซ้อนไปรึเปล่า
- ได้อะไรมามากมายเกินคาดไว้มากๆ การได้เรียนรู้สิ่งใหม่ๆ จัดการตัวเองได้เป็นระบบมากขึ้น ได้การทำงานใหม่ๆมา ความรู้สึกที่ได้เรียนรู้อะไรใหม่ๆนี่มันดีจริงๆเลยค่ะ
รักทุกคนที่มีส่วนร่วมกับงานนี้และทำให้งานนี้ผ่านไปได้ แม้อาจจะไม่ได้เอ่ยชื่อเลย ทั้งทีมเกมฝ่าย Developer, Design, Sound, Infrastructure ขอบคุณทุกคนจริงๆค่ะ
ขอขอบคุณทุกคนจากใจ ❤
⸻ ลาร่า, Developer หญิงคนเดียวในกลุ่มทีมเกม