lunes, 13 de marzo de 2017

Unidad #1 Introducción al lenguaje ensamblador

1.1 Importancia de la programación en lenguaje ensamblador

Definición: El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de microprocesador.

La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en él se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.

1.2 EL PROCESADOR Y SUS REGISTROS INTERNOS

Ø  Definición de registros:

Un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas.

Ø  Función de los registros:

Los registros están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos. Los registros se miden generalmente por el número de bits que almacenan; por ejemplo, un "registro de 8 bits" o un "registro de 32 bits“.

 La CPU contiene un conjunto de localidades de almacenamiento temporal de datos de alta velocidad llamada registro. Algunos de los registros están dedicados al control, y solo la unidad de control tiene acceso a ellos. Los registros restantes son los registros de uso general y el programador es el usuario que tiene acceso a ellos.

Algunos registros básicos:

Dentro del conjunto básico de registros de control se deben incluir a los siguientes:
A. Contador de programa (PC).
B. Registro de direcciones de la memoria (MAR).
C. Registro de datos (RD).
D. Registro de instrucciones (IR).
E. Palabra de estado de programa (PSW).

Función del PC
La función del PC consiste en seguir la pista de la instrucción por buscar (capturar) en el siguiente ciclo de máquina, por lo tanto contiene la dirección de la siguiente instrucción por ejecutar. El PC es modificado dentro del ciclo de búsqueda de la instrucción actual mediante la suma de una constante. El número que se agrega al PC es la longitud de una instrucción en palabras.

Función de MAR
 Funciona como registro de enlace entre la CPU y el canal de direcciones. Cuando se logra el acceso a la memoria la dirección es colocada en el MAR por la unidad de control y ahí permanece hasta que se completa la transacción. El número de bit que hay en el MAR es igual al del canal de direcciones.

Función de RD
La función del RD consiste en proporcionar un área de almacenamiento temporal (memoria intermedia, acumulada o buffer) de datos que se intercambian entre la PCU y la memoria. Los datos pueden ser instrucciones (obtenidos en el ciclo de ejecución) o datos del operando (obtenidos en el ciclo de ejecución). Debido a su conexión directa con el canal de datos el RD contiene el mismo número de bit que dicho canal.

Función de IR
Es un registro que conserva el código de operación de la instrucción en todo el ciclo de la máquina. El código es empleado por la unidad de control de la CPU para generar las señales apropiadas que controla le ejecución de la instrucción. La longitud del ER es la longitud en bit del código de operación.

Función de PSW
 La palabra de estado o condición de programa almacena información pertinente sobre el programa que este ejecutándose.

Además el PSW contiene bit que hacen posible que la computadora responda a solicitudes de servicio asincrónicas generadas por dispositivos de Entrada-Salida, o condiciones de error interno. Estas señales se denominan interrupciones.


1.3 Memoria Principal (RAM)

RAM es el acrónimo inglés de Random Access Memory (memoria de acceso aleatorio). La memoria principal está formada por un conjunto de unidades llamadas palabras.

Dentro de cada una de estas palabras se guarda la información que constituye una instrucción o parte de ella (puede darse el caso de que una sola instrucción necesite varia palabras), o un dato o parte de un dato (también un dato puede ocupar varias palabras).
A la cantidad de palabras que forman la MP se le denomina capacidad de memoria.

Una palabra está formada a su vez de unidades más elementales llamadas bits, del mismo modo que en el lenguaje natural una palabra está formada por letras.




1.4 CONCEPTO DE INTERRUPCIONES

Una interrupción es una situación especial que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción para tratarla. Tal situación se da, por ejemplo, cuando un periférico requiere la atención del procesador para realizar una operación de E/S.

PASOS PARA EL PROCESAMIENTO

1. Terminar la ejecución de la instrucción máquina en curso.

2. Salva el valor de contador de programa, IP, en la pila, de manera que en la CPU, al terminar el proceso, pueda seguir ejecutando el programa a partir de la última instrucción.

3. La CPU salta a la dirección donde está almacenada la rutina de servicio de interrupción (ISR, Interrupt Service Routine) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que generó la interrupción.


4. Una vez que la rutina de la interrupción termina, el procesador restaura el estado que había guardado en la pila en el paso 2 y retorna al programa que se estaba usando anteriormente.

1.5 LLAMADAS A SERVICIOS DEL SISTEMA
 
Una llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos recursos del sistema requieren la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos. En otras palabras, el sistema operativo actúa como intermediario, ofreciendo una interfaz de programación (API) que el programa puede usar en cualquier momento para solicitar recursos gestionados por el sistema operativo.

Algunos ejemplos de llamadas al sistema son las siguientes:

Time: que permite obtener la fecha y hora del sistema.

Write: que se emplea para escribir un dato en un cierto dispositivo de salida, tales como una pantalla o un disco magnético.

Read: que es usada para leer de un dispositivo de entrada, tales como un teclado o un disco magnético.

Open: que es usada para obtener un descriptor de un fichero del sistema, ese fichero suele pasarse a write.

1.6 MODOS DE DIRECCIONAMIENTO
 
