1st Cubic Robocode Camp

เริ่มโพสต์โดย ยุนเอ, 18 ก.ย. 2007, 10:41 น.

0 สมาชิก และ 1 บุคคลทั่วไป กำลังเปิดอ่านโพสต์นี้

น้องเฟรม

#15
2. Code
อันดับแรก ใครที่เคยเขียนภาษาอะไรก็ตาม ก็น่าจะพอจับจุดไปได้บ้าง แต่ใครที่ไม่เป็นผมจะพยายามสื่อสารครับ

หลังจากที่เราสร้างหุ่นยนต์ใหม่เสร็จแล้ว มันจะมี Code พื้นฐานให้เราไว้แล้วครับ มาดูกันว่ามีอะไรบ้าง (คลิกดูภาพใหญ่แล้วกันนะครับ)



หลังจากที่เราทราบแล้วว่า Code ส่วนไหน ทำหน้าที่อะไร เรามาดูฟังก์ชั่นที่เราไว้ใช้แก้ไข Code กันดีกว่า
ฟังก์ชั่นพื้นฐาน
ขออธิบายครับ ฟังก์ชั่นไหนที่มี Left จะมี Right ด้วยเสมอ แล้วแต่จะพลิกแพลงครับ
ahead(x);
เดินตรงไปข้างหน้า x หน่วย (ตัวเลข)

back(x);
ถอยหลัง x หน่วย (ตัวเลข)

turnLeft(x);
เลี้ยวซ้าย x องศา

turnRight(x);
เลี้ยวขวา x องศา

turnGunRight(x);
หมุนปืนไปทางขวา x องศา

ปกติแล้วการหมุนปืน ปืนมันจะพาเรดาร์ ไปด้วยเสมอ การหมุนปืน 1 ครั้ง ก็แทบว่าไม่ต้องสั่งให้เรดาร์หมุนตามเลย

turnRadarLeft(x);
หมุนเรดาร์ไปทางซ้าย x องศา
// อธิบายเพิ่มเติม
ที่ต้องหมุนก็เพราะว่า Radar มันจะไม่มีวันเจอศัตรู และเข้าเหตุการณ์ onScannedRobot ไม่ได้ (เหตุการณ์เมื่อเจอศัตรูแล้วให้ทำอะไร)
ส่วนมาก turnRadarLeft(x); จะไปอยู่ตรงคำสั่ง void Run (ดูรูปภาพข้างบนประกอบ) เพราะชุดคำสั่งนั้น มันเป็นเหตุการณ์ที่วนอยู่ตลอด
ทำให้ เมื่อหุ่นยนต์มันไม่เจออะไร มันก็จะไปหมุนเรดาร์จนกว่าจะเจอ

เทคนิคพิเศษ
- ถ้าเราตั้งค่าของ turnRadar ไว้น้อยๆ มันจะ Scan ได้แม่นยำ และยิงค่อนข้างแม่นด้วย ซึ่งค่ามันก็มีตั้งแต่ 0-360 ครับ

fire(x);

ยิงปืนด้วยความแรงเท่าไร มีขนาด 0-3 แต่อย่าลืมว่า หุ่นยนต์ทุกตัวมีพลังงาน ถ้าหุ่นยนต์ยิงไปด้วยความแรง 3 มันก็จะลด 3 ถ้ายิงโดน มันก็จะเพิ่มพลังงานให้

ตอนนี้พอทราบกันเบื้องต้นครับ คือ Code พื้นฐาน ลองไปประยุกต์ปรับแต่ง Code เดิมกันได้เลยครับ ที่สำคัญ อย่าลืมครับว่า ใช้ฟังก์ชั่นอะไร
อย่าลืมปิดท้ายด้วย ; (เซมิโคล่อน) เสมอครับ

// เพิ่มเติมครับ การที่จะ Save และคอมไพล์ Code ของเรา สามารถทำได้ โดยการกดปุ่ม F6 ครับ
:27: ลืมจริงๆ

