Estoy haciendo un 2048 en consola, esto es lo que llevo:
Quisiera saber en que estoy mal y que me falta, muchas gracias.
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.