•Los llamados modos de direccionamiento son las diferentes maneras de especificar en informática un operando dentro de una instrucción en lenguaje ensamblador.


•Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y / o constantes, contenida dentro de una instrucción de la máquina o en otra parte.


1.7 PROCESO DE ENSAMBLADO Y LIGADO
 
1. El programa utiliza un editor de texto para crear un archivo de texto ASCII, conocido como archivo de código fuente.

2. El ensamblador lee el archivo de código fuete y produce un archivo de código objeto, una traducción del programa a lenguaje máquina. De manera opcional, produce un archivo de listado. Si ocurre un error, el programador debe regresar al paso 1 y corregir el programa. 

3. El enlazador lee el archivo de código objeto y verifica si el programa contiene alguna llamada a los procedimientos en una biblioteca de enlace. El enlazador copia cualquier procedimiento requerido de la biblioteca de enlace, lo combina con el archivo de código objeto y produce el archivo ejecutable. De manera opcional, el enlazador puede producir un archivo de mapa.


4. La herramienta cargador (loader) del sistema operativo lee el archivo ejecutable y lo carga en memoria, y bifurca la CPU hacia la dirección inicial del programa, para que éste empiece a ejecutarse.

1.8 DESPLEGADO DE MENSAJES EN EL MONITOR
 
•Todos los gráficos y el texto que se muestran en el monitor se escriben en la RAM de visualización de video, para después enviarlos al monitor mediante el controlador de video. El controlador de video es en sí un microprocesador de propósito especial, que libera a la CPU principal del trabajo de controlar el hardware de video.

•Un monitor de pantalla de cristal líquido (LCD) digital directo recibe un flujo de bits digitales directamente desde el controlador de video, y no requiere del barrido de trama.



Referencias:
https://es.slideshare.net/romo91/el-procesador-y-sus-registros-internos
http://leo-yac.wixsite.com/lenguaje-ensamblador/llamadas-a-servicios-del-sistema
http://leo-yac.wixsite.com/lenguaje-ensamblador/modos-de-direccionamiento
http://leo-yac.wixsite.com/lenguaje-ensamblador/desplegado-de-mensaje-en-el-monitor




martes, 6 de diciembre de 2016

Programas en NetBeans

Alumnas:
Nancy Yessenia Garcia Mayorga
Yesenia Lizbeth Guerrero Garcia
Yariseth Lizeth Guerrero Garcia


Programa  Gotas de Lluvia
Frame

package FigurasGraficas13;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class GotasDeLluvia extends javax.swing.JFrame implements ActionListener{
 private Random aleatorio;
    private javax.swing.Timer temporizador;
    private Timer timer;
    
   
    public GotasDeLluvia() {
        initComponents();
        
         aleatorio=new Random();
        timer = new Timer(1000,this);
        
        timer.start();
    }

  
    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GotasDeLluvia().setVisible(true);
            }
        });
    }

                        
    private javax.swing.JTextField campoIntervalo;
    private javax.swing.JSlider deslizable;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel pane;
                    

    @Override
    public void actionPerformed(ActionEvent ae) {
       
    
    int x,y,tamaño;
    Graphics papel=pane.getGraphics();
    papel.setColor(Color.blue);
     
    x=aleatorio.nextInt(200);
    y=aleatorio.nextInt(200);
    tamaño=aleatorio.nextInt(20);
    papel.fillOval(x, y, tamaño, tamaño);
    }
    
     public void stateChanged(ActionEvent e) {
         int timeGab=deslizable.getValue();
         campoIntervalo.setText(Integer.toString(timeGab));
         temporizador.setDelay(timeGab);
         

    }
}


Consola de corrida del programa


_________________________________________________________________________________


Programa  Imagen Demo
Frame

package FigurasGraficas14;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class ImagenDemo extends JFrame implements ActionListener {
private int posicionX=0, posicionY=0;
    
public ImagenDemo() {
        initComponents();
    }


    @SuppressWarnings("unchecked")
   private void botonActionPerformed(java.awt.event.ActionEvent evt) {                                      
         ImageIcon miImagen=new ImageIcon(campoArchivo.getText());
        Graphics papel=pane.getGraphics();
        miImagen.paintIcon(this,papel,posicionX,posicionY);
        posicionX=posicionX+30;
        posicionY=posicionY+30;

    }                                     
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ImagenDemo().setVisible(true);
            }
        });
    }
 private javax.swing.JPanel PANEL;
    private javax.swing.JButton boton;
    private javax.swing.JTextField campoArchivo;
    private javax.swing.JLabel nombre_A;
    private javax.swing.JPanel pane;
}
Consola de corrida del programa
 


_________________________________________________________________________________


Programa  Circulo Mayor
Fram

package FigurasGraficas15;

import javax.swing.JFrame;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Mayor extends JFrame implements ChangeListener {

    public Mayor() {
        initComponents();
        deslizanteRojo.addChangeListener(this);
        deslizanteAzul.addChangeListener(this);
    }

    @SuppressWarnings("unchecked")
  public static void main(String args[]) {
         Mayor demo = new Mayor();
        demo.setSize(300,300);
        demo.setVisible(true);;
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Mayor().setVisible(true);
            }
        });
    }
