Lab 2: Object-Oriented Programming Concept

จะให้ฝึกการโปรแกรมโดยใช้ออบเจ็กต์กันอีกทีนะ
update ล่าสุด 14.15    19 มิย  ส่วนตัวแล็บ ผมโพสเฉลยแล้ว   ส่วนการบ้าน ผมทำ slide วิธีการเรียกใช้ javadoc ให้แล้ว ดูตรงการบ้านนะ


สำหรับวันนี้เราจะมาเขียนโปรแกรมรันเกมไพ่อย่างง่ายๆกัน  นิสิตจะได้ฝึก

มาเริ่มกันเลย

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

และต้องมีเมธอดดังต่อไปนี้

หลังจากเขียนคลาส Card เสร็จแล้ว จงเขียนคลาส Deck ซึ่งหนึ่ง deck หรือสำรับไพ่่นั้นจะประกอบไปด้วยไพ่่ 52 ใบ (เอาจากทุก rank และ suit โดยต้องมีการเรียงด้วย เพราะเดี๋ยวต้องสับไพ่ให้ได้) ระหว่างการเล่นไพ่  อนุญาตให้สามารถเอาไพ่ออกจาก deck ได้ (อาจต้องมีการเขียนเมธอดเพิ่มจากที่ระบุไว้)

ให้คลาส Deck มีเมธอดต่างๆดังต่อไปนี้ เราจะมาจำลองเกมไพ่แบบหนึ่ง ในเมธอด main กัน โดยขั้นตอนของการเล่นเกมจะเป็นดังนี้

  1. สร้าง deck ขึ้นมาสองสำรับ สำรับแรกเรียกเป็น ของ player1 สำรับที่สองเป็นของ player2
  2. สับไพ่ทั้งสองสำรับ
  3. ผู้เล่นทั้งสอง ต่างฝ่ายต่างหยิบไพ่สองใบแรกมา ใครได้ rank รวม เข้าใกล้แต่ไม่เกิน 21 มากกว่าคนนั้นจะชนะ (เกิน 21 ถือว่าแพ้ทันที) ตัว rank ที่เป็นอักษร ถือว่ามีค่าเท่ากับสิบ ยกเว้น A ที่มีค่าเท่ากับ 11 ก็ได้ หรือ 1 ก็ได้ (ถ้า rank รวมเท่ากันจะถือว่าเสมอกัน ทำให้เกมไม่จบ ต้องหยิบไพ่สองใบต่อไป) 
  4. เกมจบเมื่อมีคนชนะ หรือ ดูไพ่หมดสำรับแล้วยังไม่แพ้ชนะกัน (อะไรมันจะปานนั้น)
  5. เมื่อเกมจบ จะต้องมีการพิมพ์ว่าใครชนะ หรือออกเกมโดยไม่มีใครชนะ แล้วค่อยออกจากเกม

 

เมธอดที่สามารถนำมาใช้ได้

/**

* Returns a random number between first and last (excluding last)

*/

public static int random(int first, int last) {

    return first + (int)(Math.random()*(last – first))

}

 

/**

* Returns a random number from 0 to N (exclusive N)

*/

public static int random(int n) {

    return random(0, n);

}

การส่ง

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

ดังนั้นคนที่ทำไม่ทัน ควรฝึกทำซ้ำ จนใช้เวลาน้อย นะ

สำหรับการส่ง นั้น แล็บนี้ไม่ต้องส่ง เฉลยอยู่นี่ ใช้พวก zip เปิดเอา หรือลอง import เข้าใน Eclipse ดูก็ได้ ใช้ import from archive   ไม่จำเป็นจะต้องทำตามเฉลยนะ ให้เราแน่ใจว่า โปรแกรมทำได้ตามโจทย์สั่งเท่านั้นก็พอ (กรุณาอย่าเปิดดูเฉลยจนกว่าจะทำเสร็จด้วยตนเอง ทั้งนี้เพื่อตัวเราเองนะ เรียนเขียนโปรแกรมมันต้องเรียนจากทดลองทำ ลองพลาดดูเองก่อน)

การบ้าน

สิ่งที่อยากให้นักเรียนทำนอกเวลา ให้เป็น วันนี้คือ การเขียน help file (แน่นอน พอเขียนเป็นก็จะอ่านเป็น) ตัว help file ที่บอกว่าเมธอดในคลาสทำอะไรบ้าง ในจาวา เราเรียกว่า javadoc ซึ่งการเขียนจะคล้ายๆเขียนคอมเม้นท์ลงโค้ด (มีรูปแบบการเขียนอยู่) พอเขียนเสร็จก็รันตัวเครื่องมือ javadoc ซึ่งมีมากับ Eclipse แล้วต่อจากนั้น จาวาจะเอาที่เราเขียนคอมเม้นท์ไปสร้าง help file ในรูปแบบ html ให้เราเอง (รูปแบบจะเหมือนกับ ตัวหน้าเว็บ API ที่เราอ่านของ sun)

ก่อนอื่นอ่านวิธีเขียนก่อน ว่ารูปแบบการเขียนเป็นอย่างไร
ส่วนการเรียกตัว javadoc ขึ้นมารันนั้น ดูนี่ (เป็น powerpoint)



สิ่งที่จะให้ทำคือ เอาคลาส Card กับ Deck ที่เขียนเสร็จแล้ว มาเขียน javadoc ของมันให้หมดทุกเมธอด (ยกเว้น main) และตัวแปร พอเสร็จแล้วก็ส่ง

การส่งการบ้าน

export ไฟล์เป็น jar file (ต้องมีซอร์สโค้ดที่เขียนคอมเม้นสำหรับทำ javadoc มาเรียบร้อย ตรวจทานให้ดี นอกจากนี้ต้องมีตัว javadoc ที่เจนแล้วด้วย) แล้วส่งมาที่ progmethcp@gmail.com ภายในวันพุธ่ที่ 24 มิถุนายน เวลา 24.00 น. ไฟล์จะต้องตั้งชื่อว่า javadoc_xxxxxxxxxx.jar โดย xxxxxxxxxx นั้นเป็นเลขประจำตัวนิสิต ส่วนใน subject ของเมล์ ให้ใส่ javadoc_xxxxxxxxxx โดย xxxxxxxxxx นั้นเป็นเลขประจำตัวนิสิต 

อย่าลืม การฝึกเท่านั้น ถึงจะทำให้โค้ดได้เก่งขึ้น ตอนนี้โจทย์ยังถือว่าง่ายอยู่ ต้องรีบทำให้เข้าใจ