【问题标题】:Console textgame.exe works on windows 7, not on vista… WHY?控制台 textgame.exe 适用于 Windows 7,而不适用于 vista... 为什么?
【发布时间】:2011-06-02 03:54:40
【问题描述】:

嘿,所以我使用 pdCurses 库和微软操作系统工具制作了一个文本游戏。以下是我的包含,并在下面寻找其他解释:

#include <iostream>
#include <time.h> // or "ctime"
#include <stdio.h> // for 
#include <cstdlib> 
#include <Windows.h> 
#include <conio.h>
#include<curses.h>
#include <algorithm>
#include <string>
#include <vector>
#include <sstream>
#include <ctime>

#include <myStopwatch.h> // for keeping times
#include <myMath.h>      // numb_digits() and digit_val();

myStopwath/Math.h 包括:

#include <stdio.h>
#include <math.h>
#include <tchar.h>

所以我在运行 Windows 7 的计算机上测试了游戏(其中包括一个包含 .exe 和 pdcurses.dll 的文件夹),它运行良好,但是当在另一台具有 vista 或更旧版本的计算机上运行它时,我的游戏来了上来了,但由于几乎瞬间失去所有玩家的生命而立即结束……这怎么可能?

如果您想查看完整的源代码,请访问Link

谢谢!

【问题讨论】:

  • 该链接只会导致另一个 stackoverflow 问题。我在那里找不到任何源代码。
  • 谢谢你告诉我哈哈!修好了

标签: windows console compatibility


【解决方案1】:

在主游戏循环中,您没有在将 coll 变量传递给 theScreen.check_collision() 之前对其进行初始化。如果玩家没有危险,则该函数不会更新此值。回到主循环,您不会检查 check_collision() 的返回值,程序现在根据该变量中的任何未初始化值做出决定。欢迎来到未定义行为的广阔世界。

您在不同操作系统上看到的差异很可能是由于不同的堆管理器初始化内存页面的方式。即使你的玩家存活了一段时间,在第一次碰撞之后,那个内存位置现在会保存“X”,然后永远不会被清除,虽然结果仍然是“未定义”,但在大多数架构上,这将导致注册一个新的每次迭代都会发生碰撞,解释为什么你的“生命”消失得如此之快。

你需要做两件事来解决这个问题:

  1. 通过 check_collision 的所有代码路径都必须写入“buff”输出参数。最简单的方法是在函数的第一行将其初始化为 0。 (或者,如果它打算作为输入/输出参数,那么您需要在调用 check_collision() 之前在主循环中对其进行初始化)
  2. 根据 check_collision() 的返回值而不是 out 参数做出决定。 (或者,如果该返回值真的不重要,请将函数的返回类型更改为 void)

【讨论】:

    【解决方案2】:

    string_lines 中的第 23 行末尾缺少逗号。不要认为这是你的全部问题,但这也不是好事。

    您没有说是否在每个操作系统(Vista 等)下单独重新编译它。如果你重新编译,是否使用了相同版本的编译器。

    【讨论】:

      【解决方案3】:

      Windows 7 附带 Visual C++ 2008 运行时。 Windows Vista 附带了 Visual C++ 2005 运行时。 XP 附带 Visual C++ 6.0 运行时。

      由于您在 Visual Studio 2010 中编译了该应用程序,因此很可能它不是针对较旧的操作系统进行编译的。

      尝试在您正在测试的机器上安装最新的运行时,如果这样做之后可以正常工作,您就知道要重新编译您的项目以支持较旧的操作系统。

      http://www.microsoft.com/download/en/details.aspx?id=5555x86 http://www.microsoft.com/download/en/details.aspx?id=14632x64

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        相关资源
        最近更新 更多