Hello World version 2 ตอนที่ 2

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

เพื่อไม่ให้เป็นการเสียเวลาเรามาเริ่มทำให้เจ้าเหมียวเดินกันเลยดีกว่าครับ ในการจะทำให้เจ้าเหมียวเคลื่อนที่นั้นเราจะมาใช้คำสั่ง Move ที่อยู่ในกรุ๊ป Motion กันครับ

move-instruction
คำสั่ง Move

ให้เราลากคำสั่ง Move ไปไว้บนส่วน Code ของเจ้าเหมียวเพื่อเป็นการบอกให้เจ้าเหมียวทำการเดินไปข้างหน้า 10 ก้าว เราจะมาพูดถึงเรื่อง coordinates X กับ Y กันในบทความต่อๆไปนะครับ ณ ตอนนี้ให้เราจำไว้ก่อนว่าถ้าเราสั่งให้ Move เป็นค่ามากกว่า 0 เจ้าเหมียวจะเคลื่อนที่ไปทางขวา แต่ถ้าเราสั่งให้ Move ด้วยค่าน้อยกว่า 0 เจ้าเหมียวจะเคลื่อนที่ไปทางซ้าย ถ้าเราใส่ค่ายิ่งมากเจ้าเหมียวก็จะเคลื่อนไหวยิ่งไกล ในส่วนนี้ให้ผู้อ่านทดลองปรับค่าดูเพื่อให้เห็นความแตกต่างครับ แต่ในบทความเราจะใช้ Move 10 steps

Add move instruction
เพิ่มคำสั่ง move ให้เจ้าเหมียว

เมื่อเราลองรันคำสั่งดูเราจะเห็นว่าเจ้าเหมียวขยับเพียงแค่นิดเดียวเพราะเราสั่งให้มันขยับเพียงแค่ 10 ก้าว แต่สิ่งที่เราต้องการคือให้เจ้าเหมียวขยับไปจนสุดจอ แต่ถ้าเราปรับค่าการ move จาก 10 เป็น 100 การเคลื่อนที่ของเจ้าเหมียวจะกลายเป็นการวาร์ปมากกว่าการเดิน ดังนั้นเพื่อจะทำให้เจ้าเหมียวเคลื่อนที่เหมือนการเดินเราจะใช้คำสั่ง repeat กัน คำสั่ง repeat ก็คือคำสั่งที่บอกให้ object (ในที่นี้คือเจ้าเหมียว) ทำคำสั่งหรือกลุ่มคำสั่งซ้ำๆ โดยคำสั่ง repeat จะอยู่ภายในกลุ่มคำสั่ง Control ถ้าสมมติเราใช้คำสั่ง repeat 10 ครอบคำสั่ง move 10 ก็จะทำให้เจ้าเหมียวเคลื่อนที่จะ 10 ก้าว เป็นจำนวน 10 รอบ ดังนั้นเจ้าเหมียวจะเคลื่อนที่ทั้งหมด 100 ก้าว เมื่อทำแบบนี้ เราจะเห็นเจ้าเหมียวค่อยขยับไปทีละ 10 ก้าวจนครบ 100 ก้าว ซึ่งต่างจาก การที่เราใช้คำสั่ง move 100 ซึ่งจะทำให้เจ้าเหมียวดูเหมือนหายตัวไปอีกจุดนึงเลย!

repeat-menu
คำสั่ง repeat

แต่สิ่งที่เราต้องการคือสั่งให้เจ้าเหมียวเคลื่อนที่ไปจนสุดจอด้านขวา ดังนั้นเราจะใช้คำสั่ง repeat until แทน คำสั่ง repeat until จะเป็นการบอกให้ทำคำสั่งหรือกลุ่มคำสั่งที่มันครอบอยู่ซ้ำไปเรื่อยจนกระทั่งเงื่อนไขที่กำหนดไว้เป็นจริง จึงให้หยุด ในกรณีนี้เราจะให้เจ้าเหมียวเคลื่อนไปจนสุดจอด้านขวา ดังนั้นเราจะเช็คเงื่อนไขว่าเจ้าเหมียวมี position x มากกว่าหรือเท่ากับ 240 หรือไม่ (เราจะมาเรียนเรื่อง แกน x แกน y กันในบทความถัดๆไป ในตอนนี้ให้เราเข้าใจไว้ว่า สุดขอบด้านซ้ายจะมีค่า x ประมาณ -240 ส่วนสุดขอบด้านขวาจะมีค่า x ประมาณ 240)

logical-operator
Logical Operator

ในการจะใส่เงื่อนไขให้ repeat until เราจะใช้ Logical operator ด้านล่างนี้ โดยเราจะเช็คเงื่อนไขว่าเมื่อ x มีค่ามากกว่า 250 เราสามารถหาค่า x ของเจ้าเหมียวได้จากคำสั่ง x position ที่อยู่ในกลุ่มคำสั่ง Motion

position-menu
คำสั่ง x position

เมื่อเรานำความรู้ข้างบนมาประกอบกัน เราก็จะได้คำสั่งดังรูปข้างล่าง ซึ่งเมื่อเราลองกดดูก็จะพบว่าเจ้าเหมียวจะเคลื่อนที่ไปจนสุดจอ

move-until-offscreen
เคลื่อนที่ไปจนสุดจอ

ปัญหาที่เราเจอต่อมาก็คือ เมื่อเดินไปสุดจอแล้วเราจะทำยังไงให้เจ้าเหมียวเริ่มต้นกลับมาที่จุดตั้งต้นใหม่ได้ละ!!? คำตอบก็คือเราสามารถใช้คำสั่ง go to หรือ set x ได้ ความต่างคือ คำสั่ง go to จะใช้กำหนดทั้งค่าแกน x และ y ในขณะที่คำสั่ง set x ใช้กำหนดค่า x เท่านั้น ในกรณีนี้เราจะใช้คำสั่ง set x กัน โดยเราจะกำหนดเป็นจุดเริ่มต้นของการเดินทางของเจ้าเหมียวว่าให้ x = -200

set-x-to
set x to

เมื่อเราเอาทั้งหมดมารวมกัน เราจะเขียนโค้ดได้ตามรูปข้างล่างซึ่งก็จะทำให้เจ้าเหมียวของเราเดินทางข้ามน้ำข้ามทะเลไปยังประเทศต่างๆ แล้วกลับมาที่ประเทศไทยอีกครั้งได้อย่างปลอดภัย ฟิ้ววว!

v2-full-code
โค้ดสุดท้่ายของ Hello World Version 2

เรามาลองสรุปสิ่งที่เราได้เรียนรู้กันในบทความนี้ดูครับ

  • เราได้เรียนรู้การใช้ repeat และ repeat until
  • เราได้เรียนรู้การใช้คำสั่ง move
  • เราได้เรียนรู้ว่าด้านซ้ายสุดของ screen มีค่า x ประมาณ -250 และด้านขวาสุดมีค่า x ประมาณ 250
  • เราได้เรียนวิธีการใช้ set x to
  • เราได้เรียนการใช้ logical operator เพื่อกำหนดเงื่อนไขใน repeat until

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