Email: thekaroe@hotmail.com, Tel: 086-8776053, 085-0112307 (ถาวร)
username: password: สมัครสมาชิก
เยี่ยมชม   ครั้ง 21,358 สมาชิก 688 VDO
3,289 บลอก 288 บทความ 222 E-Book
495 บทความ IT 44 ตัวอย่างโค้ด 631 กระทู้
ค้นหา:
VDO เพื่อการศึกษา
JAVA

PHP

HTML & CSS for web design

แรงบันดาลใจ
  - web app

C C++

SQL

JAVA Web Framework

.NET Technology
VB.NET 2008 Basic
ภาษา C# เบื้องต้น

iOS Programming



สมาชิกที่ Online คน
บุคคลทั่วไป คน

สมาชิกที่แจ้งการชำระเงิน



เขียนเกมกับ Java ตอน 3 (ภาคจบ) (อ่าน 329, คอมเมน 6)

จากบทความที่ 1 และ 2 ที่ผมเขียนไว้จะอธิบายถึงการใช้ slick library นะครับ บทความนี้ก็เหมือนกัน จะเอา library ตัวนี้แหละมาใช้เหมือนเดิมซึ่งเนื้อหาในบทความนี้จะมี

 - การทำภาพเคลื่อนไหว
 - การชน และ การเก็บคะแนน
 - การใส่เสียงประกอบ
 - การยิง

การทำภาพเคลื่อนไหว
โดยที่ในตัว
slick library จะมี class หนึ่งชื่อ Animation ให้เราใช้ึครับ ซึ่งมีิวิืธีการเรียกใช้โดยจะรับค่า Image[] และ เวลาที่จะแสดงผลต่อเฟรม ผ่าน argument ของ construct ได้เลย

ลักษณะการใช้

       Image[] imgAnim = new Image[]{
                       new Image("frame1.png"),
                       new Image("frame2.png"),
                   };
       int Fps = 200;
       Animation anim = new Animation(
imgAnim , Fps);

การชน และ การเก็บคะแนน
การชน สามารถเรียกใช้ผ่าน method ที่ชื่อ Intersects ครับซึ่งเป็น method ของ class Rectangle มี arguments เป็น rectangle 1 ตัว และจะคืนค่าเป็น boolean ครับ ซึ่งตรงนี้เราสามารถใช้ if มาตรวจจับ ได้ว่าชนหรือยัง หากชนจริงก็สามารถเก็บคะแนนได้เลย

ลักษณะการใช้

      
Rectangle aRect = new Rectangle(10,10,50,50);
      Rectangle bRect = new Rectangle(200,10,50,50);
      int
score = 0;

      if(aRect.Intersects(bRect)){
         
            score++;
        }

การใส่เสียงประกอบ
การใส่เสียงประกอบ สามารถ เรียกใช้ได้ผ่าน class ที่ชื่อ Sound และ Music ซึ่งไฟล์ที่สนับสนุน จะมีหลายชนิด แต่ไม่สนับสนุน mp3 นะครับ รายละเอียดไฟล์ที่สนุบสนุนจริงๆต้องไปศึกษาเพิ่มเอาเอง โดยการใช้งานหลักๆคงหนีไม่พ้น play() , stop() , loop()
ซึ่งคุณสมบัติของแต่ละตัว คงตามชื่อของมันเลยครับ

ลักษณะการใช้


        Sound sound = new Sound("mysound.wav");
        sound.play();
        sound.loop();

การยิง
จริงๆแล้ว เทคนิค การยิงนี้คือการเอา ArrayList มาเก็บชนิดของกระสุนไว้ครับ แล้ว เวลาจะเพิ่มเข้าไปก็ใช้ method add ขึ้นมาใหม่ ก่อนที่จะไปวาดใน loop ที่เตรียมไว้

ลักษณะการใช้


          ArrayList<BulletType> bullet = new ArrayList<BulletType>();

         
bullet.add(new BulletType());

             for(BulletType b : bullet){
                         .....
              }

จริงๆแล้ว บทความนี้ไม่ใช่ภาคจบของการพัฒนาเกมนะครับ แต่มันคือภาคจบของผม เอ้ย ไม่สิ ขอการพัฒนาเกมแบบพื้นฐานสิถึงจะถูก มีภาพ มีเสียง มีการควบคุม มีการเก็บคะแนน ได้หมดแล้ว


