Síguenos en Facebook


Síguenos en Twitter

Compartir este tema:
El 21 marzo, 2013 · 0 Comentarios
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti

Programa en Java que emula el clasico juego de atari Space Invaders (Invasion del Espacio), fue realizado usando la plataforma NetBeans y AWT.

Nombre del Programa: Space Invaders.

Version del Programa: NA.

Autor(es): Jose Gonzalez, Luis Molina, Eulis Blanco.

Lenguaje en que fue programado: Java 1.6.x/1.7.x.

Licencia bajo la que fue liberado: Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0.

Fecha de lanzamiento: Febrero 2013.

Idioma(s): NA.

Captura de pantalla del programa ejecutándose:

Captura de pantalla Space Invaders

Código:

SpaceInvaders.java

 package spaceinvaders;
 
    import javax.swing.JFrame;
 
    public class Spaceinvaders extends JFrame{
 
        public Spaceinvaders(){
            add(new Juego());
 
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(500, 500);
            setLocationRelativeTo(null);
            setTitle("Space Invaders");
            setResizable(false);
            setVisible(true);
        }
 
        public static void main(String[] args) {
 
            new Spaceinvaders();
        }
    }

 

Juego.java

package spaceinvaders;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
/**
 *
 * @author JOSE GONZALEZ
 */
public class Juego extends JPanel implements ActionListener {
 
    private Timer timer;
    private long tiempomax;
    private long contador;
    private long tiempoanterior;
    private Nave nave;
    private boolean ingame;
    private int ANCHO;
    private int ALTO;
    private String msg;
    private Misil misil_alien;
    private int vidas = 2;
    private ArrayList aliens;
    private int[][] pos = { 
        {130, 29},{180, 29},{230, 29},{280, 29},{330, 29} ,
        {105, 59},{155, 59},{205, 59},{255, 59},{305, 59},{355, 59} ,
        {130, 89},{180, 89},{230, 89},{280, 89},{330, 89} ,
        {105, 119},{155, 119},{205, 119},{255, 119},{305, 119},{355, 119} ,
     };
 
    public Juego(){//contrustor inicialisa variable
        addKeyListener(new TAdapter());
        setFocusable(true);
        setBackground(Color.BLACK);
        setDoubleBuffered(true);
        ingame = true;
        msg = "Game Over";
 
        setSize(500, 500);
 
        nave = new Nave(225, 400,500);
 
        iniciarAliens();
 
        misil_alien = new Misil(0,0);
        misil_alien.setVisible(false);
        tiempomax = 1000;//tiempo movimiento de aliens ms
        contador = 0;//durasion de cada frame
        timer = new Timer(5, this);//cada 5ms ejecuta el metodo accionperforment necesita implementar action listener
        timer.start();
    }
 
    public void addNotify(){
        super.addNotify();
        this.ALTO = getHeight();
        this.ANCHO = getWidth();
    }
 
    public void iniciarAliens() {//aliens crea
        aliens = new ArrayList();
 
        for (int i=0; i<pos.length; i++ ) {
            aliens.add(new Alien(pos[i][0], pos[i][1]));
        }
    }
 
    public void paint(Graphics g) {//pintar o graficar
        super.paint(g);
 
        if (ingame) {
 
            Graphics2D g2d = (Graphics2D)g;
 
            if (nave.isVisible())
                g2d.drawImage(nave.getImage(), nave.getX(), nave.getY(),this);//dibuja imagen
 
            ArrayList ms = nave.getMisiles();
 
            for (int i = 0; i < ms.size(); i++) {//recorre array, dibuja el misil 
                Misil m = (Misil)ms.get(i);
                g2d.drawImage(m.getImage(), m.getX(), m.getY(), this);
            }
 
            for (int i = 0; i < aliens.size(); i++) {                 Alien a = (Alien)aliens.get(i);                 if (a.isVisible()){                     g2d.drawImage(a.getImage(), a.getX(), a.getY(), this);                 }             }                          g2d.drawImage(misil_alien.getImage(), misil_alien.getX(), misil_alien.getY(), this);             g2d.setColor(Color.WHITE);             g2d.drawString("Vidas: " + vidas, 5, 15);             g2d.drawString("Hasta Aqui -> ", 5, 250);
            g2d.drawString("________________________________________________________________________________________", 0, 450);
 
        } 
        if(!ingame){
 
            Font small = new Font("Helvetica", Font.BOLD, 14);
            FontMetrics metr = this.getFontMetrics(small);
 
            g.setColor(Color.white);
            g.setFont(small);
            g.drawString(msg, (ANCHO - metr.stringWidth(msg)) / 2,
                         ALTO / 2);
        }
 
        g.dispose();
    }
 
