|
วันนี้เราจะมาลองเครื่องมือใหม่กัน เมื่อตอนปีหนึ่ง ทุกคนใช้ JLab ในการเขียนจาวา ปีนี้เราจะมาใช้เครื่องมืออีกตัว เรียกว่า Eclipse ซึ่งใช้ได้ดีมากๆ ก่อนอื่นมาดูวิธี install กันก่อน 1. download file zip มาจาก www.eclipse.org (ราวๆ
120 MB) มีแค่นี้เลย install ง่ายมาก (ที่ศูนย์คอมฯเราได้ลงไว้ให้ทุกคนแล้ว หา shortcut เอา) ลอง double click ขึ้นมาดู ถ้าเปิดเข้าไปครั้งแรกก็จะมีกล่องขึ้นมาสำหรับใส่ folder ที่จะเก็บผลงานของตัวเอง ใน lab นี้ให้ใส่ว่า z:\eclipse ถ้าติ๊กเครื่องหมายถูกก็หมายความว่าเวลาเปิดครั้งหน้าก็ไม่ต้องมาถามอีก(ที่ไม่เอาไว้ drive c เพราะว่าศูนย์คอมฯ ไม่ให้ใช้นะ) ตัว
drive z นั้น เวลาเรา log in
เข้าไปมันจะไปเชื่อมโยงกับที่เก็บข้อมูลส่วนตัวของเราในศูนย์คอมฯ
เพราะฉะนั้นเวลาต้องการใช้
เราสามารถไปนั่งที่เครื่องไหนก็ได้นะ หน้าต่างหน้า intro จะเป็นแบบนี้ ![]()
เวลาจะสร้าง project ให้ไปที่ File
ตรงมุมซ้ายบนแล้วเลือก new -> project ![]() เราจะเขียนโปรแกรม Java เพราะฉะนั้น เราก็เลือก Java Project เสร็จแล้วก็พิมพ์ชื่อ project ลงไป ให้ชื่อว่า Lab1 โดย case sensitive
ตรงนี้จะสังเกตว่าเราเลือกได้ทั้ง next และ finish
(ตรงนี้เราแค่จะสร้าง project ง่ายๆ เพราะ ฉะนั้นกด
finish เลยก็ได้) พอเสร็จแล้วในหน้าต่างด้านซ้ายก็จะมี project ของเราขึ้นมา เป็นการแสดงว่า project ของเราสร้างอยู่ในเครื่องแล้ว ต่อไปมันก็จะถามว่าจะเปลี่ยน perspective รึเปล่า ตอบ yes ไปละกัน
2. ก้าวที่สอง สร้างไฟล์ พอคลิกไปแล้วจะเห็นเป็นช่องๆ ให้กรอกรายละเอียดของ
class ![]() ในรูปตัวอย่างนี้ เป็นการสร้างคลาสใหม่ของ project ที่ชื่อว่า sort แต่ว่า ที่จะให้ทำ คือ สร้างคลาสอื่นนะ ลองทำดูเอง ให้ลองสร้าง public class ชื่อ Hello ที่มี method main โดยไม่ต้อง inherit abstract method (ให้สร้างโดยใช้ ช่องที่ให้กรอกกับกา เท่านั้นนะ ห้ามมาพิมพ์เองทีหลังล่ะ) พอสร้างเสร็จแล้วมันอาจจะมี comment เต็มไปหมดเลย ใน lab นี้ให้ปล่อย comment พวกนั้นเอาไว้นั่นแหละ ไม่ต้องลบทิ้งหรอกนะ (Eclipse สามารถช่วยเราร่าง comment ได้) คราวนี้จะทำแบบครั้งแรกๆของจาวา โดยให้เขียนโปรแกรมให้พิมพ์คำว่า "Nate River" เขียนเล้ยยยยยยย ตอนที่เขียนอยู่ (ห้ามจดชื่อนี้ลงสมุดโน๊ต) สังเกตว่า ชื่อไฟล์จะมีเครื่องหมาย * ขึ้นมาด้วย ซึ่งหมายความว่า ไฟล์นี้ยังไม่ได้ save ยังไม่ต้อง save นะ ให้ลองรันดูเลย ให้ไปที่เมนู Run แล้วเลือก Run As Java Application (ตรงนี้มันจะมีถามว่าจะ save รึเปล่า ก็ save ได้ตรงนี้เลย สรุปคือ Eclipse จะช่วยเรา save ไฟล์ได้อัตโนมัติ ) ผลลัพธ์จะออกที่ console ที่หน้าต่างล่าง หมายเหตุ: Eclipse ช่วยเตือนเราว่าให้ save ในตอนที่จำเป็น ซึ่งเจ๋งมาก แต่ปัญหาคือ บางทีมันไม่ทำ เพราะฉะนั้น บางทีถ้าโปรแกรมรันไม่ได้ เราก็อาจจะต้อง save ด้วยตัวเองอีกรอบ ก่อนที่จะรันใหม่
การ import คือ การนำเอาไฟล์ที่ถูกสร้างไว้อยู่แล้วเข้ามาใน project เอาเป็นว่ามันคือการ copy ไฟล์เข้ามาใส่ใน project ที่เราต้องการนั่นแหละครับ แต่แทนที่เราจะทำใน windows explorer ก็ใช้วิธีนี้แทนจะง่ายกว่า วิธีทำก็คือ คลิกขวาที่ชื่อ project แต่คราวนี้ให้เลือก import แทน พอเข้าไปก็มีตัวเลือกอีกนั่นแหละ ที่ขอแนะนำในตอนนี้มีอยู่สองอัน ครับคือ
file system หมายถึง import file ปกติเลย ส่วนอีกอันก็คือ
Archive file ครับ
จะเป็นการแตกไฟล์ zip พร้อมกับ import เข้ามา
(zip ไฟล์ จะมีนามสกุล
.jar ก็ได้
นี่เป็นไฟล์ที่เป็นการซิปใช้กับจาวา คงเคยเห็นกันมาแล้วจาก
JLab) ![]()
เอาล่ะ ลอง
import จาก file system
ดูบ้าง ลอง unzip ตัวจาร์ที่โหลดมาไปไว้ซักที่ไหนที่หนึ่งใน
drive z แล้วสร้างโปรเจ็คใหม่เลย
แล้วคราวนี้ import จากโฟลเดอร์ที่
unzip ไว้
4. ก้าวที่สี่ สร้าง .jar ไฟล์ จริงๆ แล้ว จาร์ก็คือ zip นั่นเอง แต่เราสามารถทำให้มัน executable ได้ด้วย (double click ใน window explorer แล้วมันจะ run program ที่เขียนด้วยภาษา Java ได้) lab ของเราทุก lab จะต้องส่งเป็น jar file (ครั้งนี้ยังไม่ต้องส่ง) วิธีสร้าง .jar fie เนี่ยก็คลิกขวา ที่ชื่อ project แล้ว เลือก export จากนั้นก็เลือก jar file เสร็จแล้วก็ใส่ชื่อไฟล์ลงไป และเลือก option ให้เรียบร้อย(อย่าลืมเลือกให้ include source นะ)
![]() ![]()
สำคัญ: lab ส่วนใหญ่จะต้องมี source code หรือ text file เพราะฉะนั้นควรจะทำการสร้างไฟล์เหล่านี้ไว้ที่ตัว project เลย แล้วเวลาสร้าง jar ไฟล ์นั้นในกลุ่มช่องตรงกลางก็ให้ติ๊กที่ช่อง Export java source files and resources (หมายถึง source code) เสมอ (สรุปคือ ให้ติ๊ก 2 ช่องคือ Export generated class files and resources และ Export java source files and resources) แบบนี้แล้วใน jar file ก็จะมี class ไฟล์ ต่างๆ ที่เราสร้างขึ้นเอง แล้วก็ source code ครบถ้วน สำคัญ:
ก่อนที่จะส่ง
jar file ก็ลองใช้ winzip extract
ออกมาดูซักหน่อยก็แล้วกันนะจะได้แน่ใจว่าส่งไฟล์ไปครบถ้วนหรือเปล่า
และถ้าใครอยากจะใช้วิธีการ copy ไฟล์ที่ต้องการมาไว้ใน project ใหม่
แล้วใช้ project นั้นสร้าง jar ก็ทำได้เหมือนกันนะ" 5. ภาคผนวก
ก่อนเริ่ม part 2
3. กรณีที่มีไฟล์ภาษา Java ที่เขียนมาอย่างไร้ซึ่งรูปแบบจนดูไม่รู้เรื่อง ให้ลองเปิด menu source แล้ว เลือก Format(hot key Ctrl+Shift+F) source ของคุณจะถูกจัดรูปแบบอย่างสวยงาม 4. ถ้ากำลังจะต้องพิมพ์ชื่อ class หรือ variable ยาวๆ ที่คุณนึกไม่ออกหรือขี้เกียจพิมพ์ ขณะเริ่มพิมพ์อักษรไปบางตัวให้กด Ctrl+Space แล้วจะปรากฎตัวเลือกออกมาให้คุณเลือกใช้ได้ 5. ที่ menu Window เลือก Show View แล้วจะมี view สำหรับดู project หลายๆ แบบ
แสดงออกมา แบบที่ขอแนะนำเบื้องต้นมีสองแบบ 6. ถ้าต้องการเปลี่ยนพวกชื่อตัวแปร ชื่อไฟล์ และอะไรก็ตามที่เกี่ยวกับชื่อให้ ใช้วิธี refactor จะดีกว่า search แล้ว replace
7. กรณีที่พยายาม run files แล้วปรากฏว่า ไฟล์ที่ run กลับ กลายเป็นไฟล์อื่น ให้ทำการเปลี่ยน focus ไปที่ file ที่ต้องการจะ run แล้วลอง run ใหม่อีกที 8. เวลาที่ลบ project จะมีให้เลือกว่า จะลบ content รึเปล่า(ลบ content ก็คือลบไฟล์ใน directory ของ project จริงๆ ถ้าไม่เช่นนั้น แล้วจะเป็นเพียงการทำให้มองไม่เห็น project นั้นเท่านั้น) 9. ถ้าเปิด
class ไฟล์ ออกมาโดยไม่มี source มันก็จะขึ้นมาบอกว่าไม่มี source ของไฟล์
แล้วบอกได้แค่ว่ามี method และ ตัวแปรบางตัวแต่ class ไฟล์
ก็ยังใช้งานได้ตามปกตินะ เช่น ถ้ามี main class ก็ลองสั่งให้ run ได้ คำถามยอดฮิต Part 2: ทบทวนและเกริ่นนำเนื้อหาเรื่องคลาสทั้งหมด (ไม่ต้องส่ง แต่ขอให้เอาไปทำเล่นที่บ้านทุกคน สนุกมากๆ)
จุดมุ่งหมายของ part 2 นี้คือ
CodeRally [from http://www.alphaworks.ibm.com/tech/coderally] หรือโหลดไฟล์จาก ลิ้งค์นี้ unzip jar ทั้งหมดไปไว้ในplugins folder ของ eclipse CodeRally คือการเขียนโปรแกรมบังคับรถแข่ง แข่งกัน นิสิตจะต้องเขียนคลาสและเมธอดของจาวา เพื่อทำ AI ของรถ พอเราเขียน AI เสร็จก็เอาไปทดลองในสนามแข่ง แข่งกับเครื่องหรือเพื่อนๆ รถของเรา (คลาสจะเรียกว่า Rally car) สามารถรับรู้ตำแหน่งของสิ่งต่างๆในสนามแข่งได้ รวมถึงสามารถรับรู้สภาพของรถคันอื่นได้ด้วย รถนั้นชนกันได้ แล้วยังโยนยางสำรอง (เก็บได้ในฉาก) เพื่อทำให้รถคันอื่นเสียได้ด้วย นอกจากนี้ยังเปลี่ยนเป็นรถตำรวจ (เข้า protected mode) ซึ่งเป็นอมตะชั่วคราวได้อีกด้วย ในการแข่งนั้น หนึ่งแมทช์จะมีรถแข่งได้หกคัน ซึ่งแต่ละคันจะสุ่มโผล่และสุ่มหันหน้าที่ตำแหน่งต่างๆกันไป แต่ละคันจะมีน้ำมันและยางสำรองเท่ากัน การขับเคลื่อนต้องเสียน้ำมัน ในสนามแข่งจะมีที่เติมน้ำมันอยู่ ถ้าเอารถไปจอดทับได้ก็จะได้เติมน้ำมัน นอกจากนี้ยังมีที่เก็บยางอีกด้วย ถ้าน้ำมันหมดรถจะเคลื่อนไปไหนไม่ได้ ในการคิดคะแนน วิธีคิดของคนที่ทำ CodeRally เป็นดังนี้
ซึ่งรถที่ได้คะแนนมากที่สุดจะถือว่าชนะ เอาล่ะ มาเริ่มเล่นกันดีกว่า 1. ไปที่ File > New > Project 2. เลือก Other > Game Project คลิ้กที่ Next ตามรูป Figure 1.
Figure 1 Create new Game Project 3. เลือกให้เกมเป็น CodeRally ใส่ ID นิสิตลงตรง project name จากนั้นคลิ้ก Finish ตามรูป Figure 2.
Figure 2 New Game Project name 4. โครงสร้างโปรเจ็คจะเป็นดัง Figure 3.
Figure 3 Your game project 5. เลือก RallyCar.java ไฟล์นี้จะเป็นไฟล์ที่เราต้องแก้ไฟล์เดียวเท่านั้น ในเมธอด getColor() ให้เปลี่ยนสีจาก CAR_BLUE เป็นสีใดก็ได้ที่นิยามไว้ใน Car.java (อันนี้ทำเพื่อให้เราได้ใส่สีที่ชอบเฉยๆ ไม่มีอะไรพิเศษ) 6. ลองรันดูเลย วิธีการคือ เลือก games.xml จากนั้นใส่ชื่อและสถาบัน แล้วคลิ้ก Add My Team จากนั้นก็เลือกผู้เล่นที่บังคับด้วยคอมอื่นๆ แล้ว Add ไปด้วย พอเสร็จแล้วให้รันด้วยการคลิ้ก Run ดัง Figure 4.
Figure 4 Setup your car to the race 7. สภาพการแข่งจะเป็นดังรูป Figure 5 8. ถ้าจะเอาไฟล์เอกสารของเมธอดต่างๆ และคลาสต่างๆ, 8.1. คลิ้กชื่อโปรเจ็คแล้วเลือกเมนู File > Export 8.2. เลือก Java > Javadoc 8.3. คลิ้ก Next แล้วก็ Finish. (อาจต้องมีการหา javadoc.exe ให้เจอ ซึ่งปกติจะอยู่ในโฟลเดอร์ของ jdk) 9. เท่านี้ก็จะได้โฟลเดอร์ doc ออกมา ซึ่งเราจะดูคำอธิบายของทุกคลาสได้ (คำอธิบายเมธอดและคลาส เราจะเรียกว่า javadoc) 10. สิ่งที่เราต้องเขียนก็คือ เมธอด move() ใน RallyCar.java ต่อไปนี้เป็นคำแนะนำนะ Coding Your Car – Overview RallyCar.java นั้นมีโครงอยู่แล้ว เราสามารถเติมตัวแปรและเมธอดเพิ่มเติมในคลาสนี้ได้ตามใจ สร้างคลาสอื่นก็ยังได้ พอต้องการจะทดสอบ อย่าลืมเซฟซะก่อน แล้วเลือก games.xml แล้วรัน คลาส Car.java เป็นซุปเปอร์คลาสของ RallyCar จะมีเมธอดหลายๆอย่างที่ RallyCar รับสืบทอดไป จงใช้เมธอดเหล่านี้ให้เป็นประโยชน์ ห้ามแก้คลาส Car จริงๆแล้ว เวลารัน CodeRally รันคนละ Car กับที่เรามี ที่เราได้มาเป็นแค่ตัวโครงเฉยๆ นอกจากนี้ยังมี อินเตอร์เฟสอีกสามอัน (โปรดไปอ่านเรื่อง Interface และ abstract class เพื่อความเข้าใจตรงนี้ จะช่วยได้มาก) IObject.java เป็นอินเตอร์เฟสของทุกออบเจ็กต์ในสนามแข่ง ทุกออบเจ็กต์จะ implement อินเตอร์เฟสนี้ (ไปอ่านว่า การ implement คืออะไร) อินเตอร์เฟสนี้นิยามเมธอด getX() และ getY() ซึ่งรีเทิร์นตำแหน่งของออบเจ็กต์ในสนามแข่ง ซึ่งเลขของ x กับ y นั้นไม่มีค่าลบ และเป็นไทป์ double ISpareTire.java อินเตอร์เฟสนี้ extend มาจาก IObject ซึ่งอินเตอร์เฟสนี้นิยามยางสำรองที่อยู่ในสนามแข่ง ยางทุกเส้นจะ implement อินเตอร์เฟสนี้ อินเตอร์เฟสนี้มีเมธอด getHeading() และ getSpeed() ดังนั้นเราสามารถรู้ข้อมูลของยางระหว่างที่ถูกขว้างไปได้ ICar.java อินเตอร์เฟสนี้ extend มาจาก IObject ซึ่งอินเตอร์เฟสนี้นิยามรถที่อยู่ในสนามแข่ง นิยามเมธอดที่รถสามารถเรียกใช้ได้ (ทั้งเรียกของตัวมันเอง และเรียกของรถคันอื่น) เมธอดเหล่านี้ได้ถูกอธิบายไว้ข้างล่างและใน JavaDocs The CodeRally Track Simulation Identification มีโครงเมธอดใน RallyCar เพื่อไว้สำหรับให้รถเราดูต่างจากคันอื่น เมธอดนี้ก็คือ getColor() ซึ่งต้องรีเทิร์น byte constant ที่เลือกมาจากสีรถที่นิยามไว้ในคลาส Car เราใช้เมธอดนี้ในการให้สีรถของเรา ค่า default ของ getColor() นั้นคือ CAR_BLUE เมธอดนี้ ต้องไม่ทำอะไรนอกจากรีเทิร์นค่าคงที่ Initialization ในตอนที่รถเราถูกวางในสนามแข่ง ตัวซิมูเลเตอร์จะเรียกเมธอด initialize() ของรถเรา ดังนั้นให้เราใส่โค้ดสำหรับการเซ็ตค่าเริ่มต้นต่างๆของรถเราได้ที่เมธอดนี้ เราสามารถเรียกใช้เมธอดอะไรก็ได้ แต่ว่า ซิมูเลเตอร์จะรัน initialize() เป็นเวลาหนึ่งวินาทีเท่านั้น ดังนั้นถ้ารันเมธอด initialize() ไม่เสร็จ รถของเราอาจจะเข้ามาในสนามในสภาพที่ค่าต่างๆเละได้ Moving Your Car หลังจากซิมูเลเตอร์เรียกใช้ initialize() เสร็จไปแล้ว มันจะเรียกเมธอด move() ของรถแต่ละคันเรียงลำดับกันไป ซึ่งการเรียกนี้เกิดทุก clock tick เราสามารถเรียกเมธอดต่างๆเพื่อดูสภาพรถ เปลี่ยนตัวแปร ดูสถานะรถคันอื่น หาตำแหน่งของต่างๆในสนามแข่ง (เช่นหาปั๊มน้ำมัน) และ โยนยางสำรองออกไป move() นั้นมีพารามิเตอร์สี่ตัว ซึ่งเป็นการบอกค่าต่างๆจาก cycle การทำงานรอบที่แล้ว ซึ่งพารามิเตอร์เหล่านี้บอกถึง: การใช้เวลาของเมธอด move() (หน่วยเป็น milliseconds) ในรอบการทำงานที่แล้ว รอบที่แล้วชนขอบสนามหรือเปล่า รอบที่แล้ว เราชนกับรถคันอื่นหรือเปล่า รอบที่แล้ว เราโดนยางขว้างโดนหรือเปล่า พารามิเตอร์ตัวแรกเป็น int ส่วนตัวที่สองเป็น boolean ตัวที่สามและสี่นั้นเป็น ICar (หรือเป็น null ถ้าไม่ได้ชนหรือโดนปา) พารามิเตอร์ตัวแรกจะใช้บอกได้ว่า โค้ดเรายาวเกินไป นานเกินไปหรือไม่ เพราะ ซิมูเลเตอร์ก็มีเวลาให้ move() จำกัดเหมือนกัน CodeRally Track Details สนามแข่งนั้นเป็นสองมิติ แกน x ยาว 1010 หน่วย ส่วนแกน y ยาว 580 หน่วย จุด (0,0) อยู่ซ้ายบนของจอ สนามมีผนังล้อมรอบ ซึ่งรถออกนอกผนังนี้ไม่ได้ ไม่มีผนังอยู่ข้างในสนามแต่อย่างใด รถสามารถเคลื่อนที่ไปไหนก็ได้ในสนาม ยกเว้นแต่ว่าชน หรือ ติดรถคันอื่น ออบเจ็กต์เคลื่อนที่ในทิศทางที่เรียกว่า headings ซึ่งวัดเป็นจำนวนเต็ม หน่วยเป็นองศา (0 องศา หมายถึง ตรงขึ้นข้างบน) องศานั้นมีค่าตั้งแต่ 0 ถึง 359 ค่าขององศาเพิ่มตามเข็มนาฬิกา
Figure 5 Simulated track world ในโลกของเกมนั้นมีสิ่งต่างๆดังต่อไปนี้: มีนาฬิกา ticking clock ซึ่งค่าของมันอ่านได้ด้วย getClockTicks() ในตอนเริ่มแข่งแต่ละนัด รถแต่ละคันจะมีน้ำมัน 100 หน่วยและยางเอาไว้ขว้าง 3 เส้น เมื่อเราเซ็ตพวงมาลัยและคันเร่ง รถจะเคลื่อนตามนั้นจนกว่าจะมีคำสั่งใหม่ (แม้ว่าจะเกิดการชนก็ตาม จะพยายามเคลื่อนที่ตามคำสั่งเดิมอยู่ดี นอกจากเราเขียนแก้) พวงมาลัยและคันเร่งเปลี่ยนค่าได้ทันที แต่ว่าความเร็วและทิศทางจะไม่เปลี่ยนในทันทีเพราะรถนั้นมีความเฉื่อย ค่าคันเร่งน้อยสุด (MIN_THROTTLE) คือ -50 และค่าคันเร่งมากสุด(MAX_THROTTLE) คือ 100 อัตราการเปลี่ยนความเร็ว(นับจากสภาพรถหยุด) คือ 8 หน่วยต่อ tick (ยกเว้นกรณีที่เกิดการชนกัน) ค่าหักพวงมาลัยน้อยที่สุด (MAX_STEER_LEFT) คือ -10 และค่าหักพวงมาลัยมากสุด (MAX_STEER_RIGHT) คือ 10 อัตราการเปลี่ยนทิศนั้นขึ้นกับความเร็วของรถ เราสามารถหาอัตรานี้ได้โดยใช้ getChangeInHeading() ตำแหน่งของรถ บนสนามแข่งนั้น เป็นจุด รถมีความยาว 60 หน่วย และกว้าง 40 หน่วย โดยตำแหน่งคือจุดกลางรถนั้นเอง เราถือว่า ยางที่ขว้างออกไป ชนรถ เมื่อตำแหน่งของมันอยู่ใกล้จุดกลางรถ 40 หน่วย หรือน้อยกว่า ยางที่ขว้างนั้น มีความเร็วคงที่ เท่ากับ 12 หน่วย/tick เมื่อชนกับรถหรือผนังแล้ว ยางจะหายไป จุดเช็คพอยต์ ที่เติมน้ำมัน และที่เติมยาง ไม่มีผลต่อยางที่ขว้างออกมา ยางที่ขว้างออกมาจะไม่มีวันชนกัน รถมีน้ำมันได้มากที่สุด 100 หน่วย รถมียางไว้ขว้างได้มากสุด 5 เส้น เมื่อตำแหน่งรถอยู่ใกล้ที่เติมน้ำมันเป็นระยะ 25 หน่วยหรือใกล้กว่า น้ำมันจะเพิ่มด้วยอัตรา 1 หน่วยต่อ clock tick จนเต็มถัง (ถ้ารถออกจากระยะไปแล้ว น้ำมันก็ไม่เพิ่ม) ในสนามแข่งจะมีที่เติมน้ำมันอยู่สามที่ ตำแหน่งจะเป็นการสุ่ม เมื่อรถอยู่ใกล้ที่เติมยางเป็นระยะ 25 หน่วยหรือใกล้กว่า (และรถมียางสำหรับขว้างน้อยกว่า 5 เส้น) รถจะเก็บยางด้วยอัตรา 1 เส้นต่อ 5 clock ticks ในสนามแข่งจะมีที่เติมยางอยู่ 3 ที่ ตำแหน่งของที่เติมยางจะเป็นการสุ่ม รถสามารถป้องกันตัวเองได้ด้วยการเข้า "protect mode" แปลงเป็นรถตำรวจ ซึ่งรถที่เข้าโหมดนี้นั้น จะกินน้ำมันสองเท่าของทั่วไป โหมดนี้นั้นจะคงอยู่ 50 clock tick ถ้ารถเราชนกับรถอีกคัน โมเม้นตั้มจะถ่ายถึงกัน รถที่ชนจะเสียน้ำมัน 10 หน่วย (ยกเว้นถ้ารถนั้นอยู่ใน protect mode) ถ้าเรายิงยางชนคันอื่น เราจะได้ 10 คะแนน ส่วนรถที่โดนยางจะน้ำมันลด 10 หน่วย เมธอด move() จะไม่ถูกเรียกไป 10 clock tick และรถจะถูกแรงยางพาให้เคลื่อนไปนิดหน่อย เราจะไม่ได้คะแนนถ้ารถที่โดนเราขว้างอยู่ใน protect mode รถที่อยู่ใน protect mode ก็จะไม่เป็นไร ไม่โดนแรงยางด้วย เมื่อขว้างยางไปแล้ว รถเราจะไม่สามารถโยนยางได้อีก 25 clock tick move() หนึ่งนั้น จำกัดเวลาได้แค่ 500 มิลลิวินาที ถ้าในช่วงเวลานี้ยังทำ move() ไม่เสร็จ เมธอด move() จะไม่ถูกเรียกอีกต่อไปในการแข่งนั้น รถคันนั้นจะคงค่าต่างๆที่ตั้งไว้ล่าสุด สำหรับจุดเช็คพอยต์นั้น รถเราจะได้ 2 คะแนนถ้าผ่านในระยะ 25 หน่วยจากเช็คพอยต์นั้น และถ้าเราไปยังเช็คพอยต์ต่อไป (ที่เลขต่อกัน) รถเราจะได้ 6 คะแนน ถ้ารถเราผ่านเช็คพอยต์เดิมสองที จะไม่ได้คะแนน ตารางคะแนนเป็นดังนี้ คะแนนในการแข่งนั้นคิดจากคะแนนรวม
General Information, Caveats, Constraints, and Restrictions Car ไม่สามารถมี constructor ได้ Car ห้ามใช้ static initialization block ในการ initialize โค้ดทั้งหมดต้องอยู่ในคลาส RallyCar Car ห้ามสร้าง thread เอง ห้ามปริ๊น ห้ามสร้างไฟล์ ห้ามทำ system function Car ใช้ System.out.println() เพื่อพิมพ์ลง Eclipse console ได้ แต่ว่าเวลาที่ใช้ก็นับเป็นส่วนหนึ่งของเวลา move() ด้วย อย่าลืมว่าฟังก์ชั่นพวกนี้ใช้เวลานาน ห้ามสร้างโค้ดที่จะทำลายระบบการแข่ง
Example RallyCar Code ข้างล่างเป็นตัวอย่างโค้ดของ move() เป็นโค้ดจากหลายๆส่วนนะ ไม่ใช่ move() อันเดียว โปรดสังเกตว่าโค้ดเหล่านี้เป็นตัวอย่างเท่านั้น เราสามารถเขียนโค้ดให้ดีกว่านี้อีกมากมายนัก /** * Go toward the first spare tire depot. */ public void move(int lastMoveTime, boolean hitWall, ICar collidedWithCar, ICar hitBySpareTire) { // pick a spare tire depot IObject st = getSpareTireDepot()[0]; // go toward the checkpoint int h = getHeadingTo(st); if (getHeading() > h) setSteeringSetting(MAX_STEER_LEFT); else setSteeringSetting(MAX_STEER_RIGHT); setThrottle(MAX_THROTTLE); } /** * Put the car in reverse for a few moves if you collide with another car. */ protected int wait; public void move(int lastMoveTime, boolean hitWall, ICar collidedWithCar, ICar hitBySpareTire) { if (collidedWithCar != null) wait = 10; if (wait > 0) setThrottle(MIN_THROTTLE); else setThrottle(MAX_THROTTLE); if (wait > 0) wait--; } CodeRally This Week (ลองทำให้ได้ตามนี้ดูสำหรับสัปดาห์แรกนี้) 1. ให้รถวิ่งตามเช็คพอยต์ 2. ให้หยุดเติมน้ำมันได้
To download goto http://www.alphaworks.ibm.com/tech/coderally
|
||||||||||