ayuda hacer que aparezca casilla visible sin que el jugador se mueva

Iniciado por sheiking, 14 Noviembre 2018, 17:47 PM

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

sheiking

estoy haciendo un pequeño juego en consola que se trata de una búsqueda del tesoro en un cuadricula pero lo que quiero hacer es que el usuario escoja dos opciones moverse o ver lo que hay en la casilla de adelante pero solo tango la opción de mover

Código (java) [Seleccionar]

package RetoFinal;

import java.util.Scanner;

public class BuscarTesoro {
    public static void main(String[] args) {
        System.out.println("Dame dificultad: ");
        Scanner lector = new Scanner(System.in);
        int dificultad = lector.nextInt();
        Juego partida = new Juego(dificultad);
       
        do{
            partida.imprimir();
            System.out.println("Vida: " + partida.vida);
            System.out.println("Tesoros: " + partida.tesEncontrados);
           
            partida.mover();
           
       }while(partida.vida>=0&&partida.tesEncontrados<partida.numTesoros);
        if(partida.vida<0){
            partida.imprimir();
            System.out.println("GAME OVER");
            System.out.println("Tesoros Encontrados: "+partida.tesEncontrados);
        }else{
            partida.imprimir();
            System.out.println("GANASTE");
        }
    }
}




Código (java) [Seleccionar]

package RetoFinal;

class Comida extends Item{

    Comida(int posX, int posY) {
        this.posX=posX;
        this.posY=posY;
        this.afecta=3;
    }
   
}



Código (java) [Seleccionar]
package RetoFinal;

public class Elemento {
    int posX;
    int posY;
}

Código (java) [Seleccionar]
package RetoFinal;

class Enemigo extends Item{

    Enemigo(int posX, int posY) {
        this.posX=posX;
        this.posY=posY;
        this.afecta=-5;
    }
   
}

Código (java) [Seleccionar]
package RetoFinal;

class Item extends Elemento{
    int afecta;
}

Código (java) [Seleccionar]
package RetoFinal;

import java.util.Random;
import java.util.Scanner;

public class Juego {
    boolean continuar=true;
    int tesEncontrados = 0;
    private boolean hallazgo;
    private boolean ver;
    int numTesoros;
    private int numEnemigos;
    private int numComida;
    int vida;
    private int mapDimension;
    private Jugador player1;
    private Mapa map;
    private Enemigo[] enemies;
    private Comida[] food;
    private Tesoro[] chest;

    public Juego(int dificultad) {
       
        switch(dificultad){
            case 1:
                this.mapDimension=5;
                this.vida = 50;
                this.numTesoros=1;
                this.numEnemigos=2;
                this.numComida=8;
                break;
            case 2:
                this.mapDimension=8;
                this.numTesoros=2;
                this.vida = 40;
                this.numEnemigos=4;
                this.numComida=6;
                break;
            case 3:
                this.numTesoros=4;
                this.numEnemigos=8;
                this.numComida=4;
                this.vida = 30;
                this.mapDimension=12;
                break;
            default:
                break;
        }
        map = new Mapa(this.mapDimension);
        this.generarJugador();
        this.generarEnemigos();
        this.generarComida();
        this.generarTesoro();
    }
   
    private void generarJugador() {
        Random generadorAleatorios = new Random();
        int posX = 0+generadorAleatorios.nextInt(this.mapDimension);
        int posY = 0+generadorAleatorios.nextInt(this.mapDimension);
        player1 = new Jugador(posX,posY);
    }

    private void generarEnemigos() {
        this.enemies = new Enemigo[this.numEnemigos];
        for(int i=0;i<this.numEnemigos;i++){
            Random generadorAleatorios = new Random();
            int posX = 0+generadorAleatorios.nextInt(this.mapDimension);
            int posY = 0+generadorAleatorios.nextInt(this.mapDimension);
            int numeroAleatorio = 1+generadorAleatorios.nextInt(5);
            this.enemies[i] = new Enemigo(posX, posY);
        }
    }

    private void generarComida() {
        this.food = new Comida[this.numComida];
        for(int i=0;i<this.numComida;i++){
            Random generadorAleatorios = new Random();
            int posX = 0+generadorAleatorios.nextInt(this.mapDimension);
            int posY = 0+generadorAleatorios.nextInt(this.mapDimension);
            int numeroAleatorio = 1+generadorAleatorios.nextInt(5);
            food[i] = new Comida(posX, posY);
        }
    }

    private void generarTesoro() {
        this.chest = new Tesoro[this.numTesoros];
        for(int i=0;i<this.numTesoros;i++){
            Random generadorAleatorios = new Random();
            int posX = 0+generadorAleatorios.nextInt(this.mapDimension);
            int posY = 0+generadorAleatorios.nextInt(this.mapDimension);
            int numeroAleatorio = 1+generadorAleatorios.nextInt(5);
            chest[i] = new Tesoro(posX, posY);
        }
    }
   
    public void imprimir() {
        map.matriz[player1.posX][player1.posY] = '@';
        map.imprimir();
        this.generarItem();
    }
   
