C ++游戏自动返回0

时间:2016-04-05 19:30:04

标签: c++ compiler-errors

每当我尝试运行此游戏时,它会自动返回0。 游戏是一个基于文本的生存游戏,我在Code :: Blocks上编码。编译器是MinGW。我是一个知识渊博的程序员。编译时没有错误。

// This game automatically returns 0 and ends for some reason...
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int hunger;
int warmth;
int thirst;
int choice;
// Declares variables for hunger, warmth, thirst, and the users choice

int start()
{
    cout<< "You are stuck in a forest, all alone"<< endl;
    cout<< "You must maintain your hunger, thirst, and warmth." << endl;
    int mainPage();
}

int hunt()
{
    srand(time(0));
    cout<< "You have chosen hunt!"<< endl;
    if ((rand() % 2) == 2){
        cout<< "You caught a deer!"<< endl;
        hunger = hunger + 1;
    }
    else{
        cout<< "You could not find anything..."<< endl;
    }
    int mainPage();

}
// The previous function is used for the hunting choice

int wood()
{
    cout<< "You have chosen find firewood!"<< endl;
    if ((rand() % 2) == 2){
        cout<< "You found firewood!"<<endl;
        warmth = warmth + 1;
    }
    else{
        cout<< "You could not find any firewood"<< endl;
    }
    int mainPage();
}
// Wood choice

int water()
{
    cout<< "You have chosen find water!"<< endl;

    if ((rand() % 2) == 2){
        cout<< "You have found a river!"<< endl;
        thirst = thirst + 1;

    }
    else{
        cout<< "You could not find anything..."<< endl;
    }
    int mainPage();
}
// Water choice

int mainPage()
{
    warmth = warmth - 1;
    hunger = hunger - 1;
    thirst = thirst - 1;
    // Subtracts one from each variable per turn
    if (hunger == 0){
        cout<< "You starved!"<< endl;
        cout<< "Game over!"<< endl;
        return 0;
    }
    if (thirst == 0){
        cout<< "You became dehydrated!"<< endl;
        cout<< "Game over!"<< endl;
        return 0;
    }
    if (warmth == 0){
        cout<< "You froze!"<< endl;
        cout<< "Game over!"<< endl;
        return 0;
    }
    // You die if any of the variables reach zero

    cout<< "Your hunger is"<< hunger<<  endl;
    cout<< "Your warmth is"<< warmth<<  endl;
    cout<< "Your thirst is"<< thirst<<  endl;
    cout<< "What would you like to do?"<< endl;
    cout<< "1 = hunt, 2 = find firewood, 3 = find water"<< endl;
    cin>> choice;
    if (choice = 1){
        int hunt();
    }
    if (choice = 2){
        int wood();
    }
    if (choice = 3){
        int water();
    }
    // The main page that takes the users choice as input and also tells you the amount of each variable

}
int main()
{
    hunger = 5;
    thirst = 5;
    warmth = 5;
    int start();
}
// the main function

1 个答案:

答案 0 :(得分:3)

您的代码有几个问题。首先,您没有正确调用您的功能。当你有

int start();

main()中,它不会调用start函数,而是声明一个名为start的函数,该函数返回int并且不执行任何操作。知道你的主要功能必不可少

int main() {}

因为除了设置一些永远不会使用的变量之外什么都不做。打开警告的好编译器应该至少告诉您有未使用的变量。

当你声明一个函数而不是调用它时,你将在其他地方调用函数时遇到同样的问题。

修复函数调用后,第二个问题就会出现。在定义函数之前,您将使用函数。解决这个问题的一个简单方法是在定义/使用任何函数之前声明所有函数的函数原型,以便编译器知道该函数将会存在。

第三个问题是你使用

srand(time(0));

在函数hunt()中。这意味着每次拨打hunt时,您都会重新设置rand。而不是这样做,你可以将srand(time(0));放在main中,然后每次执行程序时只会rand种子。

我看到的最后一件事是没有声明返回int的函数实际返回任何内容。如果声明函数具有返回值,则需要从函数返回一些内容。如果您不想返回任何内容,则可以返回类型void,这意味着该函数不返回任何内容。