private javax.swing.JTextField campoTexto;
    private javax.swing.JSlider deslizanteAzul;
    private javax.swing.JSlider deslizanteRojo;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void stateChanged(ChangeEvent e) {
       Graphics papel = panel.getGraphics();
         
        int valorRojo, valorAzul;
        valorRojo = deslizanteRojo.getValue();
        valorAzul = deslizanteAzul.getValue();
        
        papel.setColor(Color.white);
        papel.fillRect(0, 0, 200, 150);
        papel.setColor(Color.red);
        papel.fillOval(10,10,valorRojo,valorRojo);
        papel.setColor(Color.blue);
        papel.fillOval(100, 10, valorAzul, valorAzul);
        
        if(valorRojo > valorAzul){
            campoTexto.setText("El rojo es mayor");
            
        }
        else {
            campoTexto.setText("El azul es mayor");
        }
    }
}

Consola de corrida del programa




_________________________________________________________________________________


Programa  Termometro
Frame

package FigurasGraficas16;

import javax.swing.JFrame;
import javax.swing.event.ChangeListener;
  import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Max extends JFrame implements ChangeListener,ActionListener {
private int max =0;

    public Max() {
        initComponents();
        deslizante.addChangeListener(this);
        botón.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
         Max demo = new Max();
        demo.setSize(200,300);
        demo.setVisible(true);;
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Max().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botón;
    private javax.swing.JTextField campoTexto;
    private javax.swing.JSlider deslizante;
    private javax.swing.JPanel jPanel1;
 @Override
    public void stateChanged(ChangeEvent e) {
int temp;
    temp=deslizante.getValue();
    if(temp>max){
        max=temp;   
    }
    mostrar(); 
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
campoTexto.setText("");
        max=0;
    }
    private void mostrar(){
    campoTexto.setText("El valor máximo es"+max );
}
}


Consola de corrida del programa


_________________________________________________________________________________


Programa  Carita Feliz/Triste
Frame

package FigurasGraficas17;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class FelizOTriste extends JFrame implements ActionListener  {

    private ImageIcon imagenFeliz, imagenTriste;
    
    public FelizOTriste() {
        initComponents();
         botónFeliz.addActionListener(this);
         botónTriste.addActionListener(this);
         
         imagenFeliz=new ImageIcon("feliz.png");
         imagenTriste=new ImageIcon("triste.png");  
          
    }
 @SuppressWarnings("unchecked")
public static void main(String args[]) {
        FelizOTriste demo=new FelizOTriste();
         demo.setSize(350,350);
         demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FelizOTriste().setVisible(true);
            }
        });
    }
private javax.swing.JButton botónFeliz;
    private javax.swing.JButton botónTriste;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
 @Override
    public void actionPerformed(ActionEvent event) {
        Graphics papel=panel.getGraphics();
         Object origen=event.getSource();
         if (origen==botónFeliz){
             imagenFeliz.paintIcon(this,papel,0,0);            
         }
         else{
             imagenTriste.paintIcon(this,papel,0,0);
             
         }
    
    }
}
Consola de corrida del programa




_________________________________________________________________________________


Programa Cajas
Frame

package FigurasGraficas18;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Cajas extends JFrame implements ChangeListener {


    public Cajas() {
        initComponents();
       deslizante.addChangeListener(this);
       
    }

    @SuppressWarnings("unchecked")
public static void main(String args[]) {
        Cajas demo=new Cajas();
        demo.setSize(250,150);
        demo.setVisible(true);
  java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Cajas().setVisible(true);
            }
        });
    }
    private javax.swing.JSlider deslizante;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
 @Override
    public void stateChanged(ChangeEvent e) {
        Graphics papel=panel.getGraphics();
        int X, NúmeroDeCajas,Contador;
        NúmeroDeCajas=deslizante.getValue();
        papel.setColor(Color.WHITE);
        papel.fillRect(0,0,180,50);
        X=10;
        Contador=1;
        papel.setColor(Color.black);
        while(Contador<=NúmeroDeCajas){
            papel.drawRect(X, 10, 10, 10);
            X=X+15;
            Contador++;
            
        }
    }

   
}
Consola de corrida del programa


_________________________________________________________________________________


Programa  Estrellas
Frame

