c++ - 无法在没有 visual studio 的 PC 上运行发布版本

标签 c++ visual-studio-2012 sfml

标题几乎说明了一切。

我目前正在学习 C++,并决定尝试制作游戏。 friend 也想学C++,但是没有装VS,试了一下,开机就死机。

当我从 VS 外部运行它时它很好,我将它以包含所有 DLL 的 ZIP 文件和发布版本发送给他。不确定为什么会这样,有人有任何想法吗?

这是代码,写得相当糟糕,可读性很差(抱歉。)

#include "stdafx.h"
#include <SFML/Graphics.hpp>
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>

int main()
{
    HWND hWnd = GetConsoleWindow();
    ShowWindow(hWnd, SW_HIDE);

    bool gameover(1);

    sf::RenderWindow window(sf::VideoMode(240, 500), "Hangman but not very good.");
    sf::Text text;
    sf::Font font;
    sf::Sprite sprite;
    sf::Texture texture;

    texture.loadFromFile("0.png");

    sprite.setTexture(texture);

    char uInput[11] = {0};
    char displayed[11] = {0};
    bool setup = false;
    int charCount(0);
    int iii(0);
    bool correct(0);
    long long wrongGuesses(0);
    int wordlength(0);
    long long gameoverCounter(0);
    char currentGuess = 0;
    bool bypass = true;
    char pngC = '1';
    char IOarray[] = "x.png";
    bool firstSetup = true;
    int correctCounter = 0;

    font.loadFromFile("Xefus.ttf");
    text.setColor(sf::Color::Yellow);
    text.setCharacterSize(24);
    text.setFont(font);
    text.setString("Please enter the word to guess, press enter to stop");

    while(window.isOpen())
    {
        sf::Event event;
        while(gameover)
        {
            while(window.pollEvent(event))
            {
                if(event.type == sf::Event::Closed)
                    window.close();

                if(event.type == sf::Event::TextEntered)
                {
                    bypass = true;

                    if(iii < 10 && !setup)
                        if(event.text.unicode < 128 && event.text.unicode > 96)
                        {
                            uInput[iii] = static_cast<char>(event.text.unicode);
                            ++iii;
                            ++wordlength;
                        }

                    {
                        for(int i = 0; i < wordlength; ++i)
                            if(event.text.unicode == uInput[i] && !firstSetup)
                            {
                                displayed[i] = uInput[i];
                                bypass = false;
                                ++correctCounter;
                            }
                            else if(bypass = true)
                                ++wrongGuesses;
                    }
                }

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
                    setup = true;

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace))
                {
                    uInput[iii] = 0;
                    iii -= 1;
                }
            }

            if(!setup)
            {
                text.setString(uInput);
                displayed[wordlength - 1] = ('*');
                setup = false;
            }
            else
            {
                text.setString(displayed);
                bypass = false;

                if(firstSetup)
                {
                    firstSetup = false;
                    gameoverCounter = 0;
                    wrongGuesses = 0;
                    correctCounter = 0;
                }

                if(wrongGuesses >= wordlength)
                {
                    ++gameoverCounter;
                    wrongGuesses = 0;
                    IOarray[0] = static_cast<char>(gameoverCounter + 48);

                    texture.loadFromFile(IOarray);
                }

                if(gameoverCounter >= 9)
                {
                    return 0;
                    window.clear();
                    window.draw(sprite);
                    window.draw(text);
                    window.display();
                }

                if(correctCounter >= wordlength)
                {
                    return 0;
                    window.clear();
                    window.draw(sprite);
                    window.draw(text);
                    window.display();
                }

                wrongGuesses = 0;
            }

            window.clear();
            window.draw(sprite);
            window.draw(text);
            window.display();
        }
    }
}

最佳答案

Vikash 是对的,这是缺少运行时库的情况。您需要做的是在您的目标计算机上安装正确的 Redistributable 软件包。

Google 并为您的应用程序下载合适的版本:

Visual C++ Redistributable for Visual Studio YYYY”,其中 YYYY 是您的 Visual Studio 的年份。

下载后,在您的目标计算机上安装它,然后运行您的应用程序。

安德鲁

关于c++ - 无法在没有 visual studio 的 PC 上运行发布版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30001023/

相关文章:

c++ - 如何使用 std::transform 算法将 hash_map<string, string> 转换为 hash_map<wstring, wstring>?

c++ - 如果我不知道每个列表中有多少个数字,如何将给定数量的数字列表作为输入?

asp.net-mvc - 如何在Visual Studio 2012中降级Entity Framework 5迁移?

visual-studio-2012 - 保留 namespace 前缀的转换

c++ - 检查鼠标滚轮状态 SFML

c++ - 以错误大小呈现的 SFML 窗口

c++ - 我们如何使用 Visual Studio 2013 在 C++ 中访问变更集编号?

c++ - 下面的c++程序有没有代码优化方法

xml - 生成 XML 的 Visual Studio 2012 T4 模板出错

c++ - 如何给 Mandelbrot 着色?