จากบทความที่ผ่านๆมาเพื่อนๆคงทราบกันแล้วนะครับว่า ต้องเตรียมไฟล์อะไรไว้บ้าง แต่จะมีเพิ่มขึ้นมาก็แต่ กระสุน ภาพที่จะเอามาทำ Animation และก็ เสียงประกอบ ครับ





@Source Code 
//-------------------------------------------------------------------------------
package simple;

import org.newdawn.slick.Animation;
import org.newdawn.slick.Image;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.Sound;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.Input;
import java.util.ArrayList;
import java.util.Random;

public class GExm3 extends BasicGame{
    private Player player;
    private ArrayList<Target> tar = new ArrayList<Target>();
    private Random rnd = new Random();
    private int score = 0;
   
    public GExm3(){
        super("Java Game Example 3");
    }
   
    public static void main(String[] args) throws SlickException{
        AppGameContainer app = new AppGameContainer(new GExm3(),800,600,false);
        app.start();
    }
   
    public void init(GameContainer gc) throws SlickException{
        gc.setShowFPS(false);
        player = new Player(680,100);
       
        for(int i = 0;i<30;i++){
            int rndX = rnd.nextInt(100)+50;
            int rndY = rnd.nextInt(450)+50;
            tar.add(new Target(rndX,rndY));
            System.out.println("ID = "+tar.get(i).toString()+" X = "+rndX+", Y = "+rndY);
        }
    }
   
    public void update(GameContainer gc,int delta) throws SlickException{
       
    }
   
    public void render(GameContainer gc,Graphics g) throws SlickException{
        player.draw();
        player.control(gc);
       
        g.drawString("Score : "+score,50,50);
       
        for(Target t : tar){
            if(t!=null){
                t.draw();
            }
        }
       
        for(Bullet b : player.bullet){
            if(b!=null){
                for(Target t : tar){
                    if(t!=null && !t.isDie()){
                        if(b.box().intersects(t.box())){
                            t.hp -= b.getAtk();
                            b.killBullet();
                            break;
                        }
                    }else{
                        score+=3;
                        tar.remove(t);
                        break;
                 
   }
                }
            }
        }
    }
}

class Bullet{
    private int x,y;
    private int speed,life = 150;
    private Image img;
    private boolean die = false;
    private int atk = 10;
   
    public Bullet(int x,int y){
        this.x = x;
        this.y = y;
        this.speed = 5;

        try{
            String url = "resource/";
            this.img = new Image(url+"bullet.PNG");
        }catch(SlickException e){
            System.out.println(e);
        }
    }
   
    public void killBullet(){
        this.die = true;
    }
   
    public int getAtk(){
        return(atk);
    }
   
    public boolean isDie(){
        return(die);
    }
   
    public Rectangle box(){
        Rectangle rect = new Rectangle(x,y,img.getWidth(),img.getHeight());
        return(rect);
    }
   
    public void updateAndDraw(){
        Graphics g = new Graphics();
       
        g.drawImage(img,x,y);
       
        if(life > 0){
            life--;
            x-=speed;
        }else killBullet();
    }
}
   
class Player{
    private Image[] stopImage,atkImage;
    private Animation animStop,animAtk;
    private int fps = 200;
    private enum Status{stop,atk};
    private Status status = Status.stop;
    private int x,y,speed;
    public ArrayList<Bullet> bullet = new ArrayList<Bullet>();
    private int delay,cooldown = 10;
   
    public Player(int x,int y){
        this.x = x;
        this.y = y;
        this.speed = 3;
        this.delay = this.cooldown;
       
        try{
            String url = "resource/";
           
            stopImage = new Image[]{
                new Image(url+"stop.PNG"),
            };
            atkImage = new Image[]{
                new Image(url+"atk_1.png"),
                new Image(url+"atk_2.png"),
                new Image(url+"atk_1.png"),
            };
           
            animStop = new Animation(stopImage,1000);
            animAtk = new Animation(atkImage,fps);
        }catch(SlickException e){
            System.out.println(e);
        }
    }
   