    public void actionPerformed(ActionEvent e) {//logica
 
        if (aliens.size()==0) {
            ingame = false;
            msg = "GANASTE";
        }
 
        ArrayList ms = nave.getMisiles();
 
        for (int i = 0; i < ms.size(); i++) {//misil borrar, mover             Misil m = (Misil) ms.get(i);             if (m.isVisible())                  m.mover();             else ms.remove(i);         }         long delta = System.currentTimeMillis()- tiempoanterior;// timemillis tiempo  del programa completo, tiempo de kda frame         tiempoanterior =  System.currentTimeMillis();//tiempo del ultimo frame del anterior         contador += delta;//suma la duracion del nuevo frame          if (contador > tiempomax) {
		contador = 0;
		for (int i = 0; i < aliens.size(); i++) {//esto lo ase en un solo frame
                    Alien a = (Alien) aliens.get(i);
                    a.mover();
                }
 
	}
        for (int i = 0; i < aliens.size(); i++) {//remueve en el frame q sigue             Alien a = (Alien) aliens.get(i);             if (!a.isVisible())                  aliens.remove(i);         }                           if(misil_alien.visible == false){//alien alazar y dispara             double numero = Math.floor(Math.random()*aliens.size());             int k = (int) numero;             Alien ad = (Alien) aliens.get(k);             misil_alien = ad.fire();         }                  misil_alien.mover_alien();                  nave.mover();         checkearColisiones();         repaint();     }     public void checkearColisiones() {         Rectangle r3 = nave.getBounds();         Rectangle r4 = misil_alien.getBounds();         if(r3.intersects(r4)){             nave.setVisible(false);             misil_alien.setVisible(false);             vidas--;             if(vidas>=0){
                nave.setPos(50, 400);
                nave.setVisible(true);
            }else{
                ingame = false;
            }
        }
 
        for (int j = 0; j<aliens.size(); j++) {             Alien a = (Alien) aliens.get(j);             Rectangle r2 = a.getBounds();                          if(r2.y+r2.height > 250){
                ingame = false;
            }
        }
 
        ArrayList ms = nave.getMisiles();
 
        for (int i = 0; i < ms.size(); i++) {
            Misil m = (Misil) ms.get(i);
 
            Rectangle r1 = m.getBounds();
 
            for (int j = 0; j<aliens.size(); j++) {
                Alien a = (Alien) aliens.get(j);
                Rectangle r2 = a.getBounds();
 
                if (r1.intersects(r2)) {
                    m.setVisible(false);
                    a.setVisible(false);
                }
            }
        }
    }
 
    private class TAdapter extends KeyAdapter {//cactura teclas
        public void keyReleased(KeyEvent e) {
            nave.keyReleased(e);
        }
 
        public void keyPressed(KeyEvent e) {
            nave.keyPressed(e);
        }
    }
}

 

Nave.java

package spaceinvaders;
 
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.ImageIcon;
/**
 *
 * @author JOSE GONZALEZ
 */
public class Nave {
 
    private String Nave = "spaceship1.png";
 
    private int dx;
    private int x;
    private int y;
    private int ancho;
    private int alto;
    private boolean visible;
    private Image imagen;
    private ArrayList misiles;
    private int anchocanvas;
 
