Untitled

mail@pastecode.io avatar
unknown
java
a year ago
16 kB
2
Indexable
Never
package tocadoHundido;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class ColocarVentana extends JFrame{
	protected Casilla casilla;
	protected Casilla casillaCPU;
	
	protected ArrayList<ArrayList<Casilla>> botones;
	protected ArrayList<ArrayList<Casilla>> botonesCPU;
	
	
	protected ArrayList<Barco> listaBarcos;
	protected ArrayList<Barco> listaBarcosCPU;
	
	protected Direccion selecDireccion;
	
	protected JButton horizontal = new JButton("Horizontal");
	protected JButton vertical = new JButton("Vertical");
	
	protected JButton jugar = new JButton("Jugar");
	
	protected JPanel arriba = new JPanel();
	protected JPanel abajo = new JPanel();
	protected JPanel grid = new JPanel();
	
	
	protected int contador;
	protected int contadorCPU;
	protected int dirRandom;
	
	protected Boolean colocFinalizada;
	
	protected ArrayList<Point> coordsCheck;
	protected int cont;
	protected int contDestCPU;
	protected Boolean hayGanador;
	
	
	protected Usuario usuario;
	protected Cpu cpu;
	protected GuardadoDatos guardadoDatos;
	
	protected JButton nuevaPartida = new JButton("Nueva partida");
	protected JButton guardarPartida = new JButton("Guardar partida");
	protected JButton cargarPartida = new JButton("Cargar partida");
	
	
	public ColocarVentana() {
		setTitle("Colocar Barcos");
		setSize(1280, 720);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setVisible(true);	
		
	}
	
	public void CreateGrid() {
		botones = new ArrayList<ArrayList<Casilla>>();
		botonesCPU = new ArrayList<ArrayList<Casilla>>();
		
	    grid.setLayout(new GridLayout(10,10));   
	    
	    abajo.add(horizontal);
	    abajo.add(vertical);

	    for (int i = 0; i < 10; i++) {
	    	ArrayList<Casilla> botonesTemp = new ArrayList<Casilla>();
	    	ArrayList<Casilla> botonesTempCPU = new ArrayList<Casilla>();
	    	
	        for (int j = 0; j < 10; j++) {
	        	//BOTONES CPU
	        	JButton cajaCPU = new JButton();
	        	casillaCPU = new Casilla(cajaCPU, new Point(i,j), false, false);
	        	botonesTempCPU.add(casillaCPU);
	        	//BOTONES JUGADOR
	            JButton caja = new JButton();
	            caja.setText("" + i + j);
	            caja.setBackground(Color.GRAY);
	            grid.add(caja);
	            casilla = new Casilla(caja, new Point(i, j), false, false);
	            botonesTemp.add(casilla);
	        }   
	        botones.add(botonesTemp);
	        botonesCPU.add(botonesTempCPU);
	    }
	    
	    arriba.add(grid);

	    add(arriba, BorderLayout.NORTH);
	    add(abajo, BorderLayout.SOUTH);

	}

	
	public void ColocarBarcos(ArrayList<Barco> barcos) {
		contador = -1;
		colocFinalizada = false;
		this.listaBarcos = new ArrayList<Barco>(); //COPIA RECURSIVA
		for (Barco barco : barcos) {
			this.listaBarcos.add(barco);
		}
		
		if (contador!=listaBarcos.size()-1) {
			for (ArrayList<Casilla> botonTemp : botones) {
				for (Casilla boton: botonTemp) {
					boton.boton.addActionListener(new ActionListener() {
						@Override
						public void actionPerformed(ActionEvent e) {
							System.out.println(contador);
							if (!colocFinalizada) {
								if (boton.ocupada) {
									System.out.println("CASILLA OCUPADA, elija otro sitio");
								} else {
									if (selecDireccion == Direccion.HORIZONTAL) {
										contador++;
										boolean ocupado = false;
										for (int selector = (int)boton.coordenada.getY(); selector < boton.coordenada.getY()+listaBarcos.get(contador).tamanyo; selector++) {
											try {												
												if (botones.get((int) boton.coordenada.getX()).get(selector).ocupada) {
													ocupado = true;
												}
											} catch (Exception e2) {
												ocupado = true;
											}
										}
										
										if (boton.coordenada.getY() + listaBarcos.get(contador).tamanyo-1 > 9 || ocupado){
											System.out.println("CASILLA INCORRECTA, elija otro sitio");
											contador--;
										} else {
											boton.boton.setText(""+listaBarcos.get(contador).tamanyo);
											boton.boton.setBackground(Color.RED);
											
											int fila = (int) boton.coordenada.getX(); 
											int columna = (int) boton.coordenada.getY();
											
											for (int i = 0; i < listaBarcos.get(contador).tamanyo; i++) {
												botones.get(fila).get(columna+i).boton.setText("" + listaBarcos.get(contador).tamanyo);
												botones.get(fila).get(columna+i).boton.setBackground(Color.RED);
												botones.get(fila).get(columna+i).ocupada = true;
												botones.get(fila).get(columna+i).setBarcoAsignado(listaBarcos.get(contador));
	
											}	
										}
										
										
										
									} else if (selecDireccion == Direccion.VERTICAL) {
										contador++;
										boolean ocupado = false;
										for (int selector = (int)boton.coordenada.getX(); selector < boton.coordenada.getX()+listaBarcos.get(contador).tamanyo; selector++) {
											try {												
												if (botones.get(selector).get((int) boton.coordenada.getY()).ocupada) {
													ocupado = true;
												}
											} catch (Exception e2) {
												ocupado = true;
											}
											
										}
										
										
										if (boton.coordenada.getX()+listaBarcos.get(contador).tamanyo-1 > 9 || ocupado) {
											System.out.println("CASILLA INCORRECTA, ELIJA OTRO SITIO");
											contador--;
										} else {			
											boton.boton.setText(""+listaBarcos.get(contador).tamanyo);
											boton.boton.setBackground(Color.RED);
											
											int fila = (int) boton.coordenada.getX();
											int columna = (int) boton.coordenada.getY();
											
											for (int i = 0; i < listaBarcos.get(contador).tamanyo; i++) {
												botones.get(fila+i).get(columna).boton.setText("" + listaBarcos.get(contador).tamanyo);
												botones.get(fila+i).get(columna).boton.setBackground(Color.RED);
												botones.get(fila+i).get(columna).ocupada = true;
												botones.get(fila+i).get(columna).setBarcoAsignado(listaBarcos.get(contador));
												
											}	
										}
										
									}
									
									
									
								}
									
									
							}
							
							if (contador==listaBarcos.size()-1) {			
								add(jugar);
								colocFinalizada = true;
								
							}
						}
					});
					
				}
			}
			
			
			horizontal.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					selecDireccion = Direccion.HORIZONTAL;
				}
			});

			vertical.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					selecDireccion = Direccion.VERTICAL;
				}
			});
			
			
			
		}

		
	}
	public void Atacar(ArrayList<Barco> barcos, Usuario usuarioP, Cpu cpuP) {
		hayGanador = false;
		contadorCPU = -1;
		cont = 0;
		contDestCPU = 0;
		coordsCheck = new ArrayList<Point>();
		this.usuario = usuarioP;
		this.cpu = cpuP;
		
		this.listaBarcosCPU = new ArrayList<Barco>(); //COPIA RECURSIVA
		for (Barco barco : barcos) {
			listaBarcosCPU.add(barco);
		}
		
		jugar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				remove(jugar);
				remove(abajo);
				repaint();
				colocFinalizada = false;
				
				
				while (contadorCPU != listaBarcos.size()-1) {
					
					contadorCPU++;

					dirRandom = (int)(Math.random()*2);
					
					switch (dirRandom) {
					//HORIZONTAL
					case 0:
						int cordY = (int)(Math.random()*5);
						int cordX = (int)(Math.random()*10);
						boolean ocupadaCheckH = false;
						
						for (int i = 0; i < listaBarcosCPU.get(contadorCPU).tamanyo; i++) {
							if (botonesCPU.get(cordX).get(cordY+i).ocupada) {
								ocupadaCheckH = true;
								break;
							} else {
								ocupadaCheckH = false;
							}
						}
						
						if (!ocupadaCheckH) {							
							for (int i = 0; i < listaBarcosCPU.get(contadorCPU).tamanyo; i++) {
								botonesCPU.get(cordX).get(cordY+i).setOcupada(true);
								botonesCPU.get(cordX).get(cordY+i).setBarcoAsignado(listaBarcosCPU.get(contadorCPU));
								listaBarcosCPU.get(contadorCPU).getBotones().add(botonesCPU.get(cordX).get(cordY+i));
								ocupadaCheckH = false;
							}
						} else {
							contadorCPU--;
						}
						break;

					case 1: //VERTICAL
						cordY = (int)(Math.random()*10);
						cordX = (int)(Math.random()*5);
						boolean ocupadaCheckV = false;
						
						for (int i = 0; i < listaBarcosCPU.get(contadorCPU).tamanyo; i++) {
							
							if (botonesCPU.get(cordX+i).get(cordY).ocupada) {
								ocupadaCheckV = true;
								break;
							} else {
								ocupadaCheckV = false;
							}
						}	
						
						if (!ocupadaCheckV) {							
							for (int i = 0; i < listaBarcosCPU.get(contadorCPU).tamanyo; i++) {
								botonesCPU.get(cordX+i).get(cordY).setOcupada(true);
								botonesCPU.get(cordX+i).get(cordY).setBarcoAsignado(listaBarcosCPU.get(contadorCPU));
								listaBarcosCPU.get(contadorCPU).getBotones().add(botonesCPU.get(cordX+i).get(cordY));
							}
						} else {
							contadorCPU--;
						}
						break;
					
					}		
				}
				
				grid.removeAll();
				for (ArrayList<Casilla> botonTemp : botonesCPU) {
					for (Casilla boton : botonTemp) {
						boton.boton.setText(" ");
						grid.add(boton.boton);
						
					}
				}				
				for (ArrayList<Casilla> botonTemp : botonesCPU) {
					for (Casilla boton : botonTemp) {
						boton.boton.addActionListener(new ActionListener() {
						
							@Override
							public void actionPerformed(ActionEvent e) {
								if (boton.ocupada) {
									if (!boton.fuePresionado) {		
										boton.setFuePresionado(true);
										boton.boton.setBackground(Color.RED);
										boton.barcoAsignado.setTocados(boton.barcoAsignado.getTocados()+1);
										boton.barcoAsignado.getCoordenadas().add(boton.getCoordenada());
										if (boton.barcoAsignado.getTocados()==boton.barcoAsignado.getTamanyo()) {
											boton.barcoAsignado.setDestruido(true);
											
											for (Point coord : boton.barcoAsignado.getCoordenadas()) {
												botonesCPU.get((int)coord.getX()).get((int)coord.getY()).getBoton().setBackground(Color.GREEN);
												
											}	
											
											
											System.out.println("HUNDIDO: "+boton.barcoAsignado.getDestruido());											
										}
										
										try {
											if (boton.barcoAsignado.getDestruido()) {
												cont++;
											}																					
										} catch (Exception e2) {
										}
										
										if (listaBarcos.size() == cont) {
											usuario.setGanadas(usuario.getGanadas()+1);
											hayGanador = true;
											System.out.println("FINAL POR JUGADOR: ");
										}
										
										
									} else {
										System.out.println("BOTON PRESIONADO PREVIAMENTE");
									}
								} else {
									boton.boton.setBackground(Color.BLUE);
								}


								
								//SELECCION DE LA CPU
								int cordY = (int)(Math.random()*10);
								int cordX = (int)(Math.random()*10);
								Point coordenadaCheck = new Point(cordX,cordY);
								while (coordsCheck.contains(coordenadaCheck)) {
									cordY = (int)(Math.random()*10);
									cordX = (int)(Math.random()*10);
									coordenadaCheck = new Point(cordX,cordY);
								}
								coordsCheck.add(coordenadaCheck);
														
								if (botones.get(cordX).get(cordY).getOcupada()) {
									botones.get(cordX).get(cordY).getBarcoAsignado().setTocados(botones.get(cordX).get(cordY).getBarcoAsignado().getTocados()+1);
									botones.get(cordX).get(cordY).getBarcoAsignado().getCoordenadas().add(boton.getCoordenada());
									
									if (botones.get(cordX).get(cordY).getBarcoAsignado().getTamanyo() == botones.get(cordX).get(cordY).getBarcoAsignado().getTocados()) {
										botones.get(cordX).get(cordY).getBarcoAsignado().setDestruido(true);
										contDestCPU++;
																				
										if (contDestCPU == listaBarcos.size()) {
											
											cpu.setGanadas(cpu.getGanadas()+1);
											hayGanador = true;
											System.out.println("FINAL POR CPU");
										}
									
									
									}
									System.out.println("TOCADO POR LA CPU");	
								} else {
									System.out.println("AGUA POR LA CPU");
								}								
							
								if (hayGanador) {
									hayGanador = false;
									grid.removeAll();
									grid.add(nuevaPartida);
									grid.add(guardarPartida, BorderLayout.CENTER);
									grid.add(cargarPartida, BorderLayout.CENTER);
									repaint();	
									
									
									guardarPartida.addActionListener(new ActionListener() {
										
										@Override
										public void actionPerformed(ActionEvent e) {
											guardadoDatos = new GuardadoDatos(usuario, cpu);
											guardadoDatos.guardarPartida();

										}
									});
									
									cargarPartida.addActionListener(new ActionListener() {
										
										@Override
										public void actionPerformed(ActionEvent e) {
											guardadoDatos = new GuardadoDatos(usuario, cpu);												
											guardadoDatos.cargarPartida();												
											usuario = guardadoDatos.usuario;
											cpu = guardadoDatos.cpu;
										}
									});
									
									
									nuevaPartida.addActionListener(new ActionListener() {
										
										@Override
										public void actionPerformed(ActionEvent e) {
											for (Barco barco : barcos) {
												barco.destruido = false;
												barco.tocados = 0;
												barco.coordenadas = new ArrayList<Point>();
												barco.botones = new ArrayList<Casilla>();
											}
											for (ArrayList<Casilla> botonesTemp : botones) {
												for (Casilla boton : botonesTemp) {
													boton.fuePresionado = false;
													boton.ocupada = false;
													boton.boton.setBackground(Color.WHITE);
												}
											}
											for (ArrayList<Casilla> botonesTemp : botonesCPU) {
												for (Casilla boton : botonesTemp) {
													boton.fuePresionado = false;
													boton.ocupada = false;
													boton.boton.setBackground(Color.WHITE);
												}
											}
											
											
											grid.removeAll();											
											CreateGrid();
											repaint();
											System.out.println(barcos);
											ColocarBarcos(barcos);
											repaint();
											System.out.println(barcos);
											Atacar(barcos, usuarioP, cpuP);
											
											
											
											
										}
									});
									
									
								}
								
								
								
								
							}
						});;	
					
					}	
				
				} 
			}
		});
		

		
	}
	
	
	
}