    public void draw(){
        Graphics g = new Graphics();
        switch(status){
            case stop:{
                g.drawAnimation(animStop,x,y);
                break;
            }
            case atk:{
                g.drawAnimation(animAtk,x,y);
               
                if(animAtk.getFrame() == animAtk.getFrameCount()-1){
                    status = Status.stop;
                }
                break;
            }
        }
       
        for(Bullet b : bullet){
            if(b != null && !b.isDie()){
                b.updateAndDraw();
            }else{
                bullet.remove(b);
                break;
            }
        }
    }
   
    public void control(GameContainer container){
        Input Key = container.getInput();
       
        if(Key.isKeyDown(Key.KEY_UP)){
            y -= speed;
        }
        if(Key.isKeyDown(Key.KEY_DOWN)){
            y += speed;
        }
        if(Key.isKeyDown(Key.KEY_SPACE)){
            status = Status.atk;
           
            if(delay > 0){
                delay--;
            }else{
                this.bullet.add(new Bullet(this.x-20,this.y+15));
                delay = cooldown;
            }
        }
    }
}

class Target{
    private int x,y;
    private Image img;
    public int hp = 50;
    private Sound sound;
   
    public Target(int x,int y){
        this.x = x;
        this.y = y;
       
        try{
            this.img = new Image("resource/target.PNG");
            this.sound = new Sound("resource/mysound.wav");
        }catch(SlickException e){
            System.out.println(e);
        }
    }

    public void draw(){
        Graphics g = new Graphics();
       
        g.drawImage(img,x,y);
    }
   
    public boolean isDie(){
        if(hp <= 0){
            this.sound.play();
            return(true);
        }
        return(false);
    }
   
    public Rectangle box(){
        Rectangle g = new Rectangle(x,y,this.img.getWidth(),this.img.getHeight());
        return(g);
    }
}
//-------------------------------------------------------------------------------



สามารถโหลดตัวอย่างโปรแกรมไปศึกษาต่อได้จาก www.mediafire.com/
 

 

 

 

 

 

เขียนเมื่อ: 2010-01-18 16:03:15 โดย: jMind

ความเห็นจากผู้อ่าน


shinaes

ขอบคุณครับ


tago_mic

เยี่ยมครับ


first_member

Ohh ผมลองอ่านดูโค้ดแล้ว มันดูเป็นธรรมชาติมาก อ่านก็ง่าย เข้าใจก็ง่าย ไม่โหดเหมือน C++ อิ ๆ แบบนี้เขียนเป็นหนังสือขายได้เลยนะเนี่ย Java Game Programming with Slick Game Engine อิ ๆ เขียนแล้วบอกเน้อ จะอุดหนุนซักเล่ม เอามาฝากขายบนเว็บนี้ก็ได้ครับ


sentery

ขอบคุณครับ

 


jMind

มีครับ โหลด code ไปดูได้เยย มันจะเป็น method intersects ของ class Rectangle ครับ


404Not Found

โค๊ตยาวมากเลยคับ...555+ มีการตรวจสอบการชนป่าว

« previous 1 next »





Blog ที่มีคน Commnet ล่าสุด (10 รายการ)
วันนี้คิดได้อีก (dejbooter) 9 กุมภาพันธ์ 2012 19:07:28)
วันนี้คิดได้อีก (ninkCs) 9 กุมภาพันธ์ 2012 18:10:43)
วันนี้คิดได้อีก (ninkCs) 9 กุมภาพันธ์ 2012 18:03:23)
โปรแกรมทันตกรรม (manasak19) 9 กุมภาพันธ์ 2012 17:29:01)
โปรแกรมทันตกรรม (manasak19) 9 กุมภาพันธ์ 2012 17:11:32)
โปรแกรมทันตกรรม (manasak19) 9 กุมภาพันธ์ 2012 17:08:14)
วันนี้คิดได้อีก (dejbooter) 9 กุมภาพันธ์ 2012 16:17:53)
จะปล่อยดีมั้ยคร๊าบ (dejbooter) 9 กุมภาพันธ์ 2012 14:33:58)
free banban_car_inout vol 1.0 (java swing) (heemu) 9 กุมภาพันธ์ 2012 14:02:46)
free banban_car_inout vol 1.0 (java swing) (first_member) 9 กุมภาพันธ์ 2012 13:33:18)

