簡體   English   中英

C - 在棋盤游戲上實現撤消

[英]C - Implementing Undo on a board game

我需要實現一個更好的 C function 來保存我正在開發的(簡單)棋盤游戲的狀態。 我正在使用固定尺寸(7 x 7)的板。 每個單元格定義為:

struct board {
struct pwn pawn[3];
short unsigned size;
};

pwn 被定義為一個簡單的元組,包含一個 boolean 和一個短;

我的問題是我是否可以在不使用太多空間的情況下實現撤消(也可能是重做)function。 目前我正在考慮使用堆棧 ADT 來存儲字節大小的 arrays 結構如下

typedef struct stringtrace {
    char x, y;
    char *pl;//these are of size 3 max, no dimension needed
    char *off;
} stringtrace;

並且只是將它用作一個數組,但我覺得它既耗時又占用太多空間,因此我必須將它限制為 20 個左右的動作來重做(由於糟糕的預算 pc)。

有沒有辦法讓 memory 倒計時? 我可能正在考慮使用 FILE* function,但出於安全原因,有人建議我不要使用 gets() 和此類函數。 我非常願意接受建議

在 64 位機器上,如果指針在 8 字節邊界對齊,則撤消結構需要 24 字節。 使用 2 KB,您可以使用數組進行近 100 級撤消。 你確定這還不夠嗎?

對於像撤銷列表這樣的小型數據結構,如今 arrays 幾乎總是正確的答案。 您所做的任何其他事情都將需要更多代碼,並且您的代碼大小很快就會超過任何大小節省。 如果,確實,你管理任何儲蓄。 雖然對於這個應用程序來說可能並不重要,但 arrays 也非常適合緩存,因此您可以在編寫簡單代碼時獲得更好的性能。

如果您想要,哦,一百萬級撤消,您可以創建一個 2 MB 的文件並使用mmap (2)。 這將 RAM 頁面分配留給操作系統,具體取決於機器大小,並且仍然為您留下一個簡單的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM