2048 en consola JAVA

Iniciado por Drz, 8 Diciembre 2014, 09:41 AM

0 Miembros y 1 Visitante están viendo este tema.

Drz

Estoy haciendo un 2048 en consola, esto es lo que llevo:

Código (java) [Seleccionar]
import java.util.Random;
import java.util.Scanner;

import javax.swing.JOptionPane;
public class Tablero {
private Celda[][] cuadros=new Celda [4][4];

private int score;

private boolean gano,
perdio;

public Tablero(){
this.score = 0;
this.gano = false;
this.perdio = false;
}

//Constructor con parametros.
//Se inicializa el tablero.
public Tablero(int[]celda){  
if(celda.length==0){
this.generarNumero();
this.generarNumero();

int count = 0;
for (int i=0;i<this.cuadros.length; i++){
for (int j=0;j<this.cuadros[i].length;j++){
if(this.cuadros[i][j] == null) this.cuadros[i][j]= new Celda(0);
if(!(i==this.cuadros.length-1 && j==this.cuadros[i].length-1)){
count++;  
}
}
}
}
else{
int count = 0;
for (int j=0;j<this.cuadros.length; j++){
for (int k=0;k<this.cuadros[j].length;k++){
this.cuadros[j][k]= new Celda(celda[count]);
if(!(j==this.cuadros.length-1 && k==this.cuadros[j].length-1)){
count++;  
}
}
}

}

this.score = 0;
this.gano = false;
this.perdio = false;

}

//Genera dos numeros random en el tablero 2 o 4.
public void generarNumero(){
Random r=new Random();
int i = r.nextInt(this.cuadros.length-1);

Random r2=new Random();
int j = r2.nextInt(this.cuadros[i].length-1);
this.cuadros[i][j]=new Celda();
}

//Imprime el tablero en consola.
public void imprimeTablero(){
for(int i=0;i<this.cuadros.length;i++){
for(int j=0;j<this.cuadros[i].length;j++){
System.out.print("|"+this.cuadros[i][j].getValor()+"|");
}
System.out.println();
}
}



//Detecta el movimiento conforme a la letra, acepta mayusculas y minusculas. w es arriba, s es abajo, a es izquierda, d es derecha.
public void pedirMovimiento(){
Scanner sc = new Scanner(System.in);
String result = sc.next();
if(result.equals("w")||result.equals("W")){
arriba();
}
if(result.equals("s")||result.equals("S")){
this.generarNumero();
abajo();
}
if(result.equals("a")||result.equals("A")){
this.generarNumero();
izquierda();
}
if(result.equals("d")||result.equals("D")){
this.generarNumero();
derecha();
}
}

//Metodos de arriba,abajo,izquierda y derecha.
public void arriba(){
int c = 0;
boolean move = false;
for(int z=0;z<3;z++){
int zz = z +1;
for(int t=0;t<3;t++){
Celda celdaActual = this.cuadros[z][t];
Celda celdaSuperior = this.cuadros[zz][t];
if (celdaActual.getValor() == celdaSuperior.getValor()){
if(celdaActual.getValor() != 0 && celdaSuperior.getValor() != 0){
//incrementa
celdaSuperior.incrementa();
c++;
}
move = true;
}
else if(celdaSuperior.getValor() == 0){
this.cuadros[zz][t] = celdaActual;
if(z > 0) this.cuadros[z][t] = this.cuadros[z-1][t];
}
}
}
if(move){
this.generarNumero();
}
System.out.println("Sume "+c);
}




public void abajo(){
System.out.println("aba");
}

public void izquierda(){
System.out.println("izq");
}
public void derecha(){
System.out.println("der");
}
public boolean pierde(){
return false;
}





public boolean gano(int [][] a){
for(int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if(a[i][j]==2048){
gano=true;
}
else{
gano=false;
}
}
}
return gano;

}




public static void main(String args[]){
int [] arreglo={};
Tablero juego=new Tablero(arreglo);
juego.imprimeTablero();


for(int i=0; i<16; i++){
juego.pedirMovimiento();
juego.imprimeTablero();
}





}
}


--------------------------------------------------------------------------------------


import java.awt.Point;
import java.util.Random;
import java.util.Random;

//Clase Celda.
public class Celda{

  private int valor;

 
//Constructor por default.
  public Celda(){
     Random valor2o4 = new Random ();
     this.valor = (valor2o4.nextInt(2)+1)*2;
  }
 
//Constructor con parametros.  
  public Celda (int valorPoner){
     this.valor = valorPoner;  
  }

//Getter y Setter de Valor.
  public int getValor(){
  return this.valor;
  }

  public void setValor(int valor){
this.valor=valor;
  }
 
 


//Metodo que incrementa el doble de cualquier valor.
  public int incrementa(){
     return this.valor*=2;
  }




}



Quisiera saber en que estoy mal y que me falta, muchas gracias.




Baal_30

Uff, yo no puedo ayudarte porque no tengo todavía los conocimientos suficientes, pero te diría que uses las etiquetas GeSHi, para leer mejor el código ;)
«La suerte es el cuidado de los detalles». -Winston Churchill

Debci

Buenas :)
En primer lugar, bienvenido al foro ^^
En segundo lugar, te recomiendo que revises las normas de nuestra comunidad, por el bien común y hacer de esta convivencia algo más agradable :)
Te recomiendo que especifiques concretamente algo que no entiendas... Es un poco desalentador para alguien que no te conoce de nada, ponerse d ela nad a amira run código, sin comentarios y sin explicación alguna. Aquí no se hacen tareas, ni se resuelven las cosas porque sí....
En mi caso no sé ni que es lo que te falla...
Si quieres depurar tu aplicación y encontrar posibles errores, te recomiendo que uses un Debugger:
http://www.vogella.com/tutorials/EclipseDebugging/article.html

Un saludo ;)