CD มาใหม่ล่าสุด
PHP Basic Level 1

ราคา: 180 บาท

Kohana V3 Workshop

ราคา: 250 บาท


CD ทั้งหมด Click




สมาชิกมาใหม่
นพดล มั่งมี
(ชลบุรี)
Romeo Montaqeu
(กรุงเทพมหานคร)
grtvr4 vrv
(เชียงใหม่)
weerayut phupadrae
(กรุงเทพมหานคร)
จารุวรรณ สีทับ
(มหาสารคาม)
dsgdgsdg dsgsdgsdgsdg
(กระบี่)
wadchara srisupun
(สกลนคร)


อันดับสุดยอดสมาชิก

VIP Member 15 คนล่าสุด
Digitalhon
aumrin
aungjoe
pundi
oak49147
wet201
izunk
dracker
santi2007
deknakhon
mju4610302
aee9999
mrs22
nittaya.j@
arr_012
หนังสือของเรา : PDF File
การเขียนโปรแกรม JAVA เบื้องต้น
50 บาท จำนวน 139 หน้า
ใช้ Kohana ได้ใน 24 ชั่วโมง
50 บาท จำนวน 111 หน้า
CakePHP ใน 8 วัน
50 บาท จำนวน 123 หน้า
PHP E-Commerce ใน 20 ชั่วโมง
50 บาท จำนวน 103 หน้า
เส้นทางสู่โปรแกรมเมอร์
50 บาท จำนวน 66 หน้า
บันทึกโปรแกรมเมอร์ เล่ม 1
50 บาท จำนวน 130 หน้า

Blog เมื่อวาน และวันก่อน ๆ





