簡體   English   中英

C++ 游戲中沒有出現 Print 語句

[英]The Print statements don't show up in the C++ game

所以我正在嘗試使用 C++ 編寫游戲。 我正在使用這個在線編譯器,所以我也可以在學校使用它。 這個程序只是我開始制作的一個簡單的點擊游戲。 當我測試它以查看代碼到目前為止是否有效時,沒有顯示任何內容,考慮到我在代碼中為玩家提供指示的打印語句,這很奇怪。

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{

    int SCORE = 0;
    int LEVEL = 1;
    int COST = 50;
    int ADDSCORE = 10;
    char KEYINPUT;
    bool GAMEON = true;

    printf("Press space bar to gain points to your score.\n");
    printf("Press z key to upgrade your score multiplyer.\n");
    printf("Press the escape key (esc) to quit.\n");
    printf("Upgrade score multiplyer = %d.\n", COST);
    printf("Score multiplyer = LV%d.\n", LEVEL);
    printf("Score = %d.\n", SCORE);

    while (GAMEON == true) {

        if (KEYINPUT == 32) {

            SCORE += ADDSCORE;

        }

        if (KEYINPUT == 122) {

            ADDSCORE += 10;
            SCORE -= COST;
            COST *= 2;
            LEVEL += 1;

        }

        if (KEYINPUT == 27) {

            GAMEON = false;

        }

    }

    printf("Game has ended. You may now close out of the game");

    return 0;
}

我不確定這是我的代碼還是在線編譯器,但我在不同的編譯器上執行並得到了相同的結果。 沒有。 不完全確定為什么會發生這種情況,但是如果有人能發現問題所在,您可以告訴我。

我在我的系統上嘗試了一些本地編譯器,文本也沒有打印。 現在首先,如果你想用 C++ 編寫代碼,你需要使用 C++。 printf實際上是一個 C 函數。 您沒有在示例中使用任何 C++ 特定代碼。 但是,如果您想在 C++ 應用程序中使用 C,請使用 C 庫的 C++ 等效項,在您的情況下將是<cstdio> 現在問題本身:我在 Windows 上使用 MSYS shell,我假設您使用類似的東西。 使用printf時,輸出緩沖區似乎有問題。 通常,輸出緩沖區在輸入的末尾用\\n換行符刷新。 顯然,這在某些情況下似乎不起作用。 在我的情況下,在輸出末尾添加一個 fflush(stdout) 並且文本是從緩沖區打印的,並且還直接從 Windows 命令行調用它,而不刷新緩沖區,就可以了。 所以我認為你的 shell 如何處理緩沖區是一個問題。 現在到解決方案。 每次要打印時都刷新輸出緩沖區,或者開始使用 C++ IO。 同樣如上所述,您需要在程序運行時初始化和更改 KEYINPUT 中的值。

#include <iostream>

using namespace std;

int main()
{

int SCORE = 0;
int LEVEL = 1;
int COST = 50;
int ADDSCORE = 10;
char KEYINPUT;
bool GAMEON = true;
/* Use cout instead of printf for output operations */
cout << "Press space bar to gain points to your score." << endl
     << "Press z key to upgrade your score multiplyer." << endl
     << "Press the escape key (esc) to quit" << endl
     << "Upgrade score multiplyer = " << COST << endl
     << "Score multiplyer = LV" << LEVEL << endl
     << "Score = " << SCORE << endl;

while (GAMEON == true) {
    KEYINPUT = cin.get(); /* You need to initialize the value before using and change it in the loop */
    if (KEYINPUT == 32) {

        SCORE += ADDSCORE;

    }

    if (KEYINPUT == 122) {

        ADDSCORE += 10;
        SCORE -= COST;
        COST *= 2;
        LEVEL += 1;

    }

    if (KEYINPUT == 27) {

        GAMEON = false;

    }

}

cout << "Game has ended. You may now close out of the game" << endl;

return 0;
}

最后的一點說明:由於我在開始時嘗試做類似的小游戲,因此您需要使用平台相關庫來捕獲那些鍵擊,如 ESC 或其他未直接放入輸入緩沖區的鍵。 我知道 Windows 的 conio,否則 winapi 有很好的文檔記錄並且相對易於使用。 還有很多關於如何使用 winapi 從命令行窗口捕獲擊鍵的示例,這些示例可以在 google 上輕松找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM