Categories
Programming Scratch

Mario ใน Scratch

เกม Mario เป็นเกมที่ดังมาก การจะทำเกมให้เหมือน Mario ในโปรแกรม Scratch คงใช้เวลาเอาเรื่องเลย แต่มาลองดูการทำตัวละครใน Scratch ให้เคลื่อนที่คล้ายในเกม Mario

ก่อนอื่นดูคลิปนี้เป็นแนวทาง

ในวีดีโอนี้ MrMattperreault อธิบายการสร้างตัวละครแมว ให้เคลื่อนที่ในแนวดิ่งตามแรงโน้มถ่วง (gravity) และแมวยังเด้งได้เมื่อกระทบพื้นและกระโดดได้เมื่อกด space bar นอกจากนั้นแมวยังเคลื่อนที่ในแนวราบแบบมีแรงต้านหรือแรงเสียดทานได้อีก วิธีการเขียนโปรแกรมโดยสรุปจากวีดีโอมีดังนี้

การเคลื่อนที่ในแนวดิ่ง

  • สร้างพื้นสีฟ้า เพื่อให้แมวตกลงมาแล้วหยุดหรือเด้งได้
  • สร้างตัวแปร gravity มีแรงดึงลง ดังนั้นกำหนดค่าให้เป็น -0.3
  • สร้างตัวแปร velocity เป็นตัวกำหนดความเร็วในแนวดิ่ง กำหนดค่าเริ่มต้นที่ 0 หมายความว่า แมวอยู่กับที่
  • การทำให้แมวเคลื่อนที่ในแนวดิ่ง ตกสู่พื้นหรือเด้งขึ้น ต้องเปลี่ยนความเร็วตามแรงโน้มถ่วง ดังนั้นกำหนดค่า velocity ใหม่เป็น velocity + gravity จากนั้นเปลี่ยนค่าตำแหน่ง y ตามค่า velocity เป็น y + velocity เนื่องจาก gravity มีค่าเป็นลบ จะทำให้แมวเคลื่อนที่ลงหรือตกสู่พื้นสีฟ้า
  • ถ้าต้องการให้แมวเด้งขึ้นเมื่อกระทบพื้น ต้องตรวจสอบการสัมผัสพื้นก่อน จากนั้นเปลี่ยนทิศของการเคลื่อนที่ ที่ขึ้นกับค่าของ velocity ซึ่งก่อนหน้าจะกระทบพื้น velocity มีค่าเป็นลบ (เคลื่อนที่ลง) ดังนั้นเปลี่ยนทิศได้ด้วยการคูณ -1 กับ velocity เพื่อให้ velocity มีค่าเป็นบวก (เคลื่อนที่ขึ้น)
  • แมวจะเด้งขึ้นลงไปเรื่อยๆ ไม่มีวันจบ ในความสูงระดับหนึ่ง เพื่อให้แมวเด้งขึ้นลงในระดับความสูงที่ลดลงในแต่ละครั้งของการเด้ง ต้องลดค่า velocity อย่างรวดเร็วด้วยการหาร ดังนั้นกำหนดค่าใหม่ให้ velocity เป็น velocity / 5
  • เพื่อให้แมวหยุดเด้งขึ้นลง ต้องสร้างตัวแปร Bounce count ขึ้นมาเพื่อนับจำนวนการเด้ง โดยกำหนดค่าเริ่มต้นเป็น 0 ทุกครั้งที่แมวเด้ง เพิ่มค่านี้ทีละ 1 เมื่อได้จำนวนการเด้งตามที่ต้องการ ก็กำหนดให้ velocity เป็น 0 เพื่อให้แมวหยุดการเคลื่อนที่ในแนวดิ่ง
  • การทำให้แมวกระโดดได้จากพื้น เมื่อกด space bar ทำได้โดยตรวจสอบก่อนว่าแมวอยู่ที่พื้นหรือยัง จากนั้นกำหนดค่าใหม่ให้ตัวแปร Bounce count เป็น 0 (ตอนนี้ยังไม่มีการเด้ง) และกำหนดค่าความเร็วตอนเริ่มกระโดดในตัวแปร velocity เป็น 6 แมวก็จะกระโดดขึ้นได้

การเคลื่อนที่ในแนวนอน

  • การเคลื่อนที่ในแนวนอน เกิดจากการกดคีย์ลูกศรซ้ายขวา
  • สร้างตัวแปร HorzVelocity เป็นตัวกำหนดความเร็วในแนวนอน
  • เมื่อกดคีย์ลูกศรซ้าย กำหนดค่า HorzVelocity เป็น -3 เมื่อกดคีย์ลูกศรขวากำหนดค่า HorzVelocity เป็น 3 จากนั้นเปลี่ยนค่าตำแหน่ง x ตามค่าใน HorzVelocity ดังนั้นแมวจะเคลื่อนที่ซ้ายขวาได้เมื่อกดคีย์ลูกศรซ้ายขวา
  • สุดท้าย การทำให้แมวลดความเร็วลงในแนวราบเสมือนว่ามีแรงเสียดทานที่พื้น ทำได้โดยตรวจสอบว่า เมื่อคีย์ลูกศรไม่ได้ถูกกดแล้ว ก็กำหนดค่า HorzVelocity ด้วยค่าใหม่เท่ากับ HorzVelocity  คูณ 0.92 (ความเร็วใหม่เท่ากับ 92% ของความเร็วเดิม) จะทำให้ความเร็วในแนวราบค่อยๆ ลดลงเอง