เวลาประมวลผล: 0.4552 วินาที
java gui programming ภาษาจาวา java thailand ภาษา java เรียน java การวาง java kohana framework การเขียนโปรแกรมจาวา เชื่อมwekaผ่านเว็บ java cd สอนเขียนเว็บติดต่อฐานข้อมูล การเขียนโปรแกรมปลูกผัก weka web การเขียนjava การทำเว็บด้วย java \"static block\" การทำงาน ระบบล็อกอิน phpเข้าฐานข้อมูล โปรแกรมเขียนจาวา โค้ดโปรแกรม ภาษาจาวา easy java gui programing java html เบื้องต้น การเชื่อมฐานข้อมูลอันไหนง่ายที่สุด cd สอน java web app เบื้องต้น โหลดคลิปวิธีเขียนโปรแกรมจาวา วิดีโอการเขียนโปรแกรมจาวา java ฟรี web java วิดีโอการเขียนโปรแกรมjava การเขียนโปรแกรมจาวาการลบ เขียนโปรแกรม java การเขียนโปรแกรมภาษาจาวา java thailand ภาษา java ภาษาjava เรียน java เรียนเขียนโปรแกรม การเขียนjava เรียน เขียน โปรแกรม การ เขียน โปรแกรม ภาษา java ebook เขียนโปรแกรม บนมือถือด้วย j2me ตัวอย่าง โปรแกรม java java เรียน ไฟฝันวันเยาว์สอนอะไร เขียน จาวา เรียนจาวาฟรี หนังสือ หลักการ oop ฟรี โปรแกรม ทอนเงินโดยใช้ ภาษาจาวา ขอโค้ดจาวา โปรแกรม ทอนเงิน tavon@programmer.in.th เรียน html เบื้องต้น ข้อสอบ เข้างาน programmer php เรียนเองได้มั้ย ใช้ eclipse เขียน gui ลากแปะ เขียนจาวา เขียนเว็บ html ใส่วีดีโอ เขียนโปรแกรมโดยใช้จาวา php sql server เรียนภาษา java การ เขียน java เบื้องต้น jstl java thailand อีบุ๊กเกี่ยวกับโปรแกรมจาวา เรียนเขียนโปรแกรม javathailand เรียน เขียน โปรแกรม สอนเขียนโปรแกรมhtmlฟรี เขียน โปรแกรม สูตร คูณjava ภาษา java เบื้องต้น เริ่มเขียนweb java การเขียนเว็บด้วย php project นักศึกษา php เขียนโปรแกรม java การเขียนโปรแกรมจาวาด้วยeclipse การ เขียน โปรแกรม จาวา ตัวอย่างโปรแกรมจาวา การใช้งานตัวแปร array การเขียนโปรแกรม java โดยใช้ตัวแปร array รู้จักและใช้งาน constructor เขียนเกมส์ด้วยโปรแกรม gui โปรเจค ai e-book ภาษาจาวา โรงเรียนสอนเขียน java php method overloading kohana หนังสือ ตัวอย่างการเขียนโปรแกรมจาวา ่http://www.javathailand.com/ การเขียนโปรแกรมจาวา array java thailand ajax การเขียนโปรแกรมภาษาจาวา วิดีโอสอนเขียนโปรแกรมภาษาจาวา java trainning แจก java java thailand ตัวอย่างโจทย์การเขียนโปรแกรม แบบใช้ if else loop ใน php ภาษา java โค้ดjava การเขียนโปรแกรมร้านขายหนังสือ โปรแกรมที่เขียนด้วยจาวา เรียน java www.java.com การเขียนจาวาแสดงวันที่ เขียน web app ด้วย java recognizer netbean เขียน java เบื้องต้น เรียนเขียนโปรแกรมออนไลน์ ตัวอย่างโปรแกรมเขียนด้วย จาวา เรียนการเขียนโปรแกรมไหนที่นิยมใช้ โปรแกรมทำเว็บ 3.0 เรียนการเขียนโปรแกรม คู่มือการเขียนเว็บ ด้วยภาษาจาวา การเขืยน server game code java ขายสินค้า เขียน โปรแกรม java โค้ดโปรแกรมจาวา netbean 6.8 สอน การใช้ while ซ้อนกัน ในjava โปรเจค การเขียนโปรแกรมจาวา เทคโนโลยีปี 2010 weka การใช้งาน รายชื่อโปรแกรมที่เขียนด้วย java อุปกรณ์การทำโปรแกรมcalculator การใช้ swing ออกแบบหน้าจอ จาวา vcd สอนการเขียนภาษาซี ตัวอย่างโปรแกรม if ด้วยจาวา ฝึกเขียนโค๊ดจาวา วิธีการเขียนเวปเบื้องต้น เขียน โปรแกรม java เบื้องต้น วีดีโอสอนเขียนจาวา เรียน เขียนโปรแกรม ext-js javascript framework เขียน java โจทย์การสร้าง web app โดยใช้ jsp วิธีเขียนjava เรียนพิเศษ โปรแกรม php ตัวอย่างการใช้staticเขียนโปรแกรมจาวา การสร้าง ui j2me; netbeans จับเวลา java servlet การกรอกเลขบัตรประชาชน java สอนjavaเบื้องต้น netbeanติดตั้งเครื่องปริ้น ตัวอย่างแสดงโปรแกรม gui เครื่องคิดเลข มือถือ netbeans ide 6.8 โค้ดภาษาจาวา java เครื่องมือเขียน จาวา แบบเริ่มต้น java เขียนโปรแกรมเชื่อมต่อ database โค้ดจาวา ติดตั้งเครื่องปริ้น เรียนเขียนโปรแกรม การเขียนโปรแกรม ภาษา java เบื้องต้น vdo สอน netbeans java thailand เล่นหนัง java oracle คืออะไร java เบื้องต้น โปรแกรมเขียนเว็ป javathai แปลงค่า ตัวเลขเป็นตัวอักษร c แปลงค่า ตัวเลขเป็นตัวอักษร ลักษณะgui โค้ดโปรแกรมทอยลูกเต๋า สอบ certificate php programmer ที่ไหน netbean tomcat 7 ค่าสอบ sun java certificate เขียนเว็บ php พิกัดดาวเทียม social engineering คืออะไร เขียนโปรแกรมภาษา จาว่า บน mac หนังสือ java มือสอง ทํา windows 7 ให้เป็นของแท้ สอน groovy เรียน java ราคาasus eee pc t101mt netbook eclipse การเชื่อม java กับ mysql ตัวอย่างโค๊ดjava ที่เชื่อมกับ mysql เขียนเว็บ jsp จาวา เขียนเว็บ ด้วย netbeans หนังสือ netbeans