2016-11-27 42 views
0

我目前正在開發一個基本的國際象棋程序,它允許用戶保存當前的遊戲,稍後再回來並從他們離開的地方拿起。唯一的問題是我不知道如何將2d陣列保存到磁盤文件。更令人困惑的是,這組代碼需要單獨編寫每個值,如果值爲「null」,則不會輸出任何內容。我環顧四周,找不到真正解決我問題的任何事情。我在編碼方面相當新,所以如果這是一個基本問題,我很抱歉。我的當前設定的代碼是:將2d數組保存到磁盤文件

Path file = Paths.get("fileName"); 
Files.write(file, lines, Charset.forName("UTF-8")); 

PrintWriter save = new PrintWriter(new FileOutputStream(("fileName"))); 
Path.close(); 

回答

1

在第一實例中:在Java中的數組始終是一個對象;所以你可以簡單地使用Java serialization來一次讀取/寫入整個數組。換句話說:您告訴Java將整個數組轉換爲一串字節;然後將這些字節寫入文件。之後,你讀回來。而且你根本不必擔心空插槽。

所有你需要做的是:確保你有一個雙暗陣列的類有Serializable

如上所述,這是「簡單」的解決方案。爲了學習,你當然可以實施你自己的策略。關鍵在於:在Java中沒有「默認」編寫數組數據的方式。 必須寫代碼,需要一個/兩個/任何暗淡的數組;創建一個表示...寫入文件。然後你的代碼就可以反向那個操作。一些僞代碼給你一個想法:

np = compute number of pieces currently found on the board 
write np 
for col = a to h 
    for row = 1 to 8 
    if board(row/col) is not empty 
     write col, row, piece on that slot 

的一點是:在上面的代碼定義從內存板的東西,可以寫入到一個文件的映射。這也可以逆轉。

但老實說,你走錯了路。您根本不想保存(或兩個暗淡陣列)。

取而代之的是,考慮董事會代表什麼......沒有別的,只是一個具體的結果系列的行動。

當你買了一本關於奶酪的書,並且你看到關於比賽的討論時,他們是否只畫單板?不,那麼你通常會看到所有動作序列;和其中的一些電路板。

長話短說:您的設計中一個潛在的「基」元素可能是移動類;這只是一個舉動。

現在,國際象棋遊戲成爲List<Move>(移動對象列表)。通過使可串行化,您可以輕鬆地將整個歷史讀取/寫入文件。