<repo_name>AntonioJesPG/JuegosProgramacion<file_sep>/3EnRaya/src/Final_Version/Podio.java
package Final_Version;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

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

import java.util.ArrayList;
import java.util.List;

//Esta clase es usada para mostrar el podio y ver que jugador ha ganado
public class Podio extends Canvas{

	JFrame ventana = new JFrame("Podio");
	
	//Alto y ancho de la ventana
	private static final int JFRAME_WIDTH=700;
	private static final int JFRAME_HEIGHT=700;
	
	private int ganador;
	
	
	//Constructor
		public Podio(int i) {

		ganador = i;	
			
		AlmacenImagenes.getInstance();
			
		//Creamos el JPanel haciendo un recast del contenido de nuestra ventana
		JPanel panel = (JPanel) ventana.getContentPane();
			
		//Le establecemos el layout al panel y lo añadimos
		panel.setLayout(new BorderLayout());
		panel.add(this, BorderLayout.CENTER);
			
		//Dimensión de la ventana
		ventana.setBounds(0,0,JFRAME_WIDTH,JFRAME_HEIGHT);
							
		//Sonido en bucle del podio
		AlmacenSonidos.getInstance().loopSound("VictoryTheme.wav");
		
		//Eliminamos el cierre normal de la ventana y personalizamos la posibilidad de cerrar la ventana
		ventana.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		ventana.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
					cerrarAplicacion();
				}
			});
			
		//Mostrar la ventana
		ventana.setVisible(true);
			
		//Cambiamos el foco al canvas
		this.requestFocus();
			
		}
		
		
		private void cerrarAplicacion() {
			String[] opciones = {"Aceptar","Cancelar"};
			
			//Creamos las opciones de salir de la aplicación
			int eleccion = JOptionPane.showOptionDialog(ventana, "¿Salir de la aplicación?","Salir",
					JOptionPane.YES_NO_OPTION,
					JOptionPane.QUESTION_MESSAGE, null, opciones, "Aceptar");
			
			//Si el usuario desea salir lo cerramos
			if(eleccion == JOptionPane.YES_OPTION) {
				System.exit(0);
			}
		}
		
		//Modificamos el método paint de canvas
		@Override
		public void paint(Graphics g) {
			super.paint(g);
				
			if(ganador == TresEnRaya.getInstance().JUGADOR_1) {
			g.drawImage(AlmacenImagenes.getInstance().getSprite("ganadorJ1.png"),0,0,JFRAME_WIDTH,JFRAME_HEIGHT,this);
			}
			if(ganador == TresEnRaya.getInstance().JUGADOR_2) {
				g.drawImage(AlmacenImagenes.getInstance().getSprite("ganadorJ2.png"),0,0,JFRAME_WIDTH,JFRAME_HEIGHT,this);
				}
			
			
		}
}
<file_sep>/Formula1/src/Version_1/Pista.java
package Version_1;

import javax.swing.JOptionPane;

public class Pista {

	private Vehiculo conductor;
	private Obstaculo[] obstaculos = new Obstaculo[4];
	private final int tamanioPista = 20;
	private String[] p = new String[tamanioPista];
	
	public Pista(Vehiculo v, int idConductor) {
		
		for(int i = 0 ; i < 4 ; i++) {
			int valor = (int) Math.round(Math.random() * (100 - 0)) + 0;
			int posicionEnPista = (int) Math.round(Math.random() * (19 - 1)) + 1;
			
			while(hayObstaculo(posicionEnPista)) {
				posicionEnPista = (int) Math.round(Math.random() * (19 - 1)) + 1;
			}
			//Hay que crear posiciones al azar
			if(valor >= 50) {
				Mancha mancha = new Mancha(posicionEnPista,1);
				obstaculos[i] = mancha;
			}
			if(valor < 50) {
				Rampa rampa = new Rampa(posicionEnPista,1);
				obstaculos[i] = rampa;
			}	
		}
		
		this.conductor = v;
		
		for(int i = 0; i < tamanioPista ; i++) p[i] = null;
		
		p[0] = "X";
		
		for(int i=0; i < obstaculos.length; i++) {
			if(obstaculos[i] != null) {
			if(obstaculos[i] instanceof Mancha) p[obstaculos[i].getX()] = "M";
			if(obstaculos[i] instanceof Rampa) p[obstaculos[i].getX()] = "R";
			}
		}
		
		System.out.println("Conductor " + idConductor);
		mostrarPista();
	}
	
	public void mostrarPista() {
		System.out.print("\n[");
		for(int i = 0; i<p.length ; i++) {
			if(p[i]==null) System.out.print(" ,");
			else System.out.print(p[i] + ",");
		}
		System.out.println("]\n");
	}
	
