Autor Tema: Juego batalla naval hundir la flota sobre tablero en Java con naves y minas  (Leído 23082 veces)

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Hola amigos de aprenderaprogramar!

Acudo a ustedes una vez más en busca de iluminación  ::)

Tengo que programar una versión del juego batalla naval en Java, ya tengo algunas partes aisladas como ventanas de inicio, registro de nuevos jugadores y login pero se me ha hecho bastante difícil arrancar la parte principal del juego:

Tengo que montar un tablero de 15x15 para el nivel principiante, 20x20 para el intermedio y 30x30 avanzado.  El juego no es para dos jugadores es para jugar contra la computadora únicamente y la parte gráfica de los tableros debe ser independiente del funcionamiento "interno" o lógico del juego, estoy pensando en tener 2 matrices, una de botones (gráficos) y la otra de ceros (agua) y unos (barcos y minas) ademas debo tener un cronómetro con hilos, ya que el juego tiene limite tiempo y en caso de que el jugador golpee una mina mala se le penalizará con tiempo y/o con devolución de impactos atinados (de forma aleatoria) y en caso de golpear una mina buena se le premiará con tiempo extra. Además se debe llevar un registro de los mejores 10 récords de entré todos los jugadores.

Respecto a la colocación de las naves estas deben de poder colocarse en cualquier lugar del tablero en forma vertical u horizontal respetando los límites del tablero, una vez colocados los barcos, las minas en total 6 se deben colocar aleatoriamente en cualquiera de los espacios que no estén ocupados por barcos.

