418587 ภาคปลาย 2552/การบ้าน 2

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

ให้ไว้ ณ วันอาทิตย์ที่ 31 ม.ค. 2553 ส่งวันพุธที่ 17 ก.พ. 2553 เวลา 23.59 น. โดย zip ไฟล์ในไดเรกทอรี Breakout ส่งมาที่ pramook at gmail dot com

เริ่มต้น

งานของคุณ

1. เพิ่มไอเทมที่เก็บแล้วมีลูกบอลเพิ่มขึ้นสองลูก

ในตอนนี้เกม Breakout ในโค้ดตั้งต้นมีไอเทมเพียงสองชนิด คือ ไอเทมที่เก็บแล้วแป้นสามารถจับและปล่อยลูกบอลได้ (ไิอเทม A) กับไอเทมที่เก็บแล้วแป้นมีความยาวมากขึ้น (ไอเทม B)

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

วิธีการที่ง่ายที่สุดในการทำโจทย์ข้อนี้คือการเขียน subclass ของ BreakoutLib.Item แล้ว implement เมธอด CollideWithBar ของมันให้เพิ่มลูกบอลเข้าไปสองลูกใส่ GameState

แก้ไข Content Pipeline ให้อ่านไอเทมชนิดที่สามได้

Map ที่ให้ไปในเกม (ไฟล์ map-01.txt, map-02.txt, และ map-03.txt ใน Content ของโปรเจค Breakout) สามารถใส่ไอเทมได้ 4 ชนิด (แทนด้วยตัวอักษร 1, 2, 3, 4 ตามลำดับ) แต่ในตอนนี้เกมสามารถอ่านไอเทมได้แค่ชนิด 1 กับ 2 เท่านั้น เนื่องจากใน BreakoutMapReader.cs ในโปรเจค BreakoutMapContentPipeline มีการกำหนดเงื่อนไขดังต่ีอไปนี้

<geshi lang="csharp"> Item item = null; if (brickFromFile.itemType != 0) //This brick come with its item. load it. {

 switch (brickFromFile.itemType)
 {
   case 1: item = new LongBarItem(); break;
   case 2: item = new MagnetBarItem();  break;                        
 }

} </geshi>

เมื่อคุณสร้างคลาสสำหรับไอเทมชนิดนี้เสร็จแล้ว ให้ไปเพิ่ม case 3 หรือ case 4 ในคำสั่ง switch ข้างบน แล้วเกมก็จะอ่านไอเทมที่คุณสร้างขึ้นมาใหม่ได้

อนิเมชันของไอเทม

เ้ราได้สร้างอนิเมชันของไอเทมชนิดนี้เอาไว้ให้คุณแล้ว มันอยู่ในไฟล์ extra_balls_item.anim ใน Content ของโปรเจค BreakoutLib

2. เพิ่มไอเทมที่เก็บแล้วผู้เล่นสามารถยิงลูกกระสุนปืนออกจากแป้นได้

3. เพิ่มด่าน

สร้างด่านเพิ่มขึ้นอีกสองด่าน โดยทำการสร้าง map ตามรูปแบบที่กำหนดไว้ใน BreakoutMapContentPipeline

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

4. เพิ่มเสียง

5. ทำให้เกมสวยงาม

เปลี่ยนหน้า Title, หน้า Game Over, หน้าจอระหว่างเล่นเกม, ฯลฯ