[ad_1]
我有这个垄断克隆,我需要添加保存和加载的能力,但我不知道从哪里开始,所以感谢任何帮助!
Monopoly,在终端中,用 C 语言实现棋盘游戏大富翁,下载Monopoly的源码_GitHub_酷徒[^]
我尝试过的:
记录每次掷骰子,但玩家姓名已损坏
解决方案1
这很大程度上取决于现有代码的作用。 一般来说,您只需将数据写入文件以保存,然后从文件中读取数据以重新加载。 但确切的实现很大程度上取决于现有代码的结构。
看 流I/O | 微软学习[^]。
解决方案2
我们无法给你一个具体的答案:我们不知道你尝试了什么,也不知道对这个软件有任何熟悉程度——而且我不会费力地浏览整个 github 项目来弄清楚它是如何工作的。尝试添加功能。
如果您想向现有项目添加功能,您需要首先了解整个项目:仅“记录骰子掷出”不会有帮助,因为这甚至无法关闭恢复项目所需的所有信息到目前为止的游戏:购买你所登陆的房产并不是强制性的,机会卡和公益金卡是随机顺序的,等等。
所以去github项目仔细检查一下:当你知道它是如何工作的时候,你就可以开始考虑mod了,但之前不行!
解决方案3
你很幸运,现有代码已经从文件加载“位置”(’位置.csv‘ 在里面 ‘数据‘ 文件夹)。 看看 ReadLocations
函数并用它作为实现你的(比如说)的参考 ReadPlayers
一。
然后,凭借所获得的经验,您可以轻松地编写补充性内容 WritePlayers
代码也是如此。
解决方案4
在Windows下测试程序时,如果命令窗口大小不合适,程序就会终止,这是特别烦人的事情。 应该对此进行更改,以便更容易从开发环境中调试程序。
这是Windows的改进版本,它调整窗口大小而不是关闭程序。
#ifdef _WIN32 #include <windows.h> void checkWindowSize(int screenWidth, int screenHeight) { CONSOLE_SCREEN_BUFFER_INFO csbi; HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); if (!GetConsoleScreenBufferInfo(hStdout, &csbi)) { printf("Error: GetConsoleScreenBufferInfo (%d)\n", GetLastError()); exit(1); } SMALL_RECT srctWindow = csbi.srWindow; int width = srctWindow.Right - srctWindow.Left + 1; int height = srctWindow.Bottom - srctWindow.Top + 1; if (width < screenWidth || height < screenHeight) { if(width < screenWidth) srctWindow.Right = screenWidth; if(height < screenHeight) srctWindow.Bottom = screenHeight; COORD wbuff = { screenWidth +1, screenHeight +1 }; SetConsoleScreenBufferSize(hStdout, wbuff); SetConsoleWindowInfo( hStdout, TRUE, &srctWindow); // printf("\nTerminal size is too small. Please resize terminal."); // printf("\nSuggested size: %d X %d", screenWidth, screenHeight); // printf("\nCurrent size : %d X %d", width, height); // printf("\n\n"); // exit(1); }
正如已经说过的,代码有很多弱点,从未初始化的变量到堆栈问题。 例如,在 ReadPlayers() 函数中,调试器报告了发生堆栈溢出的情况。
这里使用scanf和%s将字符串读入一个字节的数组中,看起来不太健康。
[ad_2]
コメント