Construct 2 : สร้างด่านของเกมเขาวงกต ด้วยคำสั่ง for loop

วันนี้เราจะมาเรียนรู้การสร้างด่านของเกมเขาวงกตแบบไม่มีที่สิ้นสุด โดยใช้คำสั่งวนซ้ำ for ในแนวแกน x และแกน y ด้วยการสุ่มตำแหน่งและจำนวนวัตถุที่สร้าง มาลองทำกันเลยครับ

1. เปิดงานใหม่ขึ้นมา ตั้งค่าของวินโดวน์และเลย์เอาต์ ที่ขนาดความกว้าง 1280 และความสูง 768 พิกเซล

2. เพิ่มสไปรท์ 3 ตัว ลงบนเลย์เอาต์ดังนี้

  • block ขนาด 40 x 40 px
  • door ขนาด 40 x 40 px
  • key ขนาด 40 x 40 px

ทั้งสามตัวตั้งค่าจุด Origin ไว้ที่ Middle

3. ที่สไปรท์ block เพิ่มตัวแปรภายใน (Instance variable) ดังนี้

  • ตัวแปรชื่อ Position เป็นตัวแปรประเภท Text ตั้งค่าเริ่มต้นไว้ที่ว่าง
  • ตัวแปรชื่อ Created เป็นตัวแปรประเภท Boolean ตั้งค่าเริ่มต้นที่ false

4. เพิ่ม Function ลงในโปรเจ็ค

5. เปิดหน้า Event Sheets ขึ้นมา เพิ่มตัวแปรหลัก (Global variable) 3 ตัว ดังนี้

  • ตัวแปรชนิด Number ชื่อ rows ตั้งค่าเริ่มต้นที่ 17 (กำหนดจำนวนของวัตถุแนวแกน Y )
  • ตัวแปรชนิด Number ชื่อ columns ตั้งค่าเริ่มต้นที่ 31 (กำหนดจำนวนของวัตถุแนวแกน X)
  • ตัวแปรชนิด Number ชื่อ gap ตั้งค่าเริ่มต้นที่ -10 (กำหนดช่องว่างของกำแพง)

6. กำหนดเหตุการณ์เมื่อเริ่มต้น เลย์เอาต์

  • Add event > System > On start of layout
    • Add action > block > Destroy
    • Add action > key > Destroy
    • Add action > Function > Call function
      > Name = “Maze”
  • Add event > Function > On function
    > Name = “Maze”
  • คลิกขวาที่อีเวนต์ 2 Add sub event > System > for
    > Name = “x”
    > Start index = 1
    > End index = columns
  • คลิกขวาที่อีเวนต์ 3 Add sub event > System > Compare two variable
    > First value = loopindex
    > Comparison = not equal to
    > Second value = columns
  • คลิกขวาที่อีเวนต์ 4 Add another condition > System > Compare two variable
    > First value = loopindex
    > Comparison = not equal to
    > Second value = 1
  • คลิกขวาที่อีเวนต์ 4 Add blank sub-event
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = loopindex(“x”)*40
      > Y = 40
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = loopindex(“x”)*40
      > Y = 40*rows
    • Add action >block > Set boolean
      > Instance variable = Created
      > Value = True
    • Add action >block > Set vale
      > Variable = Position
      > Value = “bottom”
  • คลิกขวาที่อีเวนต์ 4 > Add > Else
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = loopindex(“x”)*40
      > Y = 40
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = loopindex(“x”)*40
      > Y = 40*rows
  • คลิกขวาที่อีเวนต์ 2 Add sub event > System > for
    > Name = “y”
    > Start index = 2
    > End index = rows-1
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = 40
      > Y = loopindex(“y”)*40
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = 40*columns
      > Y = loopindex(“y”)*40
    • Add action >block > Set boolean
      > Instance variable = Created
      > Value = True
    • Add action >block > Set vale
      > Variable = Position
      > Value = “right”
  • ที่อีเวนต์ 2 คลิกขวา Add sub event > System > for
    > Name = “x”
    > Start index = 3
    > End index = columns-2
  • ที่อีเวนต์ 8 คลิกขวา Add sub event > System > for
    > Name = “y”
    > Start index = 3
    > End index = rows- 2
  • ที่อีเวนต์ 9 Add local variable ขื่อ rand ชนิด number ตั้งค่าเริ่มต้นเป็น 0
  • ที่อีเวนต์ 9 คลิกขวา Add sub event > System > Compare two variable
    > First value = loopindex(“x”)%2
    > Comparison = Equal to
    > Second value = 1
  • ที่อีเวนต์ 10 คลิกขวา Add another condition > System > Compare two variable
    > First value = loopindex(“y”)%2
    > Comparison = Equal to
    > Second value = 1
  • ที่อีเวนต์ 10 คลิกขวา Add another condition > System > Compare two variable
    > First value = random(10)
    > Comparison = Greater than
    > Second value = gap
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = loopindex(“x”)*40
      > Y = loopindex(“y”)*40
    • Add action >block > Set value
      > Variable = rand
      > Value = round(random(0,4))
    • Add action > System > Create object
      > Object to create = block
      > Layer = 0
      > X = (loopindex(“x”)40)+(40(rand=0))-(40*(rand=2))
      > Y = (loopindex(“y”)40)+(40(rand=1))-(40*(rand=3))

  • ที่อีเวนต์ 2 คลิกขวา Add blank sub-event
    • Add action > System > Create object
      > Object to create = key
      > Layer = 0
      > X = round(random(columns/2,columns))*40
      > Y = round(random(1,rows))*40
  • Add event > key > Is overlapping another object
    > Object = block
    • Add action > key > Destroy
    • Add action > System > Create object
      > Object to create = key
      > Layer = 0
      > X = round(random(columns/2,columns))*40
      > Y = round(random(1,rows))*40
  • Add event > block > Is boolean instance variable set
    > Instance variable = Created
  • ที่อีเวนต์ 13 คลิกขวา Add sub-event > System > Pick by comparison
    • Add action > block > Set boolean
      > Object = block
      > Expression = block.Position
      > Comparison = Equal to
      > Value = choose(“right”,”bottom”)
  • ที่อีเวนต์ 15 คลิกขวา Add another condition > System > Pick random instance
    • Add action > door > Set position to another object
      > Object = block
      > Image point = 0
    • Add action > block > Destroy
  • Add event > door > Compare Y
    > Comparison = Equal to
    > Y co-ordinate = rows*40
  • ที่อีเวนต์ 16 คลิกขวา Add sub-event > block > Compare X
    > Comparison = Equal to
    > X co-ordinate = door.X
  • ที่อีเวนต์ 17 คลิกขวา Add another condition > block > Compare Y
    > Comparison = Equal to
    > Y co-ordinate = door.Y-40
    • Add action > block > Destroy
  • Add event > door > Compare X
    > Comparison = Equal to
    > X co-ordinate = columns*40
    ที่อีเวนต์ 18 คลิกขวา Add sub-event > block > Compare X
    > Comparison = Equal to
    > X co-ordinate = door.X-40
    ที่อีเวนต์ 19 คลิกขวา Add another condition > block > Compare Y
    > Comparison = Equal to
    > Y co-ordinate = door.Y
    Add action > block > Destroy

คำสั่งทั้งหมดใน Event Sheet

ขอให้สนุกกับการสร้างงานนะครับ แล้วพบกันใหม่ในบทความต่อไป

สวัสดีครับ !

อ่านเพิ่มเติมสร้างวัตถุที่เหมือนกันด้วย for loop

ดาวน์โหลดทรัพยากรที่นี่