บทที่ 2: การเขียนโปรแกรมคาเรล


วิธีการที่ง่ายที่สุดที่ใช้ในการโปรแกรมหุ่นยนต์คาเรลคือใช้ข้อความในการระบุลำดับของคำสั่งที่ต้องการให้หุ่นยนต์ทำงาน จากภาพโปรแกรมของคาเรลข้างล่าง ข้อความทางด้านซ้ายคือตัวโปรแกรมที่ใช้ควบคุมคาเรล ส่วนภาพทางด้านขวาคือโลกของคาเรลที่กำลังทำงาน

กดปุ่ม "Run" เพื่อสั่งโปรแกรมทำงาน โดยทั่วไปโปรแกรมจะเขียนในแอปพลิเคชันพิเศษที่เรียกว่า Integrated Development Enviroment (IDE) และโปรแกรม Karel ส่วนใหญ่เขียนใน IDE ที่เรียกว่า PyCharm เช่นเดียวกับ IDE นี้ ซึ่งจะช่วยให้ผู้อ่านนี้มีความสามารถในการใช้งานโปรแกรมเพื่อช่วยให้เห็นว่าสิ่งต่าง ๆ ทำงานอย่างไรในขณะที่คุณเรียนรู้

โครงสร้างของโปรแกรมสามารถแบ่งได้เป็นหลายส่วน จากตัวอย่างโปรแกรมข้างบนนั้น ส่วนแรกของโปรแกรม ประกอบไปด้วยบรรทัดดังต่อไปนี้:

# File: FirstKarel.py
# -----------------------------
# The FirstKarel program defines a "main" 
# function with three commands. These commands cause  
# Karel to move forward one block, pick up a beeper
# and then move ahead to the next corner.

บรรทัดกลุ่มนี้คือคอมเมนต์ comment เป็นส่วนที่ผู้เขียนโปรแกรม มักจะใช้เขียนอธิบายเกี่ยวกับรายละเอียดของโปรแกรมแบบคร่าวๆ ไม่ได้มีผลกับการทำงานของโปรแกรม เนื่องจากโปรแกรมคาเรลนี้ ถูกพัฒนาด้วยภาษาไพธอน (Python) การใช้เครื่องหมาย # นำหน้า จะทำให้ข้อความที่ตามหลังเครื่องหมายนี้ ไม่ถูกนำไปประมวลผล จากข้อความในคอมเมนต์ตัวอย่างนี้ ทำให้รู้ว่าชื่อของโปรแกรมนี้คือ FirstKarel

from karel.stanford import *

บรรทัดนี้จะเป็นการบอก IDE ให้เรียกใช้คำสั่งต่างๆ ที่อยู่ในไลบราลี karel.stanford ซึ่งเป็นที่เก็บคำสั่งต่างๆ ทั้งหมดที่ใช้ควบคุมการทำงานของหุ่นยนต์คาเรล

ส่วนสุดท้ายของโปรแกรม Karel ประกอบด้วยคำนิยามฟังก์ชั่น ดังต่อไปนี้:

   def main():
      move()
      pick_beeper()
      move()

ซึ่งส่วนสุดท้ายของโปรแกรมนี้ เป็นส่วนที่ใช้เรียงลำดับคำสั่งต่างๆ สำหรับการทำงานของโปรแกรมที่ชื่อ FirstKarel ในหนึ่งโปรแกรมนั้น สามารถรวมคำสั่งหลายๆ คำสั่งไว้เป็นฟังก์ชัน โดยฟังก์ชันแรกที่ IDE จะเริ่มทำงาน จะใช้ชื่อว่า main และจะใช้คำว่า def ที่ย่อมาจากคำว่า define ในการประกาศชื่อฟังก์ชัน

   def main():
body of the function definition

ส่วนข้อความที่อยู่ด้านล่างของการประกาศฟังก์ชัน จะต้องทำการย่อหน้าด้วยการกดปุ่มเว้นวรรค (Spacebar) และทุกๆ คำสั่งที่อยู่ภายในการประกาศฟังก์ชันนี้ จะต้องเรียงให้ตรงกัน โปรแกรม IDE ถึงจะสามารถสั่งให้หุ่นยนต์ทำงานได้อย่างถูกต้อง จากตัวอย่างโปรแกรม FirstKarel หุ่นยนต์ถูกโปรแกรมให้เดินหน้า - หยิบเหรียญ - เดินหน้า แล้วสิ้นสุดการทำงาน

   move()
   pick_beeper()
   move()

ดังนั้นหากกำหนดระดับเริ่มต้นของโลกตรงกับตัวอย่างที่ให้ไว้ใน บทที่ 1, Karel เริ่มเคลื่อนที่ครั้งแรกย้ายไปข้างหน้าในมุมที่มีเหรียญ และหยิบเหรียญนั้น ในท้ายที่สุดก็ย้ายไปที่มุมผนังดังแสดงในแผนภาพก่อนและหลัง:

Before:
After:

การปรับแต่งให้หุ่นยนต์ทำงานอย่างอื่นเพิ่มเติม

โปรแกรม FirstKarel ที่กำหนดไว้ข้างต้นนั้น แค่ทำให้รู้ว่าหุ่นยนต์สามารถทำงานได้ ถ้ากำหนดโจทย์ให้คาเรลทำการหยิบเหรียญจากตำแหน่งพิกัด (2, 1) ไปวางที่ตำแหน่งพิกัด (5, 2) ก็ต้องทำการเขียนโปรแกรมเพิ่มเติมเพื่อควบคุมหุ่นยนต์คาเรลให้ไปวางเหรียญตามที่่กำหนด

Before:
After:

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

   move()
   pick_beeper()
   move()

ซึ่งสามารถระบุคำสั่งต่อจากบรรทัดสุดท้ายในฟังก์ชัน main ได้


บทถัดไป