package FigurasGraficas19;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Estrellas extends JFrame implements ActionListener  {
private Random aleatorio;
    
    public Estrellas() {
        initComponents();
        aleatorio=new Random();
        botónDibujar.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
 java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Estrellas().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JPanel panel;
        
       @Override
    public void actionPerformed(ActionEvent event) {
        Graphics papel=panel.getGraphics();
        papel.setColor(Color.black);
        papel.fillRect(0, 0, 200, 200);
        papel.setColor(Color.white);
        for(int contador=0;contador<20;contador++){
            int x,y,radio;
            x=aleatorio.nextInt(200);
            y=aleatorio.nextInt(200);
            radio=5;
            papel.fillOval(x, y, radio, radio);
        }
    
    }

Consola de corrida del programa


_________________________________________________________________________________


Programa Caminata Aleatoria
Frame

package FigurasGraficas20;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class CaminataAleatoria extends JFrame implements ActionListener  {
private Random aleatorio;

    public CaminataAleatoria() {
        initComponents();
        aleatorio=new Random();
        botónDibujar.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CaminataAleatoria().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JTextField campoTexto;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void actionPerformed(ActionEvent event) {
    Graphics papel=panel.getGraphics();
    int X,Y,pasosX,pasosY,nuevaX,nuevaY,pasos;
    papel.setColor(Color.white);
    int anchuraPapel;
    int alturaPapel;
    papel.fillRect(0,0,216,184);
    X=216/2;
    Y=184/2;
    for(pasos=0;
            X<216&&X>0
            &&
            Y<184&&Y>0;
            pasos++){
        pasosX=aleatorio.nextInt(100)-50;
        pasosY=aleatorio.nextInt(100)-50;
        
        nuevaX=X+pasosX;
        nuevaY=Y+pasosY;
        
        papel.setColor(Color.black);
        papel.drawLine(X,Y,nuevaX,nuevaY);
        
        X=nuevaX;
        Y=nuevaY;
                
    }
    campoTexto.setText("Le tomó "+pasos+" pasos");
    }
}


Consola de corrida del programa


_________________________________________________________________________________


Programa Apartamentos
Frame

package FigurasGraficas21;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class BloqueDeApartamentos extends JFrame implements ChangeListener{

    public BloqueDeApartamentos() {
        initComponents();
        deslizante1.addChangeListener(this);
        deslizante2.addChangeListener(this);
    }

    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
         BloqueDeApartamentos demo=new BloqueDeApartamentos();
        demo.setSize(500,350);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new BloqueDeApartamentos().setVisible(true);
            }
        });
    }
    private javax.swing.JSlider deslizante1;
    private javax.swing.JSlider deslizante2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void stateChanged(ChangeEvent e) {
         Graphics papel=panel.getGraphics();
        int pisos,apartamentos;
        int X,Y;
        Y=10;
        papel.setColor(Color.green);
        papel.fillRect(0,0,200,200);
        
        apartamentos=deslizante1.getValue();
        pisos=deslizante2.getValue();
        for(int piso=0;piso<=pisos;piso++){
            X=10;
            for (int contador=0;contador<=apartamentos;contador++){
                papel.setColor(Color.BLACK);
                papel.drawRect(X,Y,10,5);
                X=X+15;
            }
            Y=Y+15;
        }
    }
}

Consola de corrida del programa




_________________________________________________________________________________


Programa  Escalera
Frame

package FigurasGraficas22;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Escalera extends JFrame implements ActionListener   {


    public Escalera() {
        initComponents();
        botónDibujar.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
private void botónDibujarActionPerformed(java.awt.event.ActionEvent evt) {                                             
       
         Graphics papel=pane.getGraphics();

        papel.drawRect(20,20,20,20);
        papel.drawRect(20,50,20,20);
        papel.drawRect(20,80,20,20);
        papel.drawRect(20,110,20,20);
        papel.drawRect(20,140,20,20);
        
        papel.drawRect(50,50,20,20);
        papel.drawRect(50,80,20,20);
        papel.drawRect(50,110,20,20);
        papel.drawRect(50,140,20,20);
        
        papel.drawRect(80,80,20,20);
        papel.drawRect(80,110,20,20);
        papel.drawRect(80,140,20,20);
        
        papel.drawRect(110,110,20,20);
        papel.drawRect(110,140,20,20);
        
        papel.drawRect(140,140,20,20);
    }                                            
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Escalera().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel pane;
  @Override
    public void actionPerformed(ActionEvent event) {
    
      Graphics papel=pane.getGraphics();
         Object origen=event.getSource();
         if (origen==botónDibujar){
      
         }
    }
}
Consola de corrida del programa


_________________________________________________________________________________


Programa Globo


Clase
package FigurasGraficas23;

import java.awt.Color;
import java.awt.Graphics;


/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

class Globo {
    private int X=50;
    private int Y=50;
    private int diámetro=20;
    
    public void moverDerecha(int pasosX ){
        X=X+pasosX;
        
    }
    
    public void cambiarTamaño(int cambio ){
        diámetro=diámetro+cambio;
    }
    public void mostrar (Graphics papel){
        papel.setColor(Color.black);
        papel.drawOval(X,Y,diámetro,diámetro);
    }
}

Frame

package FigurasGraficas23;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 * @author Yesenia, Yariseth, Nancy
 */
public class UsarGlobo extends JFrame implements ActionListener {

private Globo globo;

    public UsarGlobo() {
        initComponents();
        botónMover.addActionListener(this);
        botónCrecer.addActionListener(this);
        globo=new Globo();
    }


    @SuppressWarnings("unchecked")
  public static void main(String args[]) {
        UsarGlobo demo=new UsarGlobo();
        demo.setSize(200,200);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UsarGlobo().setVisible(true);
            }
        });
    }
    private javax.swing.JButton botónCrecer;
    private javax.swing.JButton botónMover;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void actionPerformed(ActionEvent event) {
    Graphics papel=panel.getGraphics();
    if(event.getSource()==botónMover){
        globo.moverDerecha(20);
    }
    else{
        globo.cambiarTamaño(20);
        
    }
    papel.setColor(Color.white);
    papel.fillRect(0, 0, 350, 350);
    globo.mostrar(papel);
    }
}

