保存游戏状态

时间:2013-11-05 08:31:14

标签: java

我正在制作一个只打字游戏(没有图形),我需要保存游戏状态并稍后重新加载。我一直在想但却什么也想不到(我不是一个非常有经验的程序员)。有人可以启发我吗?

3 个答案:

答案 0 :(得分:3)

您需要您的班级来实施Serializable界面。然后将对象写入文件。然后在启动时再次读回文件。

  

序列化对象意味着将其状态转换为字节流   字节流可以恢复为对象的副本。一个   Java对象是可序列化的,如果它的类或它的任何超类   实现java.io.Serializable接口或其   子接口,java.io.Externalizable。反序列化是一个过程   将一个对象的序列化形式转换回一个副本   宾语。

Serialzable界面的美妙之处在于您不需要实现任何方法。它是一个标记界面。您只需创建一个类Serializable,然后将其写入文件。

此处谨慎提示:每次写入文件时都需要截断文件。不要尝试将数据附加到它。它会破坏文件的标题。

这里的教程:http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html

答案 1 :(得分:1)

您可以使用ObjectOutputStream并调用其方法writeObject来保存您的游戏状态。

并使用ObjectInputStream并调用其方法readObject来加载游戏状态。

e.g。

保存游戏状态

public void saveGameDataToFile(File file) {   

    try {   
        FileOutputStream fileStream = new FileOutputStream(file);   
        ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);   

        objectStream.writeObject(flag);   
        objectStream.writeObject(color);   
        objectStream.writeObject(snake);   
        objectStream.writeObject(food);   
        objectStream.writeObject(new Integer(score));   

        objectStream.writeObject(barrier);   
        objectStream.writeObject(new Boolean(needToGenerateFood));   
        objectStream.writeObject(new Boolean(needToGenerateBarrie));   

        objectStream.close();   
        fileStream.close();   

        JOptionPane.showConfirmDialog(frame, 
            "Save game state successfully.", 
            "Snake Game",   
            JOptionPane.DEFAULT_OPTION);   
    } catch (Exception e) {   
        JOptionPane.showConfirmDialog(frame, 
            e.toString() + "\nFail to save game state.",   
            "Snake Game", 
            JOptionPane.DEFAULT_OPTION);   
    }   
}   

加载游戏状态

public void loadGameDataFromFile(File file) throws ClassNotFoundException{   

    ... ...

    FileInputStream fileStream = new FileInputStream(file);   
    ObjectInputStream objectStream = new ObjectInputStream(fileStream);   

    svaedFlag = (int[][]) objectStream.readObject();
    savedColor = (Color[][]) objectStream.readObject();     
    savedSnake = (Snake) objectStream.readObject();   
    savedFood = (Grid) objectStream.readObject();   
    savedScore = (Integer) objectStream.readObject();   
    savedBarriers =(Barriers) objectStream.readObject();   
    savedNeedToGenerateFood = (Boolean)objectStream.readObject();   
    savedNeedToGenerateBarrie = (Boolean)objectStream.readObject();   
    ... ...
}

答案 2 :(得分:0)

用于持久化对象状态

  1. 使用序列化
  2. 将内容保存为文本或xml
  3. 将内容保存到数据库(sqlLite,hsql)