	public void conducir() {
		int cantidadMovimiento = conductor.avanza();
		int movimientosRestantes = cantidadMovimiento;
		boolean puedoMoverme = true;
		
		
		for(int i = 0; i <= cantidadMovimiento; i++) {
			
			p[conductor.getX()] = null;
			if(puedoMoverme) {
				conductor.setX(conductor.getX()+1);
				movimientosRestantes--;
				if(movimientosRestantes <= 0) puedoMoverme = false;
			}
			
			if(hayObstaculo(conductor.getX())) {
				movimientosRestantes = movimientosRestantes - pasarObstaculo(conductor.getX());
			}
			if(conductor.getX() < p.length) p[conductor.getX()] = "X";
			else { 
				p[tamanioPista-1] = "X";
				i = cantidadMovimiento+1;
				}
			}
			mostrarPista();
		}
		//conductor.setX(cantidadMovimiento);
		
	
	
	public int pasarObstaculo(int pos) {
		
		for(int i = 0 ; i < 4 ; i++) {
			if(obstaculos[i] != null) {
				if(obstaculos[i].getX() == pos) return obstaculos[i].getReduccionDeVelocidad();
			}
		}
		
		return 0;
	}
	
	public boolean hayObstaculo(int pos) {
		
		boolean obstaculo = false;
		
		for(int i = 0 ; i < 4 ; i++) {
			if(obstaculos[i] != null) {
				if(obstaculos[i].getX() == pos) obstaculo = true;
			}
		}
		return obstaculo;
	}
	
	public int getTamanioPista() {
		return this.tamanioPista;
	}
	
	public Vehiculo getConductor() {
		return this.conductor;
	}
	
	public boolean metaPista() {
		
		return conductor.getX()>=tamanioPista;

	}
	
}
<file_sep>/3EnRaya/src/Version_03/TresEnRaya.java
package Version_03;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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


public class TresEnRaya extends Canvas{

	//Creamos la ventana
	JFrame ventana = new JFrame("3 en raya");
	
	//Alto y ancho de la ventana
	private static final int JFRAME_WIDTH=700;
	private static final int JFRAME_HEIGHT=700;
	
	//Constructor
	public TresEnRaya() {
		
		//Creamos el JPanel haciendo un recast del contenido de nuestra ventana
		JPanel panel = (JPanel) ventana.getContentPane();
		
		//Le establecemos el layout al panel y lo añadimos
		panel.setLayout(new BorderLayout());
		panel.add(this, BorderLayout.CENTER);
		
		//Dimensión de la ventana y mostrarla
		ventana.setBounds(0,0,JFRAME_WIDTH,JFRAME_HEIGHT);
		ventana.setVisible(true);
		
		//Eliminamos el cierre normal de la ventana y personalizamos la posibilidad de cerrar la ventana
		ventana.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		ventana.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				cerrarAplicacion();
			}
		});
		
		//Cambiamos el foco al canvas
		this.requestFocus();
		
	}
	
	private void cerrarAplicacion() {
		String[] opciones = {"Aceptar","Cancelar"};
		
		//Creamos las opciones de salir de la aplicación
		int eleccion = JOptionPane.showOptionDialog(ventana, "¿Salir de la aplicación?","Salir",
				JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE, null, opciones, "Aceptar");
		
		//Si el usuario desea salir lo cerramos
		if(eleccion == JOptionPane.YES_OPTION) {
			System.exit(0);
		}
	}
	
	//Modificamos el método paint de canvas
	@Override
	public void paint(Graphics g) {
			super.paint(g);
			
			//Pintamos un rectángulo blanco
			g.setColor(Color.WHITE);
			g.fillRect(0, 0, this.getWidth(), this.getHeight());
	}
	
	//Método main
	public static void main(String[] args) {
		TresEnRaya tres = new TresEnRaya();
	}
}
<file_sep>/Formula1/src/Version_1/Moto.java
package Version_1;

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

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

public class Moto extends Vehiculo{

	public Moto() {
		super();
	}
	
	public Moto(int x, int y) {
		super(x,y);
	}
	
	public  void paint(JPanel frame) {
		frame.add(new Cuadrado());
	}
	

}
<file_sep>/Formula1/src/Version_1/Mancha.java
package Version_1;

public class Mancha extends Obstaculo{
	
	public Mancha(int x, int tamanio) {
		super(x,tamanio,2);
		
	}
	
	public  void paint() {
		
	}
}
<file_sep>/Formula1/src/Version_1/Obstaculo.java
package Version_1;

public abstract class Obstaculo{
	
	private int x;
	private int tamanio;
	private int reduccionDeVelocidad;
	
	public Obstaculo(int x,int tamanio, int reduccionDeVelocidad){
		this.x = x;
		this.tamanio = tamanio;
		this.reduccionDeVelocidad = reduccionDeVelocidad;
	}

	
	
	public int getX() {
		return x;
	}



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



	public int getTamanio() {
		return tamanio;
	}



	public void setTamanio(int tamanio) {
		this.tamanio = tamanio;
	}



	public int getReduccionDeVelocidad() {
		return reduccionDeVelocidad;
	}



	public void setReduccionDeVelocidad(int reduccionDeVelocidad) {
		this.reduccionDeVelocidad = reduccionDeVelocidad;
	}



	public abstract void paint();
}