Consola de corrida del programa


_________________________________________________________________________________


Programa Grafico
Frame

package FigurasGraficas24;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Gráfico extends JFrame implements ChangeListener{

 int a,b,c,d;
 private int altura=200,anchura=200;

    public Gráfico() {
        initComponents();
        aDeslizante.addChangeListener(this);
        bDeslizante.addChangeListener(this);
        cDeslizante.addChangeListener(this);
        dDeslizante.addChangeListener(this);
        
    }

    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
        Gráfico frame=new Gráfico();
        frame.setSize(320,350);
        frame.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Gráfico().setVisible(true);
            }
        });
    }
    private javax.swing.JSlider aDeslizante;
    private javax.swing.JTextField aTexto;
    private javax.swing.JSlider bDeslizante;
    private javax.swing.JTextField bTexto;
    private javax.swing.JSlider cDeslizante;
    private javax.swing.JTextField cTexto;
    private javax.swing.JSlider dDeslizante;
    private javax.swing.JTextField dTexto;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void stateChanged(ChangeEvent e) {
    a=aDeslizante.getValue();
    b=bDeslizante.getValue();
    c=cDeslizante.getValue();
    d=dDeslizante.getValue();
    
    aTexto.setText("a="+Integer.toString(a));
    bTexto.setText("b="+Integer.toString(b));
    cTexto.setText("c="+Integer.toString(c));
    dTexto.setText("d="+Integer.toString(d));
    dibujar();
    }
    private void dibujar(){
        Graphics papel=panel.getGraphics();
        papel.setColor(Color.white);
        papel.fillRect(0, 0, anchura, altura);
        double x,y,siguienteX,siguienteY;
        int pixelX,pixelY,siguientePixelX,siguientePixelY;
        papel.setColor(Color.black);
        for (pixelX=0;pixelX<=anchura;pixelX++){
            x=escalarX(pixelX);
            y=laFunción(x);
            pixelY=escalarY(y);
            siguientePixelX=pixelX+1;
            siguienteX=escalarX(siguientePixelX);
            siguienteY=laFunción(siguienteX);
            siguientePixelY=escalarY(siguienteY);
            papel.drawLine(pixelX, pixelY, siguientePixelX, siguientePixelY);
            
            
        }
    }
    private double laFunción(double x){
        return a*x*x*x+b*x*x+c*x+d;       
    }
    private double escalarX(int pixelX){
        double xInicial=-5,xFinal=5;
        double xEscalar=anchura/(xFinal-xInicial);
        return (pixelX-(anchura/2))/xEscalar;       
    }
    private int escalarY(double y){
        double yInicial=-5,yFinal=5;
        int coordPixel;
        double yEscala=altura/(yFinal-yInicial);
        coordPixel=(int) (-y*yEscala)+(int)(altura/2);
        return coordPixel;     
    }
}

Consola de corrida del programa


_________________________________________________________________________________


Programa Globo
Clase
package FigurasGraficas25;
import java.awt.*;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Globo {
 
      private int x;
    private int y;
    private int diámetro;
 
      public Globo(int xInicial,int yInicial,int diámetroInicial){
    x=xInicial;
    y=yInicial;
    diámetro=diámetroInicial;
 
    }
       public void cambiarTamaño(int cambio ){
        diámetro=diámetro+cambio;
    }
    public void mostrar (Graphics papel){
        papel.setColor(Color.black);
        papel.drawOval(x,y,diámetro,diámetro);
    }
               
}

Frame

