Package invaders101.spritesystem.test

Source Code of invaders101.spritesystem.test.AlienShipTest

package invaders101.spritesystem.test;

import invaders101.spritesystem.Sprite;
import invaders101.entities.BaseEntity;
import invaders101.spritesystem.ImageCache;
import invaders101.interfaces.Drawable;
import invaders101.interfaces.Trackable;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class AlienShipTest extends JPanel {

    Sprite sprite;

    /** Estrategia para la gestion del buffer, permite usar page flipping acelerado */
    private BufferStrategy strategy;
    /** True si el juego está actualmente "corriendo" */
    private boolean gameRunning = true;
    private boolean logicRequiredThisLoop = false;
    private String title;
    /** Lista de todas las entidades existentes en el juego */
    private ArrayList<BaseEntity> entities = new ArrayList();
    /** Lista de las entidades a remover del juego en el actual loop */
    private ArrayList removeList = new ArrayList();


    //Constructor del juego
    public AlienShipTest(String title) {
        // Crea el JFrame que contendrá el juego
        this.title = title;
        JFrame container = new JFrame(this.title);

        // Asigna propiedades de dimensión al área del juego
        JPanel panel = (JPanel) container.getContentPane();
        panel.setPreferredSize(new Dimension(800, 600));
        panel.setLayout(null);

        // Configura el tamaño de Game y lo inserta en el JPanel de contenido
        this.setBounds(0, 0, 800, 600);
        panel.add(this);

        // Desactiva el llamado a repaint automático. Los llamados
        // a paint serán hechos manualmente en modo acelerado
        this.setIgnoreRepaint(true);


        // Hace que la ventana sea visible
        container.pack();
        container.setResizable(false);
        container.setVisible(true);

        // Añade un listener para que el programa se cierre cuando el
        // usuario cierre la ventana
        container.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        // agrega un sistema para las entradas del teclado
        // KeyInputHandler maneja la entrada del teclado
        //this.addKeyListener(keyInputHandler = new KeyInputHandler(this));

        // solicita el foco de atencion para que se capturen los key events
        requestFocus();

        // crea el buffering strategy el cual va a permitir
        // manejar los gráficos acelerados
        // el parametro 2 son los buffers a utilizar
        container.createBufferStrategy(2);
        strategy = container.getBufferStrategy();

    }






    /**
     * The main game loop. This loop is running during all game
     * play as is responsible for the following activities:
     * <p>
     * - Working out the speed of the game loop to update moves
     * - Moving the game entities
     * - Drawing the screen contents (entities, text)
     * - Updating game events
     * - Checking Input
     * <p>
     */
    public void doGameLoop() {
        this.addSprite();
        long lastLoopTime = System.currentTimeMillis();

        // Mantiene el loop principal hasta que termine el juego
        while (gameRunning) {
            // Calcula la cantidad de segundos desde el último ciclo
            long delta = System.currentTimeMillis() - lastLoopTime;
            lastLoopTime = System.currentTimeMillis();

            this.draw();
            this.updateEntities(delta);
            this.computeCollisions();

            // remove any entity that has been marked for clear up
            entities.removeAll(removeList);
            removeList.clear();

            // finally pause for a bit. Note: this should run us at about
            // 100 fps but on windows this might vary each loop due to
            // a bad implementation of timer
            try {
                Thread.sleep(10);
            } catch (Exception e) {
            }
        }
    }

    private void computeCollisions() {

    }

    private void updateEntities(long delta) {
        // if a game event has indicated that game logic should
        // be resolved, cycle round every entity requesting that
        // their personal logic should be considered.
        if (logicRequiredThisLoop) {
            for (int i = 0; i < entities.size(); i++) {
                BaseEntity entity = entities.get(i);
                entity.update(delta);
            }
            logicRequiredThisLoop = false;
        }
        sprite.update(delta);
    }

    private void draw() {
        //Recupera el contexto gráfico del juego
        //Crea un contexto grafico para el drawing buffer
        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, 800, 600);

        // cycle round drawing all the entities we have in the game
        for (int i = 0; i < entities.size(); i++) {
            Object entity =  entities.get(i);

            if (entity instanceof Drawable) {
                ((Drawable)entity).draw(g);
            }
        }

        sprite.draw(g);

        //Terminada la etapa de dibujo, limpia los gràficos
        //y muestra los gráficos del back buffer
        g.dispose();
        strategy.show();
    }

    public void addSprite() {
        Image image = ImageCache.getInstance().getImage("sprites/alien.png");
        Trackable trackable = new Trackable(){

            public float getX() {
                return 100;
            }

            public float getY() {
                return 100;
            }

        };
//        sprite =  new AnimatedSprite(
//                trackable,
//                true,
//                50, 0, 0, 4, 1, 42, 42, 0, 0, 1 , image);
                sprite =  new Sprite(
                trackable,
                true,
                128, 0, 0, 6, 1, 46, 46, 0, 0, 2, image);
                sprite.setScale(0.9);
    }


    public static void main(String[] args) {
        AlienShipTest test = new AlienShipTest("Test");
        test.doGameLoop();
    }

}
TOP

Related Classes of invaders101.spritesystem.test.AlienShipTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.