ผลต่างระหว่างรุ่นของ "Oop lab/objects co-ordination"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 21: แถว 21:
  
 
==== 1. เก็บไว้เป็น field ====
 
==== 1. เก็บไว้เป็น field ====
 +
ในกรณีที่ object ของคุณมีจำนวนไม่มาก คุณอาจจะเก็บ field ของวัตถุอื่นไว้ใน object ก็ได้ ยกตัวอย่างเช่น ถ้าคุณมีผู้เล่นสองคน อาจจะเก็บผู้เล่นอีกฝ่ายเป็น field ได้
 +
 +
<syntaxhighlight lang="java">
 +
class Player {
 +
  private Player otherPlayer = null;
 +
 +
  //...
 +
  public setOtherPlayer(player) {
 +
    otherPlayer = player;
 +
  }
 +
  //...
 +
  public isHit() {
 +
    //... now you can access the other player with otherPlayer field.
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
ในส่วน init ใน Game อาจเป็นดังนี้
 +
 +
<syntaxhighlight lang="java">
 +
  public init() {
 +
    player1 = new Player();
 +
    player2 = new Player();
 +
    player1.setOtherPlayer(player2);
 +
    player2.setOtherPlayer(player1);
 +
  }
 +
</syntaxhighlight>
  
 
==== 2. อ้างผ่านทาง Game ====
 
==== 2. อ้างผ่านทาง Game ====
  
 
=== การแจ้งเหตุการณ์ ===
 
=== การแจ้งเหตุการณ์ ===

รุ่นแก้ไขเมื่อ 08:10, 22 กันยายน 2557

หน้านี้เป็นส่วนหนึ่งของ oop lab

มีสองแนวทางหลัก ๆ ในการจัดการประสานงานระหว่าง object ในเกม

  • Game เป็นตัวประสานงานจัดการทั้งหมด
  • ให้ object ต่าง ๆ จัดการกันเอง และแจ้ง Game เฉพาะเมื่อเกิดเหตุการณ์สำคัญ

Game-control.png

อย่างไรก็ตาม ไม่ใช่ว่าแต่ละเกมจะต้องมีรูปแบบในการติดต่อแบบเดียว ในเกมหนึ่ง ๆ อาจจะมีทั้งส่วนที่ Game เป็นคนจัดการและส่วนที่ object จัดการกันเองด้วยก็ได้

Game เป็นตัวประสานงานทั้งหมด

เกมที่เราเขียนมาทั้งหมด โดยมากจากอยู่ในรูปแบบนี้ ทั้ง Ship game และ Flappy dot

Object ติดต่อกันเอง

การที่ object จะจัดการกิจกรรมอื่น ๆ ได้เองนั้น object จะต้องอ้างถึง object อื่น ๆ ที่เกี่ยวข้องได้ด้วย นอกจากนี้ ในบางครั้งที่เกิดเหตุการณ์ที่สำคัญ เช่น game over แล้ว object จะต้องสามารถแจ้งผลต่าง ๆ ให้กับ Game ได้ด้วย

การอ้างถึงวัตถุอื่น ๆ ในเกม

สามารถดำเนินการได้หลายแบบ

1. เก็บไว้เป็น field

ในกรณีที่ object ของคุณมีจำนวนไม่มาก คุณอาจจะเก็บ field ของวัตถุอื่นไว้ใน object ก็ได้ ยกตัวอย่างเช่น ถ้าคุณมีผู้เล่นสองคน อาจจะเก็บผู้เล่นอีกฝ่ายเป็น field ได้

class Player {
  private Player otherPlayer = null;

  //...
  public setOtherPlayer(player) {
    otherPlayer = player;
  }
  //...
  public isHit() {
    //... now you can access the other player with otherPlayer field.
  }
}

ในส่วน init ใน Game อาจเป็นดังนี้

  public init() {
    player1 = new Player();
    player2 = new Player();
    player1.setOtherPlayer(player2);
    player2.setOtherPlayer(player1);
  }

2. อ้างผ่านทาง Game

การแจ้งเหตุการณ์