package FigurasGraficas25;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class UsarGlobo extends JFrame implements ActionListener {
 
     private Globo[] fiesta = new Globo[10];

    public UsarGlobo() {
        initComponents();
        botónDibujar.addActionListener(this);
     
        fiesta[0] = new Globo(10, 10, 50);
        fiesta[1] = new Globo(50, 50, 100);
        fiesta[2] = new Globo(100, 100, 200);
    }
 @Override
    public void actionPerformed(ActionEvent event) {
        Graphics papel = panel.getGraphics();
        if(event.getSource() == botónDibujar) {
            fiesta[0].mostrar(papel);
            fiesta[1].mostrar(papel);
            fiesta[2].mostrar(papel);
        }
    }
    
    private void mostrarGlobos(Graphics papel) {
        for (int g = 0; g <= 2; g++) {
            fiesta[g].mostrar(papel);
        }  
    }
    
    private void cambiarTamaño() {
        for (int g = 0; g <= 2; g++) {
            fiesta[g].cambiarTamaño(20);
        }  
    }
public static void main(String args[]) {
        UsarGlobo demo=new UsarGlobo();
        demo.setSize(200,200);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UsarGlobo().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
}
Consola de corrida del programa


_________________________________________________________________________________


Programa Globo
Clase
package FigurasGraficas26;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Globo {
    private int x=10;
    private int y=10;
    private int radio=20;
    private int intervaloY=20;   

public void moverArriba(){
    y=y-intervaloY;
}
public void moverAbajo(){
    y=y+intervaloY;
}

public void mostrar(JPanel panel){
    Graphics papel=panel.getGraphics();
    papel.setColor(Color.white);
    papel.fillRect(0, 0, 550, 550);
    papel.setColor(Color.black);
    papel.drawOval(x, y, radio*2, radio*2);   
}
public int getRadio(){
    return radio;
}
public void setRadio(int nuevoRadio){
    radio=nuevoRadio;
   }
}

Frame

package FigurasGraficas26;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/*
 * @author Yesenia, Yariseth, Nancy
 */
public class UsarGlobo extends JFrame implements ChangeListener,ActionListener {
private Globo globo;

    public UsarGlobo() {
        initComponents();
        
        botónArriba.addActionListener(this);
        botónAbajo.addActionListener(this);
        deslizable.addChangeListener(this);
        globo=new Globo();
    }

    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
        UsarGlobo demo=new UsarGlobo();
        demo.setSize(500,500);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UsarGlobo().setVisible(true);
            }
        });
    }
    private javax.swing.JButton botónAbajo;
    private javax.swing.JButton botónArriba;
    private javax.swing.JTextField campoTexto;
    private javax.swing.JSlider deslizable;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void actionPerformed(ActionEvent event) {
       if(event.getSource()==botónArriba){
           globo.moverArriba();
       }
       else{
           globo.moverAbajo();
       }
       dibujar();
    }
    public void stateChanged (ChangeEvent event){
        int radio=deslizable.getValue();
        campoTexto.setText("Radio ="+radio);
        globo.setRadio(radio);
        dibujar();
    }
    private void dibujar(){
        globo.mostrar(panel);
    }
}


Consola de corrida del programa

_________________________________________________________________________________


Programa Animación


Clase Spaceinvader


package Juego;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/
public class SpaceInvaders extends JFrame implements KeyListener{

    //Constantes del Juego
    private final int TAMAÑO_NAVE = 50;
    private final int VELOCIDAD_JUGADOR = 3;
    private final ImageIcon Jugador = new ImageIcon("src\\Recursos\\Jugador.gif");
    private final ImageIcon Bala = new ImageIcon("src\\Recursos\\Bala.gif");
    
    //Variables para el movimiento del usuario
    private boolean Arriba = false;
    private boolean Abajo = false;
    private boolean Derecha = false;
    private boolean Izquierda = false;
    
    //Variable para pintar las balas
    private Bala ReferenciaBala;
    
    //Crea el motor del juego
    private MotorJuego Juego = new MotorJuego();
    
    //Variable que controla el juego
    private boolean GameOver = false;
    private boolean Pause = false;
    
    //Doble buffer
    private BufferStrategy DobleBuffer;
    
    
    public SpaceInvaders(){
        super(" S P A C E   I N V A D E R S");
        this.setSize(800,600);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        addKeyListener(this);
        createBufferStrategy(2);
        DobleBuffer = getBufferStrategy();
        requestFocus();
    }
    
    public void Jugar(){
        Juego.setNivel(1);
        Juego.setTamañoImagen(TAMAÑO_NAVE);
        BuclePrincipal();
    }
    
    @Override
    public void keyPressed(KeyEvent e) {
        switch(e.getKeyCode()){
            case 37:{       //Izquierda
                Izquierda = true;
                break;
            }
            case 38:{       //Arriba
                Arriba = true;
                break;
            }
            case 39:{       //Derecha
                Derecha = true;
                break;
            }
            case 40:{       //Abajo
                Abajo = true;
                break;
            }
        }
    }
    
    @Override
    public void keyReleased(KeyEvent e) {
        switch(e.getKeyCode()){
            
            case 37:{       //Izquierda
                Izquierda = false;
                break;
            }
            case 38:{       //Arriba
                Arriba = false;
                break;
            }
            case 39:{       //Derecha
                Derecha = false;
                break;
            }
            case 40:{       //Abajo
                Abajo = false;
                break;
            }
            case 65:{       //Letra A
                Juego.NuevaBala();
                break;
            }
        }
    }    
    
    @Override
    public void keyTyped(KeyEvent e) {}
    
    
    
    /*
     * Pinta cada uno de los componentes del juego
     */
    
    private void BuclePrincipal(){
        while(!GameOver){
            ActualizarJuego();
            PintarJuego();
            try{
                Thread.sleep(20);
            }
            catch(Exception Error){System.out.println("ERROR INTERNO DEL JUEGO");}
        }
    }
    
    private void ActualizarJuego(){
        PosicionarJugador();
        Juego.Jugar();
    }
    
    public void PosicionarJugador(){
        if(Izquierda){Juego.setJugadorPosicionX(Juego.getJugadorPosicionX() - VELOCIDAD_JUGADOR);}
        if(Derecha){Juego.setJugadorPosicionX(Juego.getJugadorPosicionX() + VELOCIDAD_JUGADOR);}
        if(Arriba){Juego.setJugadorPosicionY(Juego.getJugadorPosicionY() - VELOCIDAD_JUGADOR);}
        if(Abajo){Juego.setJugadorPosicionY(Juego.getJugadorPosicionY() + VELOCIDAD_JUGADOR);}
    }
    