    public Nave(int posX, int posY,int anchocanva) {
        ImageIcon ii = new ImageIcon(this.getClass().getResource(Nave));//oa agarra el archivo 
        imagen = ii.getImage();
        ancho = imagen.getWidth(null);
        alto = imagen.getHeight(null);
        misiles = new ArrayList();
        visible = true;
        x = posX;
        y = posY;
        anchocanvas=anchocanva;
    }
 
    public void mover() {
 
        x += dx;
        if (x < 1) {             x = 1;         }         if(x>=anchocanvas-ancho){
        x=anchocanvas-ancho;
        }
    }
 
    public void setPos(int x, int y){
        this.x=x;
        this.y=y;
    }
 
    public int getX() {
        return x;
    }
 
    public int getY() {
        return y;
    }
 
    public Image getImage() {
        return imagen;
    }
 
    public void setVisible(boolean visible) {
        this.visible = visible;
    }
 
    public boolean isVisible() {
        return visible;
    }
 
    public ArrayList getMisiles() {
        return misiles;
    }
 
    public Rectangle getBounds() {
        return new Rectangle(x, y, ancho, alto);
    }
 
    public void keyPressed(KeyEvent e) {
 
        int key = e.getKeyCode();
 
        if (key == KeyEvent.VK_SPACE) {
            disparar();
        }
 
        if (key == KeyEvent.VK_LEFT) {
            dx = -1;
        }
 
        if (key == KeyEvent.VK_RIGHT) {
            dx = 1;
        } 
    }
 
    public void disparar() {
        if(misiles.size()<5){
            misiles.add(new Misil((x + ancho/2)-2, y));
        }
    }
 
    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
 
        if (key == KeyEvent.VK_LEFT) {
            dx = 0;
        }
 
        if (key == KeyEvent.VK_RIGHT) {
            dx = 0;
        }
    }
}

 

Alien.java

package spaceinvaders;
 
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
 
import java.util.ArrayList;
 
import javax.swing.ImageIcon;
/**
 *
 * @author JOSE GONZALEZ
 */
public class Alien {
 
    private String alien = "alien1.png";
 
    private int dx;
    private int dy;
    private int x;
    private int y;
    private int movimientos_max;
    private int movimientos_hechos;
    private int ciclos_max;
    private int ciclos;
    private int ancho;
    private int alto;
    private boolean visible;
    private Image imagen;
    private ArrayList misiles;
 
    public Alien(int posX, int posY) {
        ImageIcon ii = new ImageIcon(this.getClass().getResource(alien));
        imagen = ii.getImage();
        ancho = imagen.getWidth(null);
        alto = imagen.getHeight(null);
        visible = true;
        x = posX;
        y = posY;
        dx = 10;
        dy = 10;
        movimientos_max = 6;
        movimientos_hechos = movimientos_max/2;
        ciclos_max = 2;
        ciclos = 0;
        misiles = new ArrayList();
    }
 
    public void mover() {
 
        x += dx;
        movimientos_hechos++;
        if (movimientos_hechos >= movimientos_max) {
            dx *= -1;
            movimientos_hechos = 0;
            ciclos++;
            if(ciclos>=ciclos_max){
                mover_abajo();
                ciclos=0;
            }
        }
    }
 
    public void mover_abajo(){
        y += dy;
    }
 
    public int getX() {
        return x;
    }
 
    public int getY() {
        return y;
    }
 
    public Image getImage() {
        return imagen;
    }
 
    public ArrayList getMisiles() {
        return misiles;
    }
 
    public void setVisible(boolean visible) {
        this.visible = visible;
    }
 
    public boolean isVisible() {
        return visible;
    }
 
    public Rectangle getBounds() {
        return new Rectangle(x, y, ancho, alto);
    }
 
    public Misil fire() {
        return new Misil((x + ancho/2)-2, y + alto);
    }
}

 

Misil.java

package spaceinvaders;
 
import java.awt.Image;
 
import java.awt.Rectangle;
 
import javax.swing.ImageIcon;
/**
 *
 * @author JOSE GONZALEZ
 */
