没有visual studio,无法在PC上运行发布版本

时间:2015-05-02 10:12:26

标签: c++ visual-studio-2012 sfml

标题几乎说明了一切。

我正在学习C ++,并决定尝试制作游戏。我的朋友也想学习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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

此类问题的原因之一是缺少dll。因此,请确保系统上有所有可用的dll。

我们在复制依赖库时遇到的一个常见错误是我们忘记复制运行任何C ++应用程序所需的c ++运行时dll。此库随可视工作室一起安装,这就是应用程序在您的系统上运行而不是在您的朋友上运行的原因。

C ++运行时库是:msvcr,msvcrt,msvcp

此外,您还可以使用Dependency Walker软件检查是否存在任何其他缺失的依赖项。

希望有所帮助