Categories
Programming Scratch

หลักการเขียนโปรแกรมใน Scratch ตอนที่ 3

Scratch ไม่ได้ใช้การเขียนโปรแกรมเชิงวัตถุ (Object oriented) อย่างจริงจัง แต่โปรเจก GravityBlocks สะท้อนการใช้หลักการเขียนโปรแกรมเชิงวัตถุอยู่บ้าง มาลองดูกัน

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

ขั้นแรกของการเขียนโปรแกรมเชิงวัตถุคือการสร้างต้นแบบหรือแผ่นพิมพ์เขียวของวัตถุ (class) ซึ่งประกอบด้วยคุณสมบัติหรือข้อมูล (properties, attributes, data แล้วแต่จะเรียก) ของวัตถุ และสิ่งที่มันสามารถทำได้ (function, method)

การเขียนโปรแกรมเชิงวัตถุใน Scratch ตัวละครหนึ่งตัวก็คือหนึ่งวัตถุ ดังนั้นข้อมูลพื้นฐานของวัตถุก็ได้จากตัวละคร เช่นชื่อตัวละคร เครื่องแต่งกาย เสียง ตำแหน่งบนเวที ทิศทางการเคลื่อนที่ ความสามารถในการหมุน การกลับทิศ นอกจากนั้นถ้าเราสร้างตัวแปรส่วนตัวก็เข้าข่ายเป็นข้อมูลของวัตถุ การเขียนสคริปต์ก็คือการเขียน method ให้กับวัตถุนั้นเอง

การสร้างบล็อกสีตัวแรกในโปรเจก GravityBlocks เป็นการสร้างต้นแบบ (class) ขึ้นมา นั้นก็คือ สร้างบล็อกที่มีสองสี สีบานเย็นเป็นแถบบางๆอยู่ด้านบน สีฟ้าอ่อนในส่วนที่เหลือของบล็อก ตำแหน่งของบล็อกบนเวที ส่วนการทำงานของบล็อก คือการเคลื่อนที่ลง การหยุดการเคลื่อนที่

เมื่อมีแผ่นพิมพ์เขียวแล้ว ก็สามารถสร้างวัตถุออกมาได้ (instantiation) อีกหลายๆตัว เช่นในโปรเจก GravityBlocks เราสร้างต้นแบบบล็อก (เป็นวัตถุด้วย) เฉพาะตัวแรกตัวเดียว จากนั้นทำซ้ำเพื่อสร้างบล็อกอื่นๆอีก 14 บล็อก

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


Categories
Scratch

เริ่มต้นสร้างแผงวงจร

ใน SimpleCircuit ก็มีใบคำสั่งไว้เพื่อให้ข้อมูลก่อนการแสดงการจำลอง มันจะหายไปเมื่อการจำลองเริ่มขึ้น สคริปต์ของใบคำสั่งนี้เพียงแค่ทำให้มันหายไปหลังจากคลิกธงเขียว เหมือนในโปรเจก GravityBlocks

แผงวงจรเป็นแบบอนุกรมง่ายๆ มีขั้วต่ออุปกรณ์ 3 แห่ง ตัวขั้วมีสีเหลืองกับสีฟ้าเพื่อใช้ในการเชื่อมต่อกับอุปกรณ์ แผงวงจรมี 2 รูปแบบ แบบปกติที่มีสีสันสวยงาม กับแบบที่เป็นสัญลักษณ์ทางไฟฟ้า สคริปต์ของแผงวงจรทำแค่สลับรูปแบบเมื่อผู้ใช้กด “space bar” โดยใช้บล็อกควบคุมถ้ามิฉะนั้น (if-else) ในการกำหนดการแสดงรูปแบบ นั้นก็คือถ้าผู้ใช้กด “space bar” ให้แสดงรูปแบบสัญลักษณ์ (Symbols) มิฉะนั้นแสดงรูปแบบสีสันปกติ (Blank Circuit)

เมื่อคลิกธงเขียว อุปกรณ์ทุกตัวต้องกำหนดขนาดเริ่มต้นเท่าของจริงก่อนด้วยบล็อกตั้งค่าขนาด (set size to) ทั้งนี้เพราะขนาดมีผลต่อการเชื่อมเข้าแผงวงจร อุปกรณ์ทุกตัวจะมาอยู่ตรงกลางแผงวงจรเพื่อให้ผู้ใช้นำมันไปวางในแผงวงจรเอง วิธีการหาตำแหน่งบนเวทีเพื่อใช้ในสคริปต์ทำได้โดยลากอุปกรณ์เช่นแบตเตอรี่ไปยังตำแหน่งที่ต้องการ จากนั้นสังเกตุตำแหน่ง x กับ y ในบริเวณข้อมูลของแบตเตอรี่ เอาค่า x กับ y ที่ปรากฏไปใช้ในบล็อกไปยัง (go to) สังเกตุตัวเลขที่ตรงกัน

สำหรับสคริปต์ของแบตเตอรี่ เหมือนกันกับฉากเวที ที่ทุกครั้งที่เรากด  “space bar” ให้แสดงรูปแบบสัญลักษณ์ของแบตเตอรี่ มิฉะนั้นแสดงรูปจริงแบตเตอรี่ แบตเตอรี่ยังถูกตรวจสอบด้วยว่าตัวมันเองเชื่อมต่อกับแผงวงจรหรือยัง โดยตรวจดูว่าตัวมันสัมผัสกับสีเหลืองและสีฟ้า (สีของขั้วในแผงวงจร) หรือยัง ถ้าใช่ให้ตั้งค่าตัวแปร “battconnected” เท่ากับ 1 ถ้ายังให้ตั้งค่าเป็น 0 ทั้งนี้เพื่อเช็คการครบวงจรนั้นเอง

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