明礼馨德的博客

非明礼无以立足,非馨德无以立业

java实现愤怒的小鸟游戏之Java swing图形界面开发游戏项目愤怒的小鸟源码及实现方式详解

今天给大家介绍一下Java swing实现游戏愤怒的小鸟的过程,完整源码下载地址在最下方,老规矩,先看运行结果:


下面我们来看看代码:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AngryBirdsApplication;

import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jbox2d.callbacks.ContactImpulse;
import org.jbox2d.callbacks.ContactListener;
import org.jbox2d.collision.Manifold;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Fixture;
import org.jbox2d.dynamics.contacts.Contact;

/**
 *
 * @author Sumomoxiao
 */
public class AngryBirdsController extends MouseAdapter implements Runnable, MouseMotionListener, ContactListener {

    private AngryBirdsArea m_stage;
    public AngryBirdsPanel m_view;
    private final AngryBirdsDraw drawer;
   // private final MusicController music;
    Thread gamethread;
    boolean stop = true;

    AngryBirdsController(AngryBirdsArea m, AngryBirdsPanel v){//, MusicController mc) {
        this.m_stage = m;
        m_view = v;
        drawer = v.getSDDraw();
        v.setStageController(this);
        m.initStage();
        //music = mc;
        drawer.setStage(m);
        this.addListener();

    }