    public void mover() {
        if(!this.hallazgo){
            map.matriz[player1.posX][player1.posY] = ' ';
        }
        if(ver){
            map.matriz[player1.posX][player1.posY] = '?';
        }
        System.out.println("controles:");
        System.out.println("oeste  norte  sur  este");
        System.out.println("a      w      s    d");
       
        Scanner lector = new Scanner(System.in);
        char opcion = lector.next().charAt(0);
        switch(opcion){
            case 'a':
                player1.moverX(-1);
                break;
            case 'w':
                player1.moverY(-1);
                break;
            case 's':
                player1.moverY(1);
                break;
            case 'd':
                player1.moverX(1);
                break;
           
        }
        this.encontrarItem();
        this.vida-=2;
    }
   
   
    private void generarItem() {
        int i;
        this.hallazgo=false;
        for(i=0;i<this.numTesoros;i++){
            if(player1.posX==chest[i].posX&&player1.posY==chest[i].posY){
                System.out.println("Encontraste Un Tesoro! Felicidades!");
                map.matriz[player1.posX][player1.posY] = '$';
                this.hallazgo=true;
            }
        }
        for(i=0;i<this.numComida;i++){
            if(player1.posX==food[i].posX&&player1.posY==food[i].posY){
                System.out.println("Encontraste Comida! Salud+3");
                map.matriz[player1.posX][player1.posY] = '+';
                this.hallazgo=true;
            }
        }
        for(i=0;i<this.numEnemigos;i++){
            if(player1.posX==enemies[i].posX&&player1.posY==enemies[i].posY){
                System.out.println("Encontraste Un Enemigo! Salud-5");
                map.matriz[player1.posX][player1.posY] = '!';
                this.hallazgo=true;
            }
        }
    }

    private void encontrarItem() {
        int i;
        for(i=0;i<this.numTesoros;i++){
            if(player1.posX==chest[i].posX&&player1.posY==chest[i].posY){
                this.tesEncontrados++;
            }
        }
        for(i=0;i<this.numComida;i++){
            if(player1.posX==food[i].posX&&player1.posY==food[i].posY){
                this.vida+=3;
            }
        }
        for(i=0;i<this.numEnemigos;i++){
            if(player1.posX==enemies[i].posX&&player1.posY==enemies[i].posY){             
                this.vida-=5;
            }
        }
    }
   
}


Código (java) [Seleccionar]
package RetoFinal;

class Jugador extends Elemento{
    int vida;

    Jugador(int posX, int posY) {
        this.posX=posX;
        this.posY=posY;
    }
    public void moverX(int i){
        this.posY += i;
    }
    public void moverY(int j){
        this.posX += j;
    }
}

Código (java) [Seleccionar]
package RetoFinal;

class Mapa {
   
    char[][] matriz;
    private int dimension;
   
    public Mapa(int d) {
        this.dimension = d;
        this.matriz = new char[d][d];
        for(int i=0;i<this.dimension;i++){
            for(int j=0;j<this.dimension;j++){
                this.matriz[i][j]='?';
            }
        }
    }

    void imprimir() {
        for(int i=0;i<this.dimension;i++){
            for(int j=0;j<this.dimension;j++){
                System.out.print(this.matriz[i][j]+" ");
            }
            System.out.println();
        }
    }
   
}

Código (java) [Seleccionar]
package RetoFinal;


class Tesoro extends Elemento{

    Tesoro(int posX, int posY) {
        this.posX=posX;
        this.posY=posY;
    }
   
}


lo que tengo duda es que al momento de que el jugador haga un movimiento pregunte si se quiere mover o quiere solo ver la casilla si se mueve perderia 2 de vida y si solo ve lo que hay en la casilla perderia 1 vida

rub'n

Hola,

Usa Geshi así, para que te puedan ayudar mas rápido  


que es esto?

Código (java) [Seleccionar]

public void ver(){
       if(!this.hallazgo){
           map.matriz[player1.posX][player1.posY] = ' ';
       }
       if(ver){
           map.matriz[player1.posX][player1.posY] = '?';
       }
       Scanner lector = new Scanner(System.in);
       char opcion = lector.next().charAt(0);
       switch(opcion){
           case 'w':
               break;
           case 's':
               break;
           case 'a':
               break;
           case 'd':
               break;
       }
       this.encontrarItem();
       this.vida-=1;
   }


Sera que estas simplemente copiando codigo? y ni idea  :-\

invoca al metodo ver() y veras que hace te lo dejo como tarea

partida.mover();  :xD




y si  >:D estudia y aprende, quieres que te hagan la tarea @sheiking
como hacerlo ? leer y escribir mucho mucho código

recuerda la tarea pendiente

partida.mover();debes invocar a ver() que es un método


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

sheiking

es que si lo que hice en el metodo ver porque lo que queria hacer era preguntarle al usuario si queria moverse a la casilla que tiene por delante o si queria solo ver que habia pero intente replicar el metodo de mover pero la verdad no tengo idea xd ando un poco perdido pero igual gracias por la ayuda  ;D

rub'n

Cita de: sheiking en 15 Noviembre 2018, 06:07 AM
es que si lo que hice en el metodo ver porque lo que queria hacer era preguntarle al usuario si queria moverse a la casilla que tiene por delante o si queria solo ver que habia pero intente replicar el metodo de mover pero la verdad no tengo idea xd ando un poco perdido pero igual gracias por la ayuda  ;D


Y ahora tu clase Juego le borras el método ver?  :xD, por que razón?


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

sheiking

Es que borre técnicamente el método ver() porque era lo mismo que mover() solo que te quitaba 1 de vida  :-\  pero sigo viendo cómo hacerle para que solo se descubra la casilla y que el personaje no avance xd por eso lo borre   :-[ gracias  por enseñarme lo de Geshi si es muy útil