    private void PintarJuego(){
        //Pinta el Jugador
        paint(getGraphics());
    }
   
    
    @Override
    public void paint(Graphics g){
        g = DobleBuffer.getDrawGraphics();
        g.setColor(this.getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
        
        //Pinta el Jugador
        g.drawImage(Jugador.getImage(), Juego.getJugadorPosicionX(), Juego.getJugadorPosicionY(), this);
        
        //Pinta las balas
        for(int i = 0; i < Juego.getNumeroBalas(); i++){
            ReferenciaBala = Juego.getBala(i);
            g.drawImage(Bala.getImage(), ReferenciaBala.getX(), ReferenciaBala.getY(), this);
        }
        
        //Pinta las naves
        for(int i = 0; i < Juego.NAVES_X; i++){
            for(int j = 0; j < Juego.NAVES_Y; j++){
                g.drawImage(Juego.getNave(i, j), 10 + i*TAMAÑO_NAVE, 30 + j*TAMAÑO_NAVE, this);
            }
        }
        
        DobleBuffer.show();
        
        
    }
}

Clase Nave


package Juego;

import java.awt.Image;
import javax.swing.ImageIcon;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/
public class Nave {
    private ImageIcon Imagen = null;
    private int Resistencia = 0;
    
    public Nave(int TipoEnemigo){
        Imagen = new ImageIcon("src\\Recursos\\Nave" + TipoEnemigo + ".gif");
        switch(TipoEnemigo){
            case 0:{
                Resistencia = 1;
                break;
            }
            case 1:{
                Resistencia = 2;
                break;
            }
            case 2:{
                Resistencia = 3;
                break;
            }
            case 3:{
                Resistencia = 4;
                break;
            }
        }
    }
    
    public Image getImagen(){
        return Imagen.getImage();
    }
    
    public boolean DisminuirResistencia(){   //Devuelve true si su resistencia ha llegado a 0
        Resistencia--;
        if(Resistencia == 0){
            return true;
        }
        else{
            return false;
        }
    }
}

Clase MotorJuego


package Juego;

import java.awt.Image;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Random;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/
public class MotorJuego {

    private Random NumeroAleatorio = new Random();
    private final int MAXIMA_POSICION_JUGADOR_X = 750;
    private final int MAXIMA_POSICION_JUGADOR_Y = 550;
    public final int NAVES_X = 15;
    public final int NAVES_Y = 5;
    private int JugadorPosicionX = MAXIMA_POSICION_JUGADOR_X / 2;
    private int JugadorPosicionY = MAXIMA_POSICION_JUGADOR_Y;
    private int VelocidadJuego = 0;
    private int TamañoImagen = 50;
    //Variables para el control de las balas
    private ArrayList<Bala> Balas = new ArrayList();
    private int NumeroBalas = 0;
    //Variable para el control de los enemigos
    private Nave[][] MatrizNaves = new Nave[NAVES_Y][NAVES_X];
    private int PulsosBucle = 0;
    private int Pulsos = 0;
    private int CantidadEnemigos = 0;
    //Variables para la deteccion de colisiones
    private Rectangle Imagen1 = new Rectangle();    //Para las naves alienigenas
    private Rectangle Imagen2 = new Rectangle();    //Para las balas del usuario

    public void NuevaBala() {
        Balas.add(new Bala(JugadorPosicionX + 25, JugadorPosicionY));
        NumeroBalas++;
    }

    public MotorJuego() {
        //Establece el tamaño de las balas del jugador
        Imagen2.height = 17;
        Imagen2.width = 7;

        //Establece el tamaño de las naves
        Imagen1.height = 50;
        Imagen1.width = 50;
    }

    public int getNumeroBalas() {
        return NumeroBalas;
    }

    public Bala getBala(int Indice) {
        return Balas.get(Indice);
    }

    public void setTamañoImagen(int Tamaño) {
        this.TamañoImagen = Tamaño;
    }

    public void EstablecerNivel(int Nivel) {
        this.VelocidadJuego = Nivel * 10;
    }

    public int getJugadorPosicionX() {
        return JugadorPosicionX;
    }

    public int getJugadorPosicionY() {
        return JugadorPosicionY;
    }

    public Image getNave(int X, int Y) {
        if (MatrizNaves[Y][X] == null) {
            return null;
        } else {
            return MatrizNaves[Y][X].getImagen();
        }
    }

    public void setJugadorPosicionX(int X) {
        if (X >= 0 && X < MAXIMA_POSICION_JUGADOR_X) {
            this.JugadorPosicionX = X;
        }
    }

    public void setJugadorPosicionY(int Y) {
        if (Y >= 25 && Y < MAXIMA_POSICION_JUGADOR_Y) {
            this.JugadorPosicionY = Y;
        }
    }

    /**
     * ************************************************************
     * Acá genera enemigos aleatorios y crea posiciones aleatorias*
     * ************************************************************
     */
    private int FuncionPulsos(int X) {
        return -10 * X + 60;
    }

    public void setNivel(int Nivel) {
        this.Pulsos = FuncionPulsos(Nivel);
    }