พบกันในหัวข้อที่ 3 เรื่องของ IF , ELSE การตัดสินใจของหุ่นยนต์ครับ ช่วงหน้า ห้ามพลาด !!

โตน


อ่ะ เอา doc มาแปะไว้ก่อน
http://robocode.sourceforge.net/docs/robocode/
:27:
E entao pergunta Se eu estou em paz E eu digo sim, i feel wonderful tonight

ยุนเอ



ใครสนใจมาแข่งกัน ลงชื่อไว้เลยน้า  :27:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

น้องเฟรม

3. IF , ELSE การตัดสินใจของหุ่นยนต์

แน่นอนครับว่า การทำงานของหุ่นยนต์ นอกจากจะให้มันยิงๆ อย่างเดียวแล้ว คงให้มันตัดสินใจกันบ้างครับ

IF มักจะเห็นทั่วๆไป ในหมู่ของนักเขียนโปรแกรม มันแปลว่า ถ้า

ตัวอย่างสถานการณ์
ถ้า(หุ่นยนต์พลังงานน้อยกว่า 20){
ให้ยิงปืนด้วยความแรง(2);
}

เทียบคำสั่งกับของจริง
if(getEnergy()<20){
fire(2);
}

จากสถานการณ์ข้างต้น น่าจะพอทราบกันแล้วใช่ไหมครับว่า เราจะหากินกับเจ้า IF ได้อย่างไรบ้าง แล้วเราก็ได้รู้คำสั่งใหม่ครับ ที่ไว้ใช้ตรวจพลังงานของเรา
นั่นคือ getEnergy() มันเป็นชุดคำสั่งครับ เราจึงต้องใส่ () ต่อท้าย ลองไปทำเล่นดูกับ Code คุณครับ

โครงสร้างของชุดคำสั่ง IF คือ
if(เหตุการณ์){
คำสั่งที่ให้กระทำเมื่อ[b]เหตุการณ์เป็นจริง[/b];
}

หากมีหลายตัวเลือก เช่น คุณจะทำ Code ที่
ถ้าหุ่นยนต์พลังน้อยกว่า 90 ให้ยิงปืนความแรง 2.5 ถ้าหุ่นยนต์พลังงานน้อยกว่า 60 ให้ยิงความแรง 2 ถ้าต่ำกว่า 40 ให้ยิง 1 และถ้านอกเหนือจากนั้นให้ยิงความแรง 0.5
ให้ลองดูจาก Code ข้างล่างนี้ครับ
if(getEnergy()<90){
fire(2.5);
}else if(getEnergy()<60){
fire(2);
}else if(getEnergy()<40){
fire(1);
}else{
fire(0.5);
}


พอจะเห็นการทำงานของมันหรือยังครับ สังเกตว่ามันมี ELSE เข้าไปเกี่ยวข้องด้วย
เราอาจจะไปประยุกต์ได้หลายอย่างนะครับ เช่นใช้ชุดคำสั่ง getOthers() ที่ดูจำนวนศัตรูที่เหลือในสนาม เช่น
if(getOthers()<3){
turnGunLeft(5);
}

จากกรณีข้างต้นคือ
ถ้าศัตรู เหลือน้อยกว่า 3 ให้สแกนโดยการหมุนปืนให้มันช้าๆลง

หวังว่าคงเข้าใจนะครับ สำหรับเรื่องนี้ จากนั้นก็ลองทดสอบกันได้เลยครับ

บทต่อไปคงเป็นเรื่องเกี่ยวกับฟังก์ชั่นใหม่ๆ ที่ให้เราเลือกใช้ การใช้ทิศทางของตัวเราให้เกิดประโยชน์ , คำสั่งที่วัดระยะทางห่างระหว่างเรากับศัตรู ฯลฯ ห้ามพลาดครับ  !!

ตอนนี้ผมขอตัวไปอ่านหนังสือก่อนครับ เดี๋ยวสอบตก  :42:

ยุนเอ



เฟรมเอาพวกเทคนิคในเกมส์ต่างๆ มาฝากด้วยนะ ส่วน coding เนี้ย

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

