2016-04-05 2 views
-4

Всякий раз, когда я пытаюсь запустить эту игру, она автоматически возвращает 0. Игра представляет собой текстовую игру выживания, которую я закодировал в Code :: Blocks. Компилятор MinGW. Я полу-знающий программист. При компиляции ошибки нет.C++ игра возвращает 0 автоматически

// 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

Проиграть и закрыть. Пожалуйста, прочитайте [Как спросить] (http://stackoverflow.com/help/asking) в следующий раз перед отправкой вопроса. –

+0

Прошу прощения, я не должен был этого делать. –

ответ

3

У вас есть несколько вопросов с кодом. Сначала вы неправильно вызываете свою функцию. Если у вас есть

int start(); 

в main() не вызывает функцию start, но вместо этого объявляет функцию с именем start, что возвращает int и ничего не берет. Знание того, что вы являетесь основной функцией, становится

int main() {} 

, поскольку вы ничего не делаете, кроме определенных переменных, которые никогда не будут использоваться. Хороший компилятор с включенными предупреждениями должен был хотя бы сказать вам, что у вас неиспользуемые переменные.

У вас будет такая же проблема везде, где вы вызываете функцию, когда вы объявляете функцию вместо ее вызова.

Ваша вторая проблема возникнет после того, как вы исправите свои функциональные вызовы. Вы будете использовать функции, прежде чем их определить. Легкий способ исправить это - объявить прототип функции всех ваших функций до того, как вы определите/используете любой из них, чтобы компилятор знал, что функция будет существовать.

Третий вопрос вы используете

srand(time(0)); 

в функции hunt(). Это означает, что каждый раз, когда вы звоните hunt, вы будете пересылать rand. вместо этого вы можете положить srand(time(0)); в основной, а затем вы будете только семена rand один раз за выполнение программы.

Последнее, что я вижу, это ни одна из ваших функций, объявленных для возврата int, фактически ничего не возвращает. Если вы заявляете, что функция имеет возвращаемое значение, вам нужно вернуть что-то из функции. Если вы не хотите ничего возвращать, вы можете сделать возвращаемый тип void, что означает, что функция ничего не возвращает.

+0

Теперь я решил третью проблему, но два других являются тайнами для меня, как их исправить. –

+0

@TylerBacon. Я предлагаю вам ознакомиться с тем, как объявлять, определять и использовать функции: http://www.tutorialspoint.com/ cplusplus/cpp_functions.htm – NathanOliver

+0

@TylerBacon Чтобы вызвать функцию 'start', вы используете' start(); ', а не' int start(); '. – Barmar

Смежные вопросы