-2

I am making a Chutes & Ladders game and I cannot seem to get my void RollDiceAndMove() function to make a new position for my players. It's supposed to make a new position using rand(time) and then send that new position back to the while loop I have in int main().

Any help would be greatly appreciated! I am new to C++.

#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cctype>

using namespace std;

void RollDiceAndMove(); //game rolls dice, and moves the player
void CheckChutes(); // game checks to see if player landed on chutes
void CheckLadders(); // game checks to see if player landed on ladders
void whoWon(); // game checks to see if anyone has won yet
void welcomeMessage(); // shows display message, and asks if they want to play
void goodbyeMessage(); // tells user goodbye after game

int RollDie;
int NewPos;
int NewPos1;




int main()
{
    bool player1Turn = 0; //switches between player1 and player2's turns
    string player1Name, player2Name; // gets names from both players
    int choice = 'y'; // answer when asked if players want to play
    int Player1Loc = 0, Player2Loc = 0; // location of the players
    int Playerpos;



welcomeMessage();

        cout << endl << endl;
        cout << "Enter your names: " << endl << endl;
        cout << "Player1: ";
        cin >> player1Name;
        cout << endl << endl;
        cout << "Player2: ";
        cin >> player2Name;



while(choice == 'y'){
        while(Player1Loc != 100 && Player2Loc != 100){
                if(player1Turn){
                    cout << endl << endl;
                    cout << player1Name << ": Its your turn." << endl << endl;
                    cout << "Press Enter to Start Turn: ";
                    cin.get();
                    cout << endl << endl;
                    RollDiceAndMove();
                    cout << "New Position Amount: " << NewPos1 << endl;
                    /* CheckChutes();
                    CheckLadders() */;
                    player1Turn = false;
                }
                else{
                    cout << endl << endl;
                    cout << player2Name << ": Its your turn." << endl << endl;
                    cout << "Press Enter to Start Turn: ";
                    cin.get();
                    cout << endl;
                    RollDiceAndMove();
                    cout << "New Position Amount: " << NewPos << endl;
                    // CheckChutes();
                    // CheckLadders();
                    player1Turn = true;
                }
            }
        while (NewPos == 100) {
            whoWon();
        }
}


    return 0;
}

void welcomeMessage()
{
    int choice;
    // shows welcome message, and asks if they want to play
    // IN: choice
    cout << "Welcome to the chutes and ladders game. Both " << endl;
    cout << "players start at 0, and the first one to 100 " << endl;
    cout << "wins the game. However, if you land on a chute," << endl;
    cout << "your player will move down, but a ladder " << endl;
    cout << "will move you up." << endl;

}

void goodbyeMessage()
{
    // shows the goodbye message
    cout << "Thanks for playing!" << endl;
}

void RollDiceAndMove ()
{
    // rolls dice, and moves the player
    switch(NewPos = 100)
    {
        for (int Player1pos = 0; Player1pos < 100; Player1pos++)
        {
            RollDie = rand() % 6 + 1; 
            Player1pos = 1;
            NewPos1 = Player1pos + RollDie;
            CheckChutes();
            CheckLadders();
            cout << "Your new location is: " << NewPos << endl;
            break;
        }
        for (int Player2pos = 0; Player2pos < 100; Player2pos++)
        {
            RollDie = rand() % 6 + 1;
            Player2pos = 1;
            NewPos = Player2pos + RollDie;
            CheckChutes();
            CheckLadders();
            cout << "Your new location is: " << NewPos << endl;
            break;
        }
    }
}
void whoWon()
{
    int NewPos;
    // determines if user has won, when their location is at 100
    RollDiceAndMove();
    if (NewPos == 100){
        cout << "You won!" << endl;
    }
}
void CheckChutes ()
{

    int NewPos;
    //checks if chutes, if yes, then moves player backwards
    if (NewPos == 98)
        NewPos = 78;
    else if (NewPos == 95)
        NewPos = 75;
    else if (NewPos == 93)
        NewPos = 70;
    else if (NewPos == 87)
        NewPos = 24;
    else if (NewPos == 64)
        NewPos = 60;
    else if (NewPos == 62)
        NewPos = 19;
    else if (NewPos == 56)
        NewPos = 53;
    else if (NewPos == 49)
        NewPos = 11;
    else if (NewPos == 48)
        NewPos = 26;
    else if (NewPos == 16)
        NewPos = 6;
    else
        NewPos = NewPos;
    cout << "You landed on chutes, and have to move down" << endl;
}

void CheckLadders ()
{
    int NewPos;
    // checks if ladders. if yes, moves player forwards
    if (NewPos == 1)
        NewPos = 38;
    else if (NewPos == 4)
        NewPos = 14;
    else if (NewPos == 9)
        NewPos = 21;
    else if (NewPos == 23)
        NewPos = 44;
    else if (NewPos == 28)
        NewPos = 84;
    else if (NewPos == 36)
        NewPos = 44;
    else if (NewPos == 51)
        NewPos = 66;
    else if (NewPos == 71)
        NewPos = 90;
    else if (NewPos == 80)
        NewPos = 100;
    else
        NewPos = NewPos;
    cout << "You landed on ladders, and get to move up the board!" << endl;
}
Chris
  • 1
  • 2

2 Answers2

1

The switch statement syntax in RollDiceAndMove() is incorrect, so the code is just skipping the entire function every time. Below is a simple tutorial.

http://www.tutorialspoint.com/cplusplus/cpp_switch_statement.htm

Also, there are various other 'issues' with the code. You are creating local NewPos variables in your functions, which results in a uninitialized (has a random value) variables inside the functions, as opposed to the global variable you are expecting. Inside the function, NewPos refers to a local variable created when the function is called, and destroyed when it returns; ::NewPos refers to your global variable. cin>>player2Name; leaves a new line character in the std::cin stream which is taken by subsequent cin.get();, so it won't behave as you expect it. The use of while statements is odd. Your code is composed almost exclusively of global variables, and global void functions; both of these are to be avoided whenever possible.

If you want to learn C++ I suggest you pick up a good book and study the language well. The first one on the link below is a personal favorite.

The Definitive C++ Book Guide and List

Community
  • 1
  • 1
Ramon
  • 1,169
  • 11
  • 25
0

Sorry if this is suppose to be a comment, but I can't comment due to too low of reputation.

In the RollDiceAndMove function the syntax for your switch statement is wrong. Check cplusus.com for full details but basics are:

switch (var)
{
     case val:
         //code
         break; //optional
     case val2:
         //code
         break; //optional
      ....and so on 
 }

where var is a object that has a integer value associated such as an int or enumerator object and the int val(s) in the case parameter are values the switch var object can have.

Make sure to use break keyword at the end of the case statement as to not "fall" through the following case statement(s) the code should execute.

Cplusplus link: [http://www.cplusplus.com/doc/tutorial/control/]

Travis Cook
  • 161
  • 9