    private void GenerarEnemigo() {
        int X = NumeroAleatorio.nextInt(NAVES_X);
        int Y = NumeroAleatorio.nextInt(NAVES_Y);
        int TipoNave = NumeroAleatorio.nextInt(4);

        //Verifica que esa posición no exista
        while (MatrizNaves[Y][X] != null) {
            X = NumeroAleatorio.nextInt(NAVES_X);
            Y = NumeroAleatorio.nextInt(NAVES_Y);
        }

        MatrizNaves[Y][X] = new Nave(TipoNave);
        CantidadEnemigos++;
    }

    private void DetectarColisiones() {
        //Detecta colisiones entre las balas y los aliens
        for (int i = 0; i < NAVES_X; i++) {
            for (int j = 0; j < NAVES_Y; j++) {
                //Obtiene la posición de la nave alien
                if (MatrizNaves[j][i] != null) {
                    Imagen1.x = 10 + i * TamañoImagen;
                    Imagen1.y = 10 + j * TamañoImagen;

                    //La compara con las posiciones de las balas
                    for (int k = 0; k < Balas.size(); k++) {
                        Imagen2.x = Balas.get(k).getX();
                        Imagen2.y = Balas.get(k).getY();

                        if (Imagen1.intersects(Imagen2)) {
                            if (MatrizNaves[j][i].DisminuirResistencia()) {
                                MatrizNaves[j][i] = null;
                            }
                            Balas.remove(k);
                            NumeroBalas--;
                            break;
                        }
                    }
                }
            }
        }
    }

    public void Jugar() {

        //Mueve un poco las balas
        for (int i = 0; i < NumeroBalas; i++) {
            if (Balas.get(i).MoverBala()) {
                Balas.remove(i);
                NumeroBalas--;
            }
        }

        //Si el tiempo es el correcto crea un nuevo enemigo en una posición aleatoria
        PulsosBucle++;
        if (PulsosBucle == Pulsos) {
            PulsosBucle = 0;
            if (CantidadEnemigos != NAVES_X * NAVES_Y) {
                GenerarEnemigo();
            }
        }

        //Verifica las colisiones
        DetectarColisiones();
    }
}

Clase Bala


package Juego;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/
public class Bala {

    private final int VELOCIDAD_BALA = 5;
    
    private int PosicionX = 0;
    private int PosicionY = 0;

    public Bala(int PosicionX, int PosicionY) {
        this.PosicionX = PosicionX;
        this.PosicionY = PosicionY;
    }

    public boolean MoverBala(){
        PosicionY = PosicionY - VELOCIDAD_BALA;
        if(PosicionY <= 0){
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public int getX() {
        return PosicionX;
    }

    public int getY() {
        return PosicionY;
    }

    public void setX(int X) {
        this.PosicionX = X;
    }

    public void setY(int Y) {
        this.PosicionY = Y;
    }
}




Frame

package Juego;
import Juego.SpaceInvaders;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

/**
 *@author
 *  Yesenia Lizbeth Guerrero Garcia
 *Nancy Yessenia Garcia Mayorga
 * Yariseth Lizeth Guerrero Garcia
*/

public class Principal {
 
    private ImageIcon ImagenMenu = new ImageIcon("src\\Recursos\\Menu.jpg");
    private JFrame Ventana = null;
 
    public Principal(){
        CrearInterfaz();
    }
 
    private void CrearInterfaz(){
     
        //Crea el Frame
        Ventana = new JFrame("Space Invaders -- Menú Principal");
        Ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Ventana.setVisible(true);
        Ventana.setSize(603,447);
        Ventana.setResizable(false);
        Ventana.setLayout(null);
     
        //Añade fondo al frame
        JLabel Fondo = new JLabel(ImagenMenu);
        Fondo.setBounds(0,0,597,418);
        Fondo.setVisible(true);
     
        //Añade los botones
        JButton btnNuevoJuego = new JButton("Nuevo Juego");
        JButton btnEstadisticas = new JButton("Estadisticas");
        JButton btnOpciones = new JButton("Opciones Administrativas");
     
        btnNuevoJuego.setVisible(true);
        btnEstadisticas.setVisible(true);
        btnOpciones.setVisible(true);
     
        btnNuevoJuego.setBounds(205,274,217,30);
        btnEstadisticas.setBounds(205,304,217,26);
        btnOpciones.setBounds(205,330,217,26);
     
        Ventana.add(btnNuevoJuego);
        Ventana.add(btnEstadisticas);
        Ventana.add(btnOpciones);
        Ventana.add(Fondo);
     
     
     
        //Añade ActionListeners a los botones
        btnNuevoJuego.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                NuevoJuego();
            }
        });
     
        btnEstadisticas.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(Ventana, "Temporalemtne no se encuentra esta opción");
            }
        });
     
        btnOpciones.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(Ventana, "Temporalmente no se encuentra esta opción");
            }
        });
    }
 
    private void NuevoJuego(){
        SpaceInvaders Juego = new SpaceInvaders();
        Juego.Jugar();
    }
 
    public static void main(String args[]){
     
        SpaceInvaders Juego = new SpaceInvaders();
        Juego.Jugar();
    }
}


Consola de corrida del programa



_________________________________________________________________________________