public class Misil {
 
    private int x, y;
    private Image imagen;
    boolean visible;
    private int ancho, alto;
    private final int VELOCIDAD_MISIL = 6;
 
    public Misil(int x, int y) {
 
        ImageIcon ii= new ImageIcon(this.getClass().getResource("missile.png"));
        imagen = ii.getImage();
        visible = true;
        ancho = imagen.getWidth(null);
        alto = imagen.getHeight(null);
        this.x = x;
        this.y = y;
    }
 
    public Image getImage() {
        return imagen;
    }
 
    public int getX() {
        return x;
    }
 
    public int getY() {
        return y;
    }
 
    public boolean isVisible() {
        return visible;
    }
 
    public void setVisible(Boolean visible) {
        this.visible = visible;
    }
 
    public Rectangle getBounds() {
        return new Rectangle(x, y, ancho, alto);
    }
 
    public void mover() {
        y -= VELOCIDAD_MISIL;
        if (y < 5)
             visible = false;
    }
    public void mover_alien() {
        y += VELOCIDAD_MISIL/2;
        if (y > 450-alto)
            visible = false;
    }
}

 

Imagenes usadas en el programa:

https://www.safecreative.org/work/1302164602724-alien1

https://www.safecreative.org/work/1302164602717-missile

https://www.safecreative.org/work/1302164602700-spaceship1

https://www.safecreative.org/work/1302164602694-spaceshiphd1

Compartir este tema:
El 21 mayo, 2011 · 0 Comentarios
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti

Nombre del Programa: SharkTube

Versión del Programa: 1.1 ( Renaissance )

Autor(es): Sebastián Castaño (.:WindHack:.)

Sistema Operativos: Multiplataforma.

- Lenguaje en que fue programado: Python 2.6.x

Licencia bajo la que fue liberado: Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0Ver Registro en SafeCreative.org

Fecha de lanzamiento: 12 de abril de 2011

Idioma(s): Español/Inglés

Funcionalidad/Tópico del Programa: Script para descargar directamente vídeos de YouTube.

Captura de pantalla del programa ejecutándose:

Para ver la información completa y los enlaces de descarga, clic AQUÍ.

 

Compartir este tema:
El 24 marzo, 2011 · 3 Comentarios
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti

Sudokux es una aplicación en Java, capaz de resolver en menos de un segundo cualquier sudoku que le propongas.

Nombre del Programa: Sudokux.

Versión del Programa: 1.0.

Autor(es): Pablo Martínez Insua (pablomi).

Sistema Operativo: Multiplataforma.

Lenguaje en que fue programado: Java 1.6.x.

Licencia bajo la que fue liberado: Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0. Ver registro en Safe Creative.

Fecha de lanzamiento: 06 – 09 – 2010.

Idioma(s): Español.

Captura:

Código:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
 
// Sudokux 1.0 - Pablo Martínez Insua
//
// Programa registrado.
// Licencia: -http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es_PE
 
public class Sudokux {
 
	private static int[][] casilla;
 
	JFrame ventana = new JFrame("Sudokux 1.0");
	JMenuBar menus = new JMenuBar();
	JMenu menuArchivo = new JMenu("Archivo");
	JMenu menuHelp = new JMenu("Ayuda");
	JMenuItem archivoSalir = new JMenuItem("Salir");
	JMenuItem helpAcercaDe = new JMenuItem("Acerca de");
 
	Font fontRespuesta = new Font("Verdana", Font.BOLD, 20);
	JButton resolver = new JButton("Resolver");
	JButton borrar = new JButton("Borrar");
 
	JTextField numeros[][] = new JTextField[10][10];
 
	String solucion;
 
	public static void main(String[] args){
 
		casilla = new int[10][10];
 
		for(int col=0; col<9; col++)
			for(int fil=0; fil<9 ; fil++)
				casilla[fil][col] = 0;
 
		Sudokux mostrarVentana = new Sudokux();
	}
 
