ผลต่างระหว่างรุ่นของ "Oop lab/simple ship game"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 16: | แถว 16: | ||
เราไม่มีความจำเป็นต้องเขียนคลาส GameContainer ขึ้นมาใหม่ โดยเราจะใช้วัตถุจากคลาส AppGameContainer (ซึ่งจัดเป็น GameContainer ประเภทหนึ่ง) ในโปรแกรมของเรา อย่างไรก็ตาม เราต้องสร้างวัตถุประเภท Game ขึ้นมาเอง เพราะว่านั่นคือแกนหลักของเกมของเรา | เราไม่มีความจำเป็นต้องเขียนคลาส GameContainer ขึ้นมาใหม่ โดยเราจะใช้วัตถุจากคลาส AppGameContainer (ซึ่งจัดเป็น GameContainer ประเภทหนึ่ง) ในโปรแกรมของเรา อย่างไรก็ตาม เราต้องสร้างวัตถุประเภท Game ขึ้นมาเอง เพราะว่านั่นคือแกนหลักของเกมของเรา | ||
+ | |||
+ | === เกมว่าง ๆ === | ||
+ | |||
+ | สร้าง project ชื่อ shipgame อย่าลืมเพิ่ม Slick2D เข้าไปใน library ใน Build Path (ดูรายละเอียดที่ [[Oop_lab/slick2d_installation|วิธีติดตั้ง]]) | ||
+ | |||
+ | จากนั้นให้สร้างคลาสชื่อ ShipGame เมื่อสร้างแล้ว ให้แก้หัวคลาสให้เป็น ดังด้านล่าง (เพิ่ม <tt>extends BasicGame</tt>) | ||
+ | |||
+ | public class ShipGame extends BasicGame { | ||
+ | |||
+ | เมื่อเพิ่มแล้ว IDE จะแจ้งว่าไม่รู้จัก BasicGame ให้ไปกดให้ IDE เพิ่มการ import ให้เรา โดย IDE น่าจะเพิ่มบรรทัดนี้มาให้ (อย่าลืมเลือกให้ถูก) | ||
+ | |||
+ | import org.newdawn.slick.BasicGame; | ||
+ | |||
+ | IDE จะยังคงบ่นต่อว่าเราไม่มี constructor (เมท็อดที่กำหนดค่าเริ่มต้นให้กับ object ของคลาส) เราก็กดให้มันเพิ่มให้ เราจะได้เมท็อดด้านล่างมา | ||
+ | |||
+ | <syntaxhighlight lang="java"> | ||
+ | public ShipGame(String title) { | ||
+ | super(title); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ยังไม่พอ IDE ยังบ่นต่อว่าเราไม่ได้ implement method ที่ต้องมี เช่นเคย เราก็กดให้ IDE เติมให้เราโดยอัตโนมัติ มันจะเติมมาให้ 3 เมท็อดดังนี้: | ||
+ | |||
+ | <syntaxhighlight lang="java"> | ||
+ | @Override | ||
+ | public void render(GameContainer arg0, Graphics arg1) throws SlickException { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void init(GameContainer arg0) throws SlickException { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void update(GameContainer arg0, int arg1) throws SlickException { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | สังเกตว่าชื่อ argument นั่นดูไม่สื่อความหมายใด ๆ เลย ไปแก้ให้มันดูสื่อความหมายโดยแก้หัวเมท็อดต่าง ๆ ให้เป็นดังนี้ | ||
+ | |||
+ | public void render(GameContainer container, Graphics g) throws SlickException { | ||
+ | |||
+ | public void init(GameContainer container) throws SlickException { | ||
+ | |||
+ | public void update(GameContainer container, int delta) throws SlickException { |
รุ่นแก้ไขเมื่อ 11:49, 24 สิงหาคม 2557
- หน้านี้เป็นส่วนหนึ่งของ oop lab
เราจะเขียนเกมยานอวกาศบน Slick2D กัน สำหรับส่วนนี้เราจะได้ทดลองใช้ Slick2D ในการแสดงรูปภาพและอ่านการกดปุ่มจากผู้ใช้แบบการถาม (polling)
โครงสร้างเกมพื้นฐาน
เกมใน Slick2D จะเป็นการทำงานร่วมกันของ object สอง object หลัก คือ
- Game javadoc - เป็น object ที่มีเมท็อดพื้นฐานของวนรอบของเกม คือ init, update, และ render
- void init(GameContainer container)
- void update(GameContainer container, int delta)
- void render(GameContainer container, Graphics g)
- GameContainer javadoc - เป็น object ที่จัดการเกี่ยวกับการอ่านข้อมูลจากผู้ใช้ (input) การวนรอบเกม และการจัดการเกี่ยวกับการแสดงค่า fps (frame per seconds)
หมายเหตุ: โดยทางเทคนิคแล้ว Game เป็น interface และ GameContainer เป็น abstract class เราจะได้เรียนแนวคิดดังกล่าวต่อไป
เราไม่มีความจำเป็นต้องเขียนคลาส GameContainer ขึ้นมาใหม่ โดยเราจะใช้วัตถุจากคลาส AppGameContainer (ซึ่งจัดเป็น GameContainer ประเภทหนึ่ง) ในโปรแกรมของเรา อย่างไรก็ตาม เราต้องสร้างวัตถุประเภท Game ขึ้นมาเอง เพราะว่านั่นคือแกนหลักของเกมของเรา
เกมว่าง ๆ
สร้าง project ชื่อ shipgame อย่าลืมเพิ่ม Slick2D เข้าไปใน library ใน Build Path (ดูรายละเอียดที่ วิธีติดตั้ง)
จากนั้นให้สร้างคลาสชื่อ ShipGame เมื่อสร้างแล้ว ให้แก้หัวคลาสให้เป็น ดังด้านล่าง (เพิ่ม extends BasicGame)
public class ShipGame extends BasicGame {
เมื่อเพิ่มแล้ว IDE จะแจ้งว่าไม่รู้จัก BasicGame ให้ไปกดให้ IDE เพิ่มการ import ให้เรา โดย IDE น่าจะเพิ่มบรรทัดนี้มาให้ (อย่าลืมเลือกให้ถูก)
import org.newdawn.slick.BasicGame;
IDE จะยังคงบ่นต่อว่าเราไม่มี constructor (เมท็อดที่กำหนดค่าเริ่มต้นให้กับ object ของคลาส) เราก็กดให้มันเพิ่มให้ เราจะได้เมท็อดด้านล่างมา
public ShipGame(String title) {
super(title);
}
ยังไม่พอ IDE ยังบ่นต่อว่าเราไม่ได้ implement method ที่ต้องมี เช่นเคย เราก็กดให้ IDE เติมให้เราโดยอัตโนมัติ มันจะเติมมาให้ 3 เมท็อดดังนี้:
@Override
public void render(GameContainer arg0, Graphics arg1) throws SlickException {
// TODO Auto-generated method stub
}
@Override
public void init(GameContainer arg0) throws SlickException {
// TODO Auto-generated method stub
}
@Override
public void update(GameContainer arg0, int arg1) throws SlickException {
// TODO Auto-generated method stub
}
สังเกตว่าชื่อ argument นั่นดูไม่สื่อความหมายใด ๆ เลย ไปแก้ให้มันดูสื่อความหมายโดยแก้หัวเมท็อดต่าง ๆ ให้เป็นดังนี้
public void render(GameContainer container, Graphics g) throws SlickException { public void init(GameContainer container) throws SlickException { public void update(GameContainer container, int delta) throws SlickException {