2014-09-23 2 views
0
#include<iostream> 
#include<cstdlib> 
#include<time.h> 
#include<ctime> 
#include<iomanip> 
using namespace std; 

const int End=70; //constant fixed integer for the entire game. 

void MoveTurtoise (int *); 
void MoveHare (int *); 
void PrintPosition (int *, int*); 



int main() 
{ 
int Tortoise = 1; 
int Hare = 1; 
int Time = 0; 

srand(time(0)); 

cout<<"BANG!!!!!\n" 
    <<"AND THEY'RE OFF !!!!!\n"; 

while(Tortoise != End && Hare != End) 
{ 
    srand(time(0)); 
    MoveTurtoise (&Tortoise); 
    MoveHare (&Hare); 
    PrintPosition (&Tortoise,&Hare); 
    Time++; 

} 

if (Tortoise==Hare) 
     cout<<"It's a tie."<<endl; 
    else if (Tortoise>Hare) 
     cout<<"Tortoise wins."<<endl; 
    else if (Hare>Tortoise) 
     cout<<"Hare wins."<<endl; 

system("PAUSE"); 
return 0; 
} 

void MoveTurtoise (int *Tortoise) 
{ 
srand(time(0)); 
int p = 1+ rand()%10; // 1 <= i <= 10 

if (1<=p && p<=5) //Fast plod 
    Tortoise+=3; //3 squares right 
else if (p>=6 && p<=7) //Slip 
    Tortoise-=6;//6 squares left 
else //Slow plod 
    ++Tortoise; //1 square right 

if (*Tortoise<1) 
    *Tortoise=1; 



} 

void MoveHare (int *Hare) 
{ 
srand(time(0)); 
int p = 1+ rand()%10; // 1 <= p <= 10 

if (1<= p && p<=2); //Sleep 
        //No move 
else if (p>=3 && p<=4) //Big hop 
    Hare+=9;//9 squares right 
else if (p==5) //Big Slip 
    Hare-=12;// 12 squares left 
else if (p>=6 && p<=8) // Small hop 
    ++Hare;// 1 square right 
else if (p>=9 && p<=10)// Small Slip 
    Hare-=2; // 2 squares left 

if (*Hare<1) 
    *Hare=1; 


} 

void PrintPosition (int *Tortoise, int *Hare) 
{ 
if (Tortoise==Hare) 
    cout<<"OUCH!!!"<<endl; 
else if (Tortoise<Hare) 
    { 
    cout<<setw(*Tortoise)<<"T"<<endl; 
    cout<<setw(Hare-Tortoise)<<"H"<<endl; 
    } 
else if (Hare<Tortoise) 
{ 
    cout<<setw(Tortoise-Hare)<<"T"<<endl; 
    cout<<setw(*Hare)<<"H"<<endl; 

} 




} 

Hello all. Я просто сделал код для игры Tortoise и Hare в C++. У меня возникла проблема с поиском того, что приводит к тому, что моя программа «не завершается». Это продолжается и продолжается с таким же результатом. Я предполагаю, что существует ошибка цикла и неправильное использование srand() .. но я до сих пор не знаю ...Окончательный выпуск модели черепах и зайцев

+0

Вы пробовали отладить его? Увеличиваются ли «Черепаха» и «Заяц»? Достигают ли они 70? Более 70? –

+0

Я отлаживал, и все, что я вижу, было T и H, повторяющееся с тем же результатом. – user3543568

+1

Я не думаю, что вам нужно использовать 'srand' в каждой функции. Просто используйте его один раз в 'main' и удалите' srand' в цикле, так как у вас уже есть его. –

ответ

1

В функциях MoveTurtoise и MoveHare вы увеличиваете указатели, а не их значения.

void MoveTurtoise (int *Tortoise) 
{ 
    srand(time(0)); 
    int p = 1+ rand()%10; // 1 <= i <= 10 

    if (1<=p && p<=5) //Fast plod 
     Tortoise+=3; //3 squares right 
     // This makes Tortoise point to a different location. 
     // It does not change the value of what Tortoise points to. 
     // Similarly for the next two clauses. 

    else if (p>=6 && p<=7) //Slip 
     Tortoise-=6;//6 squares left 
    else //Slow plod 
     ++Tortoise; //1 square right 

    if (*Tortoise<1) 
     *Tortoise=1; 
} 

Что вам нужно:

void MoveTurtoise (int *Tortoise) 
{ 
    srand(time(0)); 
    int p = 1+ rand()%10; // 1 <= i <= 10 

    if (1<=p && p<=5) //Fast plod 
     (*Tortoise) += 3; //3 squares right 
    else if (p>=6 && p<=7) //Slip 
     (*Tortoise) -= 6;//6 squares left 
    else //Slow plod 
     ++(*Tortoise); //1 square right 

    if (*Tortoise<1) 
     *Tortoise=1; 
} 

MoveHare должен быть закреплен таким же образом.

Вот лучшее решение. Измените тип аргумента на int&, а затем код будет больше похож на то, что у вас есть.

void MoveTurtoise (int& Tortoise) 
{ 
    srand(time(0)); 
    int p = 1+ rand()%10; // 1 <= i <= 10 

    if (1<=p && p<=5) //Fast plod 
     Tortoise+=3; //3 squares right 
    else if (p>=6 && p<=7) //Slip 
     Tortoise-=6;//6 squares left 
    else //Slow plod 
     ++Tortoise; //1 square right 

    if (Tortoise<1) 
     Tortoise=1; 
} 

Кроме того, ваша реализация PrintPosition как если бы аргументы были:

void PrintPosition (int Tortoise, int Hare); 

, который лучше, чем то, что у вас есть. Изменение

void PrintPosition (int *Tortoise, int *Hare); 

в

void PrintPosition (int Tortoise, int Hare); 
0

да, user3543568198 вы забыли добавить библиотеку заголовка с использованием зОго :: setw; и вы добавили else, если (Hare < = Черепаха) в вашем заявлении на печать, противоречащем if, если иначе, если ... else сделать то же самое, но ваши коды проходят по ссылке, все хорошо, за исключением того, что функция Tortoise отсутствует в raceEnd = .. .. как в функциях волос, так и в Черепахе .... просто заменяя функции ваших программ функциями ниже, они фактически переместят устройства по экрану ... oh обязательно добавьте const int RACE_END = 70; в заголовке

void MoveTurtoise (int *Tortoise) 
{ 
int x = 1 + rand() % 10; 
// determine which move to make 
if (x >= 1 && x <= 5)  // fast plod 
    *Tortoise += 5; 

else if (x == 9) // slip 
    *Tortoise -= 12; 

else       // slow plod 
    ++(*Tortoise); 
if (*Tortoise < 1) 
    *Tortoise = 1; 

else if (*Tortoise > RACE_END) 
    *Tortoise = RACE_END; 

} 



void MoveHare(int *Hare) 
{ 
int y = 1 + rand() % 10; 
/* Write statements that move hare */ 
// determine which move to make 
if (y >= 1 && y <= 5)  // fast plod 
    *Hare += 3; 

else if (y == 6 || y == 7) // slip 
    *Hare -= 6; 
else       // slow plod 
    ++(*Hare); 

/* Write statements that test if hare is before 
the starting point or has finished the race */ 
if (*Hare < 1) 
    *Hare = 1; 

else if (*Hare > RACE_END) 
    *Hare = RACE_END; 
} 
Смежные вопросы