    @Override
    public void run() {
        while (true) {
            try {
                while (!stop) {
                    m_stage.update();
                    drawer.drawStage();
                    try {
                        Thread.sleep(5);
                    } catch (InterruptedException ex) {
                    }
                }
                drawer.drawStage();
                Thread.sleep(12);
            } catch (InterruptedException ex) {
                Logger.getLogger(AngryBirdsController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void start() {
        if (gamethread == null) {
            stop = false;
            gamethread = new Thread(this);
            gamethread.start();
        }
    }

    public void pause() {
        if (isPainting()) {
            stop = true;
        }
    }

    public void resume() {
        if (!isPainting()) {
            stop = false;
        }
    }

    public boolean isPainting() {
        return m_view.isPainting();
    }

    /*
     * synchronized public void setRunthread(boolean runthread) {
     * if(this.stop!=runthread){ this.stop = runthread; }
     *
     *
     * }
     *
     */
    public void addListener() {
        m_view.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {

                if (m_stage != null) {
                    Vec2 pos = new Vec2(e.getX(), e.getY());
                    if (e.getButton() == MouseEvent.BUTTON1) {
                        drawer.getScreenToWorldToOut(pos, pos);
                        m_stage.queueMouseDown(pos);

                    }
                }
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                if (m_stage != null) {
                    Vec2 pos = new Vec2(e.getX(), e.getY());
                    drawer.getScreenToWorldToOut(pos, pos);
                    m_stage.queueMouseUp(pos);
                }
            }
        });

        m_view.addMouseMotionListener(new MouseMotionListener() {

            final Vec2 posDif = new Vec2();
            final Vec2 pos = new Vec2();
            final Vec2 pos2 = new Vec2();

            public void mouseDragged(MouseEvent e) {
                pos.set(e.getX(), e.getY());


                if (m_stage != null) {
                    drawer.getScreenToWorldToOut(pos, pos);
                    m_stage.queueMouseMove(pos);
                }
            }

            @Override
            public void mouseMoved(MouseEvent e) {
                pos2.set(e.getX(), e.getY());
                if (m_stage != null) {
                    drawer.getScreenToWorldToOut(pos2, pos2);
                    m_stage.queueMouseMove(pos2);
                }
            }
        });
    }

    @Override
    public synchronized void beginContact(Contact contact) {
               
          //   drawer.drawContact();
          //   System.out.print("listener thread !!!\n");
    }

    @Override
    public void endContact(Contact contact) {
    }

    @Override
    public void preSolve(Contact contact, Manifold oldManifold) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    Fixture fix ;
    @Override
    public void postSolve(Contact contact, ContactImpulse impulse) {

       if (contact.m_fixtureA.m_filter.groupIndex == -1 || contact.m_fixtureB.m_filter.groupIndex == -1) {
                      fix = contact.m_fixtureA.m_filter.groupIndex == -1?contact.m_fixtureA:contact.m_fixtureB;
                      
            for (int i = 0; i < contact.getManifold().pointCount; i++) {

                if (impulse.normalImpulses[i] > 0.8) {
                    System.out.print("pushing point \n");
                    drawer.pushContactPoint(fix.m_body.getPosition());
                    /*try {
                        //music.birdScream();
                    } catch (IOException ex) {                    }*/
                }
            }
        }
        if (contact.m_fixtureA.m_filter.groupIndex == 1 || contact.m_fixtureB.m_filter.groupIndex == 1) {
                // System.out.print(" impulse point count  : "+impulse.normalImpulses.length+"\n");
            for (int i = 0; i < contact.getManifold().pointCount; i++) {
                 //System.out.print("wood impulse : "+impulse.normalImpulses[i]+"\n");
                if (impulse.normalImpulses[i] > 3.1f) {
                    //System.out.print("wood impulse : "+impulse.normalImpulses[i]+"\n");
                    /*try {
                        //music.woodCollision();
                    } catch (IOException ex) {
                    }*/
                    return;
                }
            }
        }

    }
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AngryBirdsCharacters;


import javax.swing.ImageIcon;
import org.jbox2d.collision.shapes.CircleShape;
import org.jbox2d.collision.shapes.Shape;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.BodyDef;
import org.jbox2d.dynamics.FixtureDef;
import org.jbox2d.dynamics.World;

/**
 *
 * @author SONY
 */
public class AngryBirdsModel extends AngryBirdsCharacter{
    
   public ImageIcon birds1=new ImageIcon("src/AngryBirdsImagePack/birds.png");
   public ImageIcon birds2=new ImageIcon();
   public ImageIcon birds3=new ImageIcon();
   
  public  AngryBirdsModel() {
     super();
         }
      
  
   public Body createBirds(World mom,int birdtype,Vec2 pos) {
      this.getCharacterdef().position.set(pos);
      this.getCharacterdef().linearDamping=0.01f;
      this.getCharacterfixdef().filter.groupIndex=-1;
      this.charactershape=new CircleShape();
      Body bird=mom.createBody(characterdef);
      switch(birdtype) {
          case 1:
              this.charactershape.m_radius=0.5f;
              this.getCharacterfixdef().shape= this.charactershape;
              this.getCharacterinfo().setName("Lil Bird");
              this.getCharacterinfo().setHafheight(0.5f);
              this.getCharacterinfo().setHafwidth(0.5f);
              this.getCharacterinfo().setAppearance(birds1.getImage());
              bird.m_userData=this.getCharacterinfo();
              bird.createFixture(characterfixdef);
              break;
          case 2:
              this.charactershape.m_radius=0.7f;
              this.getCharacterfixdef().shape= this.charactershape;
              this.getCharacterinfo().setName("Strong Bird");
              this.getCharacterinfo().setHafheight(0.7f);
              this.getCharacterinfo().setHafwidth(0.7f);
              this.getCharacterinfo().setAppearance(birds2.getImage());
              bird.m_userData=this.getCharacterinfo();
              bird.createFixture(characterfixdef);
              break;   
          case 3:
              this.charactershape.m_radius=1f;
              this.getCharacterfixdef().shape= this.charactershape;
              this.getCharacterinfo().setName("Angry Bird");
              this.getCharacterinfo().setHafheight(1f);
              this.getCharacterinfo().setHafwidth(1f);
              this.getCharacterinfo().setAppearance(birds3.getImage());
              bird.m_userData=this.getCharacterinfo();
              bird.createFixture(characterfixdef);
              break;
      }
      return bird;
  }
  

}
   


获取源码:


阅读更多
版权声明:本文为博主原创文章,转载时请加上来源。 https://blog.csdn.net/llqqxf/article/details/51899427
个人分类: 技术浅谈
想对作者说点什么? 我来说一句

Java游戏愤怒的小鸟

2014年12月07日 5.47MB 下载

愤怒的小鸟 java版本源码

2013年10月17日 5.47MB 下载

Java实现愤怒的小鸟AngryBirds

2013年10月14日 5.47MB 下载

java愤怒的小鸟游戏(有点水)

2012年09月16日 26.95MB 下载

java愤怒的小鸟

2017年12月17日 5.47MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