โตน



คุณ Fake สอนผมด้วยนะครับ :25b:
E entao pergunta Se eu estou em paz E eu digo sim, i feel wonderful tonight

HyoPlum

พี่ไม่รู้เรื่องเลย น้องโตนมาสอนพี่หน่อยที่บ้านนะ  :25:

แอร๊ยยยยยย  :25:
ความสวยไม่รับประกัน แต่ความมันเดี๊ยนรับรอง

ยุนเอ



มาเขียน AI กันเถอะ  :25:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

โตน



เล่นแล้ว  เฮ่ยย หนุกๆๆๆ :04:
E entao pergunta Se eu estou em paz E eu digo sim, i feel wonderful tonight

น้องเฟรม

กำหนดการ การปล่อยบทความ Robocode
- เทคนิคพิเศษ ในการเล่น
- ทิศทางของหุ่นยนต์ (Bearing , Heading)
- A synchronize movements (การกระทำเหตุการณ์หลายๆอย่างพร้อมกัน เช่น ตรงไปแล้วเลี้ยวซ้ายด้วย)
- ตัวอย่างโค้ดเทพๆ

กิจกรรม โฟร์ทรอโบคอนต์ (ฟอนต์โรโบโค้ด) อยากให้ทำครับ ส่งโค้ดกันทุกศุกร์ ให้ยักษ์หาของรางวัล(ยศ หรืออะไรก็ได้ ที่ไม่ต้องเสียเงิน เอาของที่มีอยู่มาใช้ให้เกิดประโยชน์  :27:)

- เป็นกิจกรรมที่ฝีกการแก้ปัญหา
- คนจะเขียนโปรแกรมกันมากขึ้น
- สนุก

หาเครื่องแม่ อาจจะเป็นเครื่องยักษ์ในการรันโค้ด แล้วก็ให้ยักษ์เอา Score มาขึ้นไว้ ใน Robocode จะมี สังเกตตอนเล่นเสร็จมันจะมีให้ Save Log อยู่ ดังนั้น ก็เอาตรงนั้นล่ะมาแสดง

ถ้าสนใจโครงการ ผมจะทยอยเอาบทความมาลงแล้วให้ทุกคนมี Code เป็นของตัวเองครับ
และถ้ากระแสดีจริงๆ ผมจะเปิดเว็บ Robocode  :43:

REROYD

อ๊ะ.......... :25: เพิ่งเห็นจู๋นี้....เล่นด้วนคนครับ น่าจะช่วยประเทืองปัญญาเรื่องภาษาจาวาที่จะเรียนในเทอมหน้าด้วย  :40:


ป.ล. ถ้าบวกได้บวกให้ไปแล้วนะเนี่ย  :25:

น้องเฟรม

อ้าว !! ลงชื่อครับ เดี๋ยวเฟรมแข่งด้วย กำหนดการเอาให้ได้สัก 20 คน (ไหวไหม :44:) แล้วแบ่งสายเจอกันดีกว่า 20 คัดเอา 10

ตอนนี้เท่าที่เห็นมี
^-FakE-^
doyrer
น้องเฟรม

ใครสนใจก็เริ่มได้ครับ เดี๋ยวให้พี่แอนมาดูอีกทีหนึ่ง ว่าจะเอาแบบจริงจังแค่ไหน  :34:

ยุนเอ


ตอนนี้จัดให้ได้ สิบคนก็เก่งแล้วครับ  :30:

แต่เราต้องเริ่มครับ เพื่ออนาคตโอเพนซอร์ส  :12:

(ไม่ได้เกี่ยวเล๊ย)
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

น้องเฟรม

10 คนก็ได้  :11:

เป็นอันว่าผมจะรอพี่แอนมาเจิมโครงการอีกทีหนึ่งครับ ระหว่างนี้จะทยอยทำบทความให้ ขอให้ผ่านสอบพรุ่งนี้ไปก่อนครับ

เดี๋ยวผมลุยให้  :12:

iannnnn


SMF 2.1.7 © 2026, Simple Machines