EJERCICIO 4 Agosto 19, 2008
Posted by beceoca in 1.add a comment
BEATRIZ GARCÍA
ENUNCIADO EJERCICIO 4
Hola,perdón por el retraso he tenido problemas con Internet.
En este ejercicio vamos a trabajar con JMF. A la hora de realizar el ejercicio para que sea un poco más fácil, vamos a suponer dos cosas:
- Si al reproducir un fichero de audio le pedimos al player que me dé la componente de video, el player devolverá null.
- Para ver cuanto tiempo dura la reproducción de un fragmento de audio o de vídeo, lo vamos a realizar reproduciendo dicho fragmento, sin visualizarlo, y por medios ajenos al JMF mediremos cuánto tiempo ha tardado en reproducirse.
Hechas estas suposiciones, se trata ahora de construir un programa que reciba como argumentos de entrada(por la línea de comandos) una lista de archivos de video y de audio indistintamente.
Al ejecutarse el programa, imprimirá por consola el título de cada archivo, el tipo de archivo(audio o video) y su duración.
Después de realizar eso, seleccionará el fragmento más corto de todos ellos(da igual que sea de audio o de video) y lo volverá a reproducirlo pero esta vez mostrándolo al usuario. Esta última reproducción tendrá que ser cíclica, es decir, cuando el fragmento termine, volverá a empezar desde el principio.
SOLUCIÓN EJERCICIO 4
import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;
import java.lang.String ;
import java.net.URL ;
import java.net.MalformedURLException ;
import java.io.IOExceptión ;
import javax.media.* ;
public class Reproductor extends JFrame implements ControllerListener, ActionListener{
Player player=null ;
Component visualComponent=null;
Component controlComponent=null;
Component progressBar=null;
int cont=0;
Timer timer;
static String archivo;
int numVeces=1;
public Reproductor(){
this.getContentPane().setLayout(new BorderLayout());
URL url=null;
timer=new Timer(1000,this);
try{
if((url=new URL(archivo))==null){
System.out.println(“ERROR”);
}
else{
player=Manager.createPlayer(url);
player.addControllerListener(this);
}
}catch(MalformedURLException e){
System.out.println(“URL NO VÁLIDA”);
}catch(IOException e){
System.out.println(“EXCEPCIÓN DE LECTURA/ESCRITURA”);
}catch(NoPlayerException e){
System.out.println(“NO EXISTE REPRODUCTOR”);
}
this.addWindowListener(new ManejadorVentana());
player.start();
timer.start();
}
public synchronized void ControllerUpdate(ControllerEvent event){
if(player==null){
System.out.println(“ERROR”);
return ;
}
if(event instanceof RealizeCompleteEvent){
if((visualComponent=player.getVisualComponent())!=null){
}else{
return null;
}
if((ControlComponent=player.getPanelComponent())!=null){
this.getContentPane().add(“South”, controlComponent);
}
validate();
}else if(event instanceof EndOfMediaEvent){
if(numVeces==2){
player.setMediaTime(new Time(0));
if((visualComponent=player.getVisualComponent())!=null){
this.getContentPane().add(“Center”,visualComponent);
}
validate();
player.start();
}else{
numVeces++;
player.setMediaTime(new Time(0));
timer.stop();
cont=0;
}
}else if(event instanceof ControllerErrorEvent){
player=null;
System.err.println(((ControllerErrerEvent)event).getMessage());
}
}
}
public void actionPerformed(ActionEvent event){
cont++;
}
public static void main(String[]args){
Reproductor reproductor=new Reproductor();
reproductor.setSize(200,200);
reproductor.setVisible(true);
int minimaCont=args[0].cont;
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
System.out.println(args[i].cont);
if((visualComponent=player.getVisualComponent())!=null){
System.out.println(“ARCHIVO DE VIDEO”);
}else{
System.out.println(“ARCHIVO DE AUDIO”);
}
if(minimaCont==args[i].cont){
archivo=args[i];
player.start();
}
else if(minimaCont<args[i].cont){
archivo=args[0];
player.start();
}
else if(minimaCont>args[i].cont){
archivo=args[i];
player.start();
}
}
}
public class ManejadorVentana extends WindowAdapter{
public void windowClosing(WindowEvent e){
if(player!=null){
player.stop();
player.deallocate();
}
System.exit(0);
}
}
}
CONCEPTOS EJERCICIO 4
En este último ejercicio los conceptos que se han tratado han sido:
-El concepto de JMF
-El concepto de interfaz gráfica(swing)
-El concepto de programación orientada a eventos
-El concepto del Timer
EJERCICIO 3 Agosto 10, 2008
Posted by beceoca in 1.add a comment
BEATRIZ GARCIA
ENUNCIADO EJERCICIO 3
En este ejercicio lo que hay que hacer es programar un pequeño juego que consiste en que el jugador debe mantener una pelota rebotando de pared en pared sin dejarla caer al suelo.
Para lograrlo, el jugador moverá una raqueta o pala o paleta(como se quiera llamar) en horizontal, a lo largo del borde inferior de la pantalla de juego.
En definitiva, se trata de programar una versión simple del típico machaca-ladrillos(como por ejemplo el Arkanoid) pero sin ladrillos.
A la hora de hacerlo hay que olvidarse de menús y similares. La partida comienza nada más arrancar el juego, esto es, aparece en pantalla una pelota moviéndose por la zona de juego y rebotando contra las paredes , y un rectángulo en la parte inferior de la zona de juego que el jugador podrá mover de derecha a izquierda mediante las flechas correspondientes al teclado. Si la pelota llega a rebotar en la parte inferior(suelo), querrá decir que el jugador no logró interceptar la trayectoria de la pelota con la pala y se acabará la partida. Para completar un poco más el juego, en algún lugar de la pantalla (preferiblemente fuera de la zona de juego), habrá un marcador que lleve la cuenta de cuántas veces ha rebotado hasta el momento la pelota contra la raqueta.
Aquí se muestra un dibujo de la interfaz gráfica:
|
|
||||
|
|
|
|
||
|
|
||||
|
|
|
|
||
SOLUCIÓN EJERCICIO 3
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Juego extends JFrame{
private JPanel abajo,arriba;
private JLabel rebotesPala;
private int TAMAÑO=20;
private int numRebotesPala=0;
private JLabel tablero[][]= new JLabel[TAMAÑO][TAMAÑO];
private Timer reloj;
private int x=19;
private int y=TAMAÑO/2;
private int xx=14;
private int yy=14;
public Juego(){
super();
abajo= new JPanel();rebotesPala= new
JLabel(“CONTADOR:”+Integer.toString(numRebotesPala));
abajo.add(rebotesPala);
arriba=new JPanel(new GridLayout(TAMAÑO,TAMAÑO));
arriba.setSize(TAMAÑO*TAMAÑO,TAMAÑO*TAMAÑO);
for(int i=0;i<TAMAÑO;i++){
for(int j=0;j<TAMAÑO;j++){
tablero[i][j]=new JLabel();
tablero[i][j].setOpaque(true);
tablero[i][j].setBackground(Color.BLACK);
arriba.add(tablero[i][j]);
}
}
getContentPane().setLayout(new BorderLayout());
getContentPane().add(arriba,BorderLayout.CENTER);
getContentPane().add(abajo,BorderLayout.SOUTH);
pintarJugador();
pintarPelota();
Manejadores manejador= new Manejadores();
addKeyListener(manejador);
reloj=new Timer(250,manejador);
reloj.start();
}
public void pintarJugador(){
for(int y=8;y<12;y++){
tablero[x][y].setBackground(Color.WHITE);
}
}
public void pintarPelota(){
tablero[xx][yy].setBackground(Color.YELLOW);
}
public void visualizar(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setSize(635,400);
setResizable(false);
setVisible(true);
}
class Manejadores extends KeyAdapter implements ActionListener {
public void KeyPressed(KeyEvent e){
int x=19;
switch(e.getKeyCode()){
case KeyEvent.VK_RIGHT:
int numVeces=0;
int j=0;
if (tablero[x][j].getBackground() == Color.WHITE) {
if(numVeces<4){
j++;
tablero[x][j].setBackground(Color.WHITE);
numVeces++;
}
}
else{
tablero[x][j].setBackground(Color.BLACK);
}
case KeyEvent.VK_LEFT:
int numVeces=0;
int j=19;
if (tablero[x][j].getBackground() == Color.WHITE) {
if(numVeces<4){
j–;
tablero[x][j].setBackground(Color.WHITE);
numVeces++;
}
}else{
tablero[x][j].setBackground(Color.BLACK);
}
}
}
public void actionPerformed(ActionEvent e){
int w=19;
int h=0;
if(yy!=0){
if(xx!=19){
tablero[xx][yy].setBackground(Color.BLACK);
xx–;
yy–;
tablero[xx][yy].setBackground(Color.YELLOW);
}else if(xx==19&&tablero[xx][yy].getBackground()!=Color.WHITE ){
System.exit(0);
}else
if(xx==18&&tablero[w][yy].getBackground()==Color.WHITE){
numRebotesPala++; tablero[xx][yy].setBackground(Color.BLACK);
xx–;
yy++;
tablero[xx][yy].setBackground(Color.YELLOW);
reloj.start();
}
}
else{
reloj.stop();
tablero[xx][yy].setBackground(Color.BLACK);
xx++;
tablero[xx][yy].setBackground(Color.YELLOW);
reloj.start();
}
}
}
public static void main(String [] args){
Juego juego= new Juego();
juego.visualizar();
}
}
CONCEPTOS EJERCICIO 3
En este tercer ejercicio los conceptos que se han tratado han sido:
-El concepto de interfaces gráficas(swing)
-El concepto de programación orientada a Eventos
-El concepto de arrays bidimensionales
EJERCICIO 2 Agosto 2, 2008
Posted by beceoca in 1.add a comment
BEATRIZ GARCÍA
EJERCICIO 2 ENUNCIADO
En este ejercicio vamos a crear una estructura de datos compleja como se muestra en la figura:
Cola:
PRIMERO—- ——NULL
|
NODO
|
|
|
|
En cada nodo se almacena una pila:
|
Posición 1 |
|
Posición 2 |
|
. . . |
|
Posición N |
En cada posición de la pila se almacena un vector:
|
Posición 1 |
Posición 2 |
. . . . . . . . . . . . . . . |
Posición N |
Y en cada posición del vector se almacenará un número entero.
Primero hay que programar una cola utilizando para ello una lista enlazada, de esta manera conseguimos que la cola sea dinámica (da igual el número de elementos que insertemos, el límite está en la RAM del ordenador).
Esta cola debe incluir estos métodos:
·Encolar elementos (enqueue).
·Desencolar elementos (dequeue).
·Indicar si la cola está vacía.
·Imprimir por pantalla todos los contenidos de la cola.
Además, en la cola se almacenará solamente pilas, es decir, los elementos a encolar serán pilas, o lo que es lo mismo, cada nodo de la lista enlazada almacenará una pila.
Cada una de estas pilas, cuya clase también hay que programar, debe incluir estos métodos:
· Introducir un elemento en la pila (push).
· Extraer un elemento de la pila (pop).
· Indicar si la pila está vacía.
· Indicar si la pila está llena.
· Imprimir por pantalla todos los contenidos de la pila.
La pila se implementará mediante un array (memoria estática).Cada una de estas pilas almacenará vectores, es decir, que almacenará un vector en cada posición de la pila.
NOTA: cuando se invoque al método imprimir de la cola implica imprimir cada una de las pilas almacenadas en ella y a su vez imprimir todos los vectores que almacena y también imprimir todos los objetos que estén guardados en cada vector uno debajo de otro considerando que dichos objetos serán números enteros.
EJERCICIO2 SOLUCIÓN
CLASE COLALISTA
public class ColaLista {
private Nodo primero;
private int ultimo;
public ColaLista(){
primero=null;
ultimo= 0;
}
public void enqueue(Pila pila){
Nodo nodo=new Nodo(primero,pila);
Primero=nodo;
ultimo++;
}
public Pila dequeue(){
Nodo actual=primero;
for(int i =0;i<ultimo;i++){
actual=actual.dameSiguiente();
}
ultimo–;
return actual;
}
public boolean vacia(){
return primero=null;
}
public void imprimir(){
Nodo actual=primero;
while(actual!=null){
System.out.println(actual.damePila());
actual=actual.damePila();
}
}
}FIN CLASE COLALISTA
CLASE NODO
public class Nodo{
private Nodo siguiente;
private Pila pila;
public Nodo(Nodo siguiente, Pila pila){
this.siguiente=siguiente;
this.pila=pila;
}
public Nodo dameSiguiente{
return this.siguiente;
}
public Pila damePila(){
return this.pila;
}
public void ponNodo(Nodo siguiente){
this.siguiente=siguiente;
}
public void ponPila(Pila pila){
this.pila=pila;
}
}FIN CLASE NODO
CLASE PILA
public class Pila{
private int numElementos;
private Vector elementosPila[];
private int indice;
public Pila(int numElementos){
this.numElementos=numElementos;
indice = -1;
elementosPila=new Vector [numElementos];
}
public void push(Vector v){
indice++;
elementosPila[indice]=v;
}
public Vector pop(){
Vector vector=elementosPila[indice];
indice–;
return vector;
}
public boolean vacia(){
return (indice = = -1);
}
public boolean llena(){
return (indice = = numElementos-1);
}
public void imprimir(){
for(int i = 0; i<=indice; i++){
System.out.println(elementosPila[i]);
}
}
}FIN CLASE PILA
EJERCICIO 2 CONCEPTOS
En este segundo ejercicio los conceptos que se han tratado han sido:
-El concepto de pila
-El concepto de cola
-El concepto de lista
-El concepto de vector