	public Sudokux(){
		configurar();
		acciones();
	}
 
	void configurar(){
		menuArchivo.add(archivoSalir);
		menuHelp.add(helpAcercaDe);
		menus.add(menuArchivo);
		menus.add(menuHelp);
 
		for(int i=1; i<10; i++){
			for(int j=1; j<10; j++){
				numeros[i][j] = new JTextField(1);
				ventana.add(numeros[i][j]);
				numeros[i][j].setFont(fontRespuesta);
			}
		}	
 
		ventana.add(menus);
		ventana.setJMenuBar(menus);
		ventana.add(resolver);
		ventana.add(borrar);
		ventana.setVisible(true);
		ventana.setSize(300, 420);
		ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ventana.setLayout(new FlowLayout(FlowLayout.CENTER));
	}
 
	void acciones(){
 
		archivoSalir.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
 
		helpAcercaDe.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				JOptionPane.showMessageDialog(null, "Programa: Sudokux\nAutor: Pablo Martínez Insua\nVersión: 1.0", "Acerca de", JOptionPane.INFORMATION_MESSAGE);
			}
		});
 
		resolver.addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent e){
				recoger_datos();
				resuelve(1,1);
				for (int col=1; col<10; col++){
            				for (int fil=1; fil<10 ; fil++){
						numeros[fil][col].setText(""+casilla[fil][col]);
					}
				}
 
			}
		});
		borrar.addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent e){
				for (int col=1; col<10; col++){
            				for (int fil=1; fil<10 ; fil++){
						numeros[fil][col].setText("");
						casilla[fil][col] = 0;
					}
				}
 
			}
		});
	}
 
 
	void recoger_datos(){
		int tiene = 1;
		for (int col=1; col<10; col++){
            		for (int fil=1; fil<10 ; fil++){
				if(!numeros[fil][col].getText().equals(""))
					casilla[fil][col] = Integer.parseInt(numeros[fil][col].getText());
					tiene = 0;
			}
		}
		if(tiene==1){
			JOptionPane.showMessageDialog(null, "Introduce el sudoku a resolver.", "Error", JOptionPane.WARNING_MESSAGE);
		}
	}
 
	private static boolean resuelve(int fil, int col){
 
        	boolean resuelto = false, casillaSegura = false;
        	int num = 1;
 
		if (casilla[fil][col]!=0)
        	{
            		casillaSegura = true;
            		num=9;
		}
 
		while(!resuelto && num<10)
		{
			if(!casillaSegura)
				casilla[fil][col] = num;
			if(es_valida(fil,col))
			{
				if(fil==9 && col==9)
					resuelto = true;
				else if (fil<9)
 					resuelto = resuelve(fil+1, col);
				else if(fil==9)
					resuelto = resuelve(1, col+1);
			}
			num++;
		}
 
		if (!resuelto && !casillaSegura)
			casilla[fil][col] = 0;
 
		return resuelto;
	}
 
	private static boolean es_valida(int fil, int col){
 
		for(int i=1; i<10; i++)
			if(fil!=i && casilla[fil][col] == casilla[i][col])
				return false;
 
		for (int i=1; i<10; i++)
			if (col!=i && casilla[fil][col] == casilla[fil][i] )
				return false;
 
		int cuadroColumna = (int)(Math.floor((col-1)/3)*3)+1,
		    cuadroFila = (int)(Math.floor((fil-1)/3)*3)+1;
 
		for(int i=cuadroColumna; i<cuadroColumna +3; i++)
			for (int j=cuadroFila; j<cuadroFila+3; j++)
				if(col!=i && fil!=j && casilla[fil][col] == casilla[j][i])
					return false;
 
		return true;
	}
}
Compartir este tema:
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti

Un completo tutorial donde se explica como hacer una actualización no oficial del Motorola DEXT (MB200) a la versión 2.1 de Android. Especialmente dedicada a personas Venezolanas que posean este modelo, debido a características únicas del mismo en este País.

+

Para ver el tutorial click AQUI