Suporte ao desenvolvimento de jogos!


    [Java]Sistema de Salvar/Abrir dados em um game

    Compartilhe
    avatar
    /_Lucas
    Novato
    Novato

    Mensagens : 18
    Créditos : 0

    [Java]Sistema de Salvar/Abrir dados em um game

    Mensagem por /_Lucas em Qua Dez 12, 2018 1:50 am

    Tipo: Tutorial
    Nível: Intermediário.
    Linguagem: java.
    Contato e mais informações:  https://lucasindiesh1p.wordpress.com/ 
    Mais tutorais sobre:  https://lucasindiesh1p.wordpress.com/2018/12/12/sistema-de-salvar-abrir-dados-em-um-game/
    Passo1: Criar uma classe que terá a estrutura dos dados salvos (é a classe é a SalvarDado)
    Passo2: Criar uma classe responsável pela implementação de como os dados serão salvos (é a classe GerenciarRecursos)
    Passo3: Criar uma classe responsável por exibir um meio interativo com o usuário para que ele possa excutar o programa(É a classe Executar).
    Primeiro crie uma classe chamada SalvarDado, e implementar o Serializable nela.

    Código:
    public class SalvarDado implements Serializable{…}


    Escreva esse comando dentro dela:

    Código:
    private static final long serialVersionUID = 1L; 
    //você pode escrever qualquer numero que quiser, mas tem que ser um numero do tipo long.
    // é o comando usado para fazer com que as estruturas de dados possam voltar ao seu original. O que nos economiza bastante tempo, //para que não tenhamos que fazer isso manualmente.
    /Agora declare as variáveis que você quer, neste exemplo:
    public String nome;
    public int idade;


    Agora, criaremos a classe que vai implementar os métodos responsáveis por Salvar/Abrir os dados salvos, esses dados nada mais são do que informações que são armazenadas em um arquivo (salvar) e quando carregadas/abertas significa que esse arquivo foi lido:

    Código:
    public class GerenciarRecursos {
    public static void Salvar(Serializable dados, String nomeArquivo) throws Exception {
    try(ObjectOutputStream oos = new ObjectOutputStream(Files.newOutputStream(Paths.get(nomeArquivo)))){
    oos.writeObject(dados);
    }
    }
    public static Object Consultar(String nomeArquivo) throws Exception{
    try(ObjectInputStream ois = new ObjectInputStream(Files.newInputStream(Paths.get(nomeArquivo)))){
    return ois.readObject();
    }
    }
    }


    Os dois métodos da classe acima é que estão implementnado como (quais parâmetros) e em que tipo os dados vão ser salvos e carregados(consultados), no caso trata-se de dados de um arquivo com texto(por isso a classe Files é utilizada).
    Agora vamos criar a classe principal, que será responsável por executar as outras classes, e neste caso escolhi o javafx para darao usuário um visual gráfico o que poderia ter sido feito com algum outro conjunto de gráficos java.

    Código:
    import javafx.application.Application;
    public class Executar extends Application {
    private Parent createContent() {
    TextField fieldNome = new TextField();
    TextField fieldIdade = new TextField();
    Button btnSave = new Button(“SALVAR”);
    btnSave.setOnAction(event -> {
    SalvarDado data = new SalvarDado();
    data.idade = fieldNome.getText();
    data.idade = Integer.parseInt(fieldIdade.getText());
    try {
    GerenciarRecursos.Salvar(data, “1.save”);//voce pode criar seu proprio formato aqui, ou usar o tipo .txt, se modificar aqui, lembre-se de modificar o do “CARREGAR” também, pois vc quer que ele busque as informações no mesmo arquivo que foi salvo.
    }
    catch(Exception e) {
    System.out.println(“Could’t save: “+ e.getMessage());
    }
    });
    Button btnLoad = new Button(“CONSULTAR”);
    btnLoad.setOnAction(event -> {
    try {
    //aqui estamos criando uma variavel do mesmo tipo do dado que foi salvo, para assim em seguida essa informação poder ser recuperada/alocada na variavel e apresentada ao usuário.
    SalvarDado data = (SalvarDado) GerenciarRecursos.Consultar(“1.save”);
    fieldNome.setText(data.nome);
    fieldIdade.setText(String.valueOf(data.idade));
    }catch(Exception e) {
    System.out.println(“Couldn’t load save data: “+ e.getMessage());
    }
    });
    VBox vbox = new VBox(10, fieldNome, fieldHP, btnSave, btnLoad);
    vbox.setAlignment(Pos.CENTER);
    vbox.setPadding(new Insets(50, 50, 50, 50));
    return vbox;
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
    Scene scene = new Scene(createContent());
    primaryStage.setTitle(“Tutorial”);
    primaryStage.setScene(scene);
    primaryStage.show();
    }
    public static void main(String[] args) {
    launch(args);
    }
    }


    Nessa classe, acima, criamos uma simples “aplicação” visual para poder testar se os métodos: salvar e carregar criados na outra classe estão funcionando. Por
    isso ela estende o javafx.application.Application.
    Atenção, pois o usuário só poderá escrever números do tipo inteiro para o campo da “idade, pois a definimos como integer, tanto na classe “SalvarDado” quanto ao longo da implementação da classe executar.


    referências:
    Sobre o formato do arquivo que voce salva as informações:
    https://stackoverflow.com/questions/2445060/how-to-create-own-filetype
    http://www.tutorialspoint.com/java/java_serialization.htm
    “To save object to file you need serialization.
    You can choose whatever file extension we like, example: .car.”
    “So, implement the Serializable interface when you need to store a copy of the object, send them to another process which runs on the same system or over the network.
    Because you want to store or send an object.
    It makes storing and sending objects easy. It has nothing to do with security.”
    https://stackoverflow.com/questions/4548816/when-should-we-implement-serializable-interface
    https://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
    “An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream.
    ObjectOutputStream and ObjectInputStream can provide an application with persistent storage for graphs of objects when used with a FileOutputStream and FileInputStream respectively. ObjectInputStream is used to recover those objects previously serialized. Other uses include passing objects between hosts using a socket stream or for marshaling and unmarshaling arguments and parameters in a remote communication system.”
    https://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html
    youtube/watch?v=-xW0pBZqpjU "Almas Baimagambetov"
    “JavaFX is a set of graphics and media packages that enables developers to design, create, test, debug, and deploy rich client applications that operate consistently across diverse platforms.”
    https://docs.oracle.com/javafx/2/overview/jfxpub-overview.htm
    Dexter
    Dexter
    Semi-Experiente
    Semi-Experiente

    Mensagens : 83
    Créditos : 13

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: [Java]Sistema de Salvar/Abrir dados em um game

    Mensagem por Dexter em Qua Dez 12, 2018 9:23 am

    Obrigado por disponibilizar.

      Data/hora atual: Qua Mar 20, 2019 6:17 pm