No se bien como manejar la lógica de todo lo anterior  :-[ y me vendrían muy bien las sugerencias e ideas.

De antemano quedo muy agradecido por su atención y su ayuda!

Saludos!
« Última modificación: 09 de Noviembre 2015, 08:15 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #1 en: 09 de Noviembre 2015, 08:15 »
Hola!

Te doy algunas ideas de cómo se podría plantear:

- Definir una clase "CeldaTablero" que representa una celda del tablero. Esta celda del tablero tendrá como atributos posicionX (entero), posicionY (entero), y contenido (tipo ElementoDelTablero)

- Definir una superclase o interface ElementoDelTablero de la que heredan las clases "MinaMala", "MinaBuena" y "Nave"

- Definir una clase "Nave" con los atributos casillaXcomienza (entero), longitud (entero) y orientación (admite dos valores, x significaría orientación horizontal e y orientación vertical)

- Definir una clase Tablero que representa el tablero. El tablero contendrá una matriz de celdas de nxn elementos, siendo n un valor que recibe el constructor de la clase (que podrá ser 15, 20 ó 30).

- Definir una clase ColocadorDeElementosEnTablero que se encargue de colocar los elementos en el tablero.

No has explicado cuántas naves existen, la clase ColocadorDeElementos en tablero se encargaría de colocar las naves y las minas.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #2 en: 10 de Noviembre 2015, 21:11 »
Hola César! Y muchas gracias!

La verdad es que si he estado bastante enredado, siempre me pasa que me cuesta bastante saber por donde arrancar, voy a analizar tus sugerencias para ir adaptándolas y descomplicarme un poco la vida...  :-\

Aprovecho también para copiar el código que tengo hasta ahora para que lo veas y me digas que opinas:

Clase Player:
Código: [Seleccionar]
package starwarsbattleship;


/**
 *
 * @author r2montero
 */
public class Player {
    private String name,
                   nickname,
                   password;
   
    private Time time;
   
    public Player(String name, String nickname, String password, Time time) {
        this.name = name;
        this.nickname = nickname;
        this.password = password;
        this.time = time;
    }
   
    public Player(String name, String nickname, String password) {
        this(name, nickname, password, new Time());
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public String getNickname() {
        return nickname;
    }

    public String getPassword() {
        return password;
    }
   
     public Time getTime() {
        return time;
    }

    @Override
    public String toString() {
        String text = "";
       
        text += " "+name;
        text += " "+nickname;
        text += " "+password;
        text += " "+time.getMinutes();
        text += ":"+time.getSeconds();
       
        return text;
    }
}

Clase Time:
Código: [Seleccionar]
package starwarsbattleship;

/**
 *
 * @author r2montero
 */
public class Time {
    private int minutes;
    private int seconds;
   
    public Time(int minutes, int seconds) throws IllegalArgumentException {
        if(minutes < 0 || minutes > 4 || seconds < 0 || seconds > 59) {
            throw new IllegalArgumentException();
        }
        this.minutes = minutes;
        this.seconds = seconds;
    }
   
    public Time() {
        this(04, 59);
    }

    public int getMinutes() {
        return minutes;
    }

    public void setMinutes(int minutes) {
        this.minutes = minutes;
    }

    public int getSeconds() {
        return seconds;
    }

    public void setSeconds(int seconds) {
        this.seconds = seconds;
    }
}

Cont...

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #3 en: 10 de Noviembre 2015, 21:15 »
...
Clase SignIn, para el registro de jugadores:
Código: [Seleccionar]
package starwarsbattleship;

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

/**
 *
 * @author r2montero
 */
public class SignIn extends javax.swing.JFrame {
    //private boolean addToExisting = true;

    /**
     * Creates new form SignIn
     */
    public SignIn() {
        initComponents();
        setTitle("Registro de Jugadores");
        setIconImage(new ImageIcon(getClass().getResource("/images/deathstarico.png")).getImage());
        ((JPanel) getContentPane()).setOpaque(false);
        ImageIcon milleniumwindow = new ImageIcon(this.getClass().getResource("/images/falconwindow.jpg"));
        JLabel background = new JLabel();
        background.setIcon(milleniumwindow);
        getLayeredPane().add(background, JLayeredPane.FRAME_CONTENT_LAYER);
        background.setBounds(0, 0, milleniumwindow.getIconWidth(), milleniumwindow.getIconHeight());
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frame = getSize();
        setLocation((screen.width - frame.width) / 2,(screen.height - frame.height) / 2);
    }
   
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        namelbl = new javax.swing.JLabel();
        nicknamelbl = new javax.swing.JLabel();
        passwordlbl = new javax.swing.JLabel();
        nametxt = new javax.swing.JTextField();
        nicknametxt = new javax.swing.JTextField();
        passwordtxt = new javax.swing.JPasswordField();
        passrptlbl = new javax.swing.JLabel();
        passtxt = new javax.swing.JPasswordField();
        accept = new javax.swing.JButton();
        cancel = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);

        namelbl.setFont(new java.awt.Font("Star Jedi Logo DoubleLine2", 0, 14)); // NOI18N
        namelbl.setForeground(java.awt.Color.yellow);
        namelbl.setText("Nombre del Piloto");

        nicknamelbl.setFont(new java.awt.Font("Star Jedi Logo DoubleLine2", 0, 14)); // NOI18N
        nicknamelbl.setForeground(java.awt.Color.yellow);
        nicknamelbl.setText("Nickname");

        passwordlbl.setFont(new java.awt.Font("Star Jedi Logo DoubleLine2", 0, 14)); // NOI18N
        passwordlbl.setForeground(java.awt.Color.yellow);
        passwordlbl.setText("Contraseña");

        passrptlbl.setFont(new java.awt.Font("Star Jedi Logo DoubleLine2", 0, 13)); // NOI18N
        passrptlbl.setForeground(java.awt.Color.yellow);
        passrptlbl.setText("Repita la Contraseña");

        accept.setText("Aceptar");
        accept.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                acceptActionPerformed(evt);
            }
        });

        cancel.setText("Cancelar");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(84, 84, 84)
                        .addComponent(accept, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(passrptlbl)
                            .addComponent(passwordlbl)
                            .addComponent(nicknamelbl)
                            .addComponent(namelbl))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(nametxt, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(24, 24, 24)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(nicknametxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(passwordtxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(passtxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(cancel, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE))))))
                .addContainerGap(22, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(namelbl)
                    .addComponent(nametxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(13, 13, 13)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(nicknamelbl)
                    .addComponent(nicknametxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(passwordlbl)
                    .addComponent(passwordtxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(passrptlbl)
                    .addComponent(passtxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(61, 61, 61)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(accept)
                    .addComponent(cancel))
                .addContainerGap(30, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                       

    private void acceptActionPerformed(java.awt.event.ActionEvent evt) {                                       
        String pName = nametxt.getText();
        String pNick = nicknametxt.getText();
        String pPassword = new String(passwordtxt.getPassword());
        String pPass = new String(passtxt.getPassword());
        Player player;

        if (pPassword.equals(pPass)) {
            player = new Player(pName, pNick, pPass);
            Array saveToArrayList = Array.getInstance();
            saveToArrayList.addPlayer(player);
           
           
            /*FilesManager save = FilesManager.getInstance();
            boolean newFile = true;
           
            if(addToExisting){
               addToExisting = false;
               newFile = false;
            }
           
            save.SavePlayer(player, "players.csv", newFile);*/
           
        } else {
            BadPass msg = new BadPass();
            msg.setVisible(true);
            dispose();
        }
    }                                     

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(SignIn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SignIn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SignIn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SignIn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SignIn().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton accept;
    private javax.swing.JButton cancel;
    private javax.swing.JLabel namelbl;
    private javax.swing.JTextField nametxt;
    private javax.swing.JLabel nicknamelbl;
    private javax.swing.JTextField nicknametxt;
    private javax.swing.JLabel passrptlbl;
    private javax.swing.JPasswordField passtxt;
    private javax.swing.JLabel passwordlbl;
    private javax.swing.JPasswordField passwordtxt;
    // End of variables declaration                   
}


Clase BadPass, que indica un mensaje en caso de que las contraseñas no coincidan:
Código: [Seleccionar]
package starwarsbattleship;

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

/**
 *
 * @author r2montero
 */
public class BadPass extends javax.swing.JFrame {
   
    /**
     * Creates new form BadPass
     */
    public BadPass() {
        initComponents();
        setTitle("Contraseñas no coinciden");
        setIconImage(new ImageIcon(getClass().getResource("/images/deathstarico.png")).getImage());
        ((JPanel)getContentPane()).setOpaque(false);
        ImageIcon vader = new ImageIcon(this.getClass().getResource("/images/vadermsg.jpg"));
        JLabel background = new JLabel();
        background.setIcon(vader);
        getLayeredPane().add(background,JLayeredPane.FRAME_CONTENT_LAYER);
        background.setBounds(0, 0, vader.getIconWidth(), vader.getIconHeight());
       
        setLocationRelativeTo(null);
       
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        accept = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        setType(java.awt.Window.Type.POPUP);

        jLabel1.setFont(new java.awt.Font("Ubuntu", 1, 16)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(164, 21, 19));
        jLabel1.setText("¡Las contraseñas digitadas");

        jLabel2.setFont(new java.awt.Font("Ubuntu", 1, 16)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(164, 21, 19));
        jLabel2.setText("deben ser iguales!");

        jLabel3.setFont(new java.awt.Font("Ubuntu", 1, 16)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(164, 21, 19));
        jLabel3.setText("Intentelo otra vez");

        accept.setText("Aceptar");
        accept.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                acceptMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(accept, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel3)))
                .addContainerGap(186, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addGap(18, 18, 18)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 28, Short.MAX_VALUE)
                .addComponent(accept)
                .addGap(25, 25, 25))
        );

        pack();
    }// </editor-fold>                       

    private void acceptMouseClicked(java.awt.event.MouseEvent evt) {                                   
        SignIn back = new SignIn();
        back.setVisible(true);
        dispose();
    }                                   

   
   
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(BadPass.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(BadPass.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(BadPass.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(BadPass.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new BadPass().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton accept;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    // End of variables declaration                   
}

Cont...

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #4 en: 10 de Noviembre 2015, 21:16 »
Clase Array que maneja el ArrayList de los jugadores al cargar los archivos del juego:
Código: [Seleccionar]
package starwarsbattleship;

import java.util.ArrayList;

/**
 *
 * @author Jose Ricardo Rojas Montero. A24418
 */
public class Array {
   
    private static Array array;
    private ArrayList<Player> playersArray = new ArrayList();

    private Array() {
       
    }
   
    public static Array getInstance() {
        if(array == null) {
            array = new Array();
        }
       
        return array;
    }
     
    public void addPlayer(Player player) {
        playersArray.add(player);
    }

    public Player getPlayer(int index) {
        return playersArray.get(index);
    }
   
    public ArrayList<Player> getPlayersArray() {
        return playersArray;
    }
       
}

Clase FilesManager que se encargara de la gestión de los archivos (de momento solo un .csv pero se pide implementar ficheros de acceso aleatorio, ficheros binarios y ficheros de texto(.csv) en determinadas partes del juego).
Código: [Seleccionar]
package starwarsbattleship;

import java.io.*;
import java.util.StringTokenizer;

/**
 *
 * @author Jose Ricardo Rojas Montero. A24418
 */
public class FilesManager {
   
    private static FilesManager saver;

    private FilesManager() {
    }
   
    public static FilesManager getInstance() {
        if(saver == null){
            saver = new FilesManager();
        }
        return saver;
    }

    public void SavePlayer(Player player, String fileName, boolean addToExisting) {
        File file = new File(fileName);
        boolean header = false;
       
        if (file.exists() && !addToExisting) {
            file.delete();
            header = true;
        }
        if(!file.exists()){
            header = true;
        }

        FileWriter outputFlow = null;
        BufferedWriter output = null;

        try {
            outputFlow = new FileWriter(file, addToExisting);
            output = new BufferedWriter(outputFlow);
           
            if(header) {
                output.write("Nombre;Nickname;Passwor;Minutos;Segundos");
                output.newLine();
            }
                       
            output.write(player.getName()+";");
            output.write(player.getNickname()+";");
            output.write(player.getPassword()+";");
            output.write(Integer.toString(player.getTime().getMinutes())+";");
            output.write(Integer.toString(player.getTime().getSeconds()));
            output.newLine();
           
            output.close();
            outputFlow.close();
        } catch (IOException e) {
            System.out.println("Error");
            e.printStackTrace();
        } finally {
            try {
                output.close();
                outputFlow.close();
            } catch (IOException e) {
                System.out.println("Error al cerrar");
                e.printStackTrace();
            }
        }
    }
   
    public Player readPlayers(){
        Player player;
       
        try{
            FileReader readFile = new FileReader("players.csv");
            BufferedReader input = new BufferedReader(readFile);
           
            String name,
                   nickname,
                   password;
            Time time;
            int minutes;
            int seconds;
           
            String line;
            input.readLine();
           
            while((line = input.readLine()) !=null) {
                StringTokenizer txt = new StringTokenizer(line, ";");
               
                name = txt.nextToken();
                nickname = txt.nextToken();
                password = txt.nextToken();
                minutes = Integer.parseInt(txt.nextToken());
                seconds = Integer.parseInt(txt.nextToken());
                time = new Time(minutes, seconds);
               
                player = new Player(name, nickname, password, time);
                return player;
            }
        }
        catch(IOException e) {
            System.out.println("Error");
            e.getStackTrace();
        }
        return null;
    }
}

Clase GameFlow, donde pretendía meter la parte del desarrollo lógico del juego:
Código: [Seleccionar]
package starwarsbattleship;

/**
 *
 * @author r2montero
 */
public class GameFlow {
    private int boardSize;
    private int [][] computerBoard = new int [boardSize][boardSize];
    private int [][] playerBoard = new int [boardSize][boardSize];
   
    public void StartGame() {
        for(int row = 0; row < boardSize; row++) {
            for(int column = 0; column < boardSize; column++) {
                computerBoard[row][column] = 0;
                playerBoard[row][column] = 0;
            }
        }
    }
   
    /*public boolean isIntoBoardBounds() {
       
    }*/
}

De nuevo muchas gracias! y por favor disculpa cualquier molestia...

Saludos!

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #5 en: 10 de Noviembre 2015, 21:39 »
Citar
No has explicado cuántas naves existen

Respecto a este punto: Son en total 5 naves:
1 de cinco casillas;
1 de cuatro casillas;
2 de tres casillas;
1 de dos casillas.

El jugador deberá posicionar sus manos de forma manual y la colocación de las naves del sistema de debe generar de forma aleatoria.

Saludos!

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #6 en: 12 de Noviembre 2015, 09:49 »
Creo que necesitarás un reloj cronómetro, aquí he colgado el código de uno: https://www.aprenderaprogramar.com/foros/index.php?topic=3491.0

Salu2

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #7 en: 13 de Noviembre 2015, 19:17 »
Muchas Gracias Ogramar!

Me ahorrás mucho trabajo.

Ahora lo que me tiene en problemas es la colocación de las naves...

Saludos!

r2montero

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #8 en: 20 de Noviembre 2015, 19:54 »
Hola de nuevo!

Necesito ayuda! Estoy tratando de lograr que el jugador humano coloque sus naves en el tablero, ya logré que la máquina colocara aleatoriamente los suyos.

Pero no tengo idea de cómo hacer para que el usuario pueda colocar los suyos...

Saludos!

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Juego batalla naval hundir la flota sobre tablero en Java con naves y minas
« Respuesta #9 en: 22 de Noviembre 2015, 12:02 »
Pues yo creo que ya has hecho lo más difícil que sería la colocación aleatoria de las naves de la máquina. ¿Qué opciones se le van a dar al jugador, es decir, le permites colocar naves en horizontal y vertical o sólo en horizontal? Por ejemplo, un barco siempre está en horizontal, o puede estar en horizontal y en vertical?

Pega el código de lo que lleves hecho para intentar completarlo

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".