gpt4 book ai didi

c - 如何在结构中保存 ncurses 窗口?

转载 作者:行者123 更新时间:2023-11-30 16:43:50 24 4
gpt4 key购买 nike

我有以下结构:

typedef struct gameState {
WINDOW *game;
character *player;
finalPosition positions[5];
int level, found, timeSpent[3];
} gameState;

如何在 gameState.game 中保存 ncurses 窗口?

这就是我创建窗口的方式。

WINDOW * game = newwin(20, 50, 2, 2);

我认为我的问题可能是指针问题,我试图保存指向结构的指针,每当我离开创建该指针的函数时,它都会删除指针指向的内容。

我的最终目标是将整个结构保存到一个二进制文件中。我知道 ncurses 有 putwin() 函数,它将窗口保存到二进制文件中,但我需要将窗口和该结构的其余内容保存在同一个二进制文件中,因此 putwin() 无法解决我的问题。

最佳答案

尽管您很可能最好序列化生成窗口的游戏状态而不是窗口本身,但使用 putwingetwin 没有问题。 code> 序列化并检索 ncurses 窗口。

putwin 只是将窗口的描述写入给定的FILE。它不会倒回文件流,也不要求倒回文件流。它也不会关闭文件流。同样,getwin 只是从当前读取点开始从给定的 FILE 读取窗口描述。

因此您可以使用 putwin/getwin 作为序列化过程的一部分:

int serialiseWindow(Window* game, FILE* file) {
return putwin(game, file);
}

int serialiseGameState(gameState *state, FILE* file) {
int status;
status = serialiseWindow(state->game, file);
if (status != OK) return status;
status = serialisePositionArray(state->positions,
(sizeof state->positions)/(sizeof *state->positions),
file);
if (status != OK) return status;
status = serialiseInteger(state->level, file);
if (status != OK) return status;
status = serialiseInteger(state->found, file);
if (status != OK) return status;
status = serialiseIntegerArray(state->timeSpent,
(sizeof state->timeSpent)/(sizeof *state->timeSpent),
file);
return status;
}

并且,要取回它:

int retrieveWindow(Window** game, FILE* file) {
Window* win = getwin(file);
*game = win;
return win ? OK : ERR;
}

int retrieveGameState(gameState *state, FILE* file) {
int status;
status = retrieveWindow(&state->game, file);
if (status != OK) return status;
status = retrievePositionArray(state->positions,
(sizeof state->positions)/(sizeof *state->positions),
file);
if (status != OK) return status;
status = retrieveInteger(&state->level, file);
if (status != OK) return status;
status = retrieveInteger(&state->found, file);
if (status != OK) return status;
status = retrieveIntegerArray(state->timeSpent,
(sizeof state->timeSpent)/(sizeof *state->timeSpent),
file);
return status;
}

关于c - 如何在结构中保存 ncurses 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com