1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Program for a game similar to rock-paper-scissors

  1. Jan 31, 2013 #1
    1. The problem statement, all variables and given/known data
    I'm writing a program for a game similar to rock-paper-scissors. It is called proton-neutron-electron (P, N, E). There are two players. In the event of a tie, player 2 wins
    P1 denotes player 1, P2 denotes player 2, P = proton, N = neutron, E = electron. P1P means player 1 picks proton.
    There are 9 possibilities. Here they are:
    P1P + P2P = P2 wins
    P1P + P2N = P1 wins
    P1P + P2E = P1 wins
    P1N + P2P = P2 wins
    P1N + P2N = P2 wins
    P1N + P2E = P2 wins
    P1E + P2P = P1 wins
    P1E + P2N = P2 wins
    P1E + P2E = P2 wins

    3. The attempt at a solution
    Here is what I have written in the compiler; it does not work. I am not looking for another solution, I would just like to know where I went wrong in my syntax.
    PHP:
        char user1, user2;
        bool A, B, C, D, E, F;
        cout << "Player 1, please enter your move: ";
            cin >> user1;
            cout << "Player 2, please enter your move: ";
            cin >> user2;

        if (user2 = 'P')
        {
            A = true;
        }
        else
        {
            A = false;
        }

        if (user2 = 'N')
        {
            B = true;
        }
        else
        {
            B = false;
        }
        if (user2 = 'E')
        {
            C = true;
        }
        else
        {
            C = false;
        }

        if (user1 = 'P')
        {
            D = true;
            }
        else
        {
            D = false;
        }

        if (user1 = 'N')
        {
            E = true;
        }
        else
        {
            E = false;
        }
        if (user1 = 'E')
        {
            F = true;
        }
        else
        {
            F = false;
        }


        if ((B&&D)||(C&&D)||(A&&E)||(B&&F))
            {
                cout << "The winner is player 1!";
            }
        else
            {
                cout << "The winner is player 2!";
            }

        return 0;
    The way that it is set up now always results in P1 winning and I can't see why. Thanks in advance!
     
    Last edited: Jan 31, 2013
  2. jcsd
  3. Jan 31, 2013 #2

    CompuChip

    User Avatar
    Science Advisor
    Homework Helper

    Re: program help

    You could start by replacing all = with == and see what happens?
     
  4. Jan 31, 2013 #3
    Re: program help

    That didn't work.
     
  5. Jan 31, 2013 #4
    Re: program help

    I managed to just do as such:
    PHP:
    #include <iostream>
    using namespace std;

    int main() {
        char user1, user2;
                cout << "What move P1? ";
                cin >> user1;
                cout << "What move P2? ";
                cin >> user2;

                if (((user1 == 'P')&&(user2 == 'N'))||((user1 == 'P')&&(user2 == 'E'))||((user1 == 'N')&&(user2 == 'P'))||((user1 == 'E')&&(user2 == 'N')))
                    {
                        cout << "Player 1 is the winner!";
                    }
                else
                    {
                        cout << "Player 2 is the winner!";
                    }


                return 0;
    }
    I'd still like to know what I was doing wrong for the first part.
     
  6. Jan 31, 2013 #5

    CompuChip

    User Avatar
    Science Advisor
    Homework Helper

    Re: program help

    Can you post the changed code that you tried but didn't work?
     
  7. Jan 31, 2013 #6
    Re: program help

    PHP:
        char user1, user2;
        bool A, B, C, D, E, F;
        cout << "Player 1, please enter your move: ";
            cin >> user1;
            cout << "Player 2, please enter your move: ";
            cin >> user2;

        if (user2 == 'P')
        {
            A == true;
        }
        else
        {
            A == false;
        }

        if (user2 == 'N')
        {
            B == true;
        }
        else
        {
            B == false;
        }
        if (user2 == 'E')
        {
            C == true;
        }
        else
        {
            C == false;
        }

        if (user1 == 'P')
        {
            D == true;
            }
        else
        {
            D == false;
        }

        if (user1 == 'N')
        {
            E == true;
        }
        else
        {
            E == false;
        }
        if (user1 == 'E')
        {
            F == true;
        }
        else
        {
            F == false;
        }


        if ((B&&D)||(C&&D)||(A&&E)||(B&&F))
            {
                cout << "The winner is player 1!";
            }
        else
            {
                cout << "The winner is player 2!";
            }

        return 0;  
    This didn't work ^^^^


    PHP:
    #include <iostream>
    using namespace std;

    int main() {
        char user1, user2;
                cout << "What move P1? ";
                cin >> user1;
                cout << "What move P2? ";
                cin >> user2;

                if (((user1 == 'P')&&(user2 == 'N'))||((user1 == 'P')&&(user2 == 'E'))||((user1 == 'N')&&(user2 == 'P'))||((user1 == 'E')&&(user2 == 'N')))
                    {
                        cout << "Player 1 is the winner!";
                    }
                else
                    {
                        cout << "Player 2 is the winner!";
                    }


                return 0;
    }
    This did work ^^^
     
  8. Jan 31, 2013 #7

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    Re: program help

    Note: '==' is a logical operator which you use, for example, in an 'if' statement to test if a certain condition is true:

    if (user1 == 'P') {'some calculations'}

    If you wish to assign a certain value to a variable, then the following statement is used:

    {
    user1 = 'P';

    }
     
  9. Jan 31, 2013 #8
    Ah yes, that was where my issue was. Works now! Thanks! I will obviously just use the other one though because it is much shorter.
     
  10. Jan 31, 2013 #9

    Mark44

    Staff: Mentor

    I added numbers to the rules for easier identification.

    Your rule 5 violates what you said earlier about ties going to player 2.
    Can you summarize the rules any better than in the table?

    It looks like proton beats neutron (rules 2, 4) and electron beats neutron (rule 6) sometimes, but neutron beats electron sometimes (rule 8). Is that also a mistake?

    In rock paper scissors, there is a simple set of rules: rock covers (beats) paper, scissors cut (beat) paper, and paper covers (beats) rock. Is there a similar, simple rule here that you didn't mention? If so, it would make your logic much simpler.
     
  11. Jan 31, 2013 #10
    Yeah, I noticed that as well. There doesn't seem to be any logicality with it, but that is how the table was given in the assignment. At that point I just made sure the algorithm obeyed the table.

    PHP:
                 P1 plays P     P1 plays N           P1 plays E
    P2 plays P       P2              P1               P2
    P2 plays N       P1              P2               P1
    P2 plays E       P1              P2               P2
     
  12. Jan 31, 2013 #11

    Mark44

    Staff: Mentor

    Re: program help

    I redid the indentation in your code so that the lines didn't scroll so far to the right.
     
  13. Jan 31, 2013 #12

    Mark44

    Staff: Mentor

    Then you have an error in post 1. According to the table below, if both players play a neutron, P2 wins.

     
  14. Jan 31, 2013 #13
    Oops! I just edited that thanks.
     
  15. Jan 31, 2013 #14

    Mark44

    Staff: Mentor

    Instead of one if block with a large condition, I would write three if blocks in which I check what player 1 has. I have implemented the first of these if blocks, and have added comments to suggest what the logic is.

    Code (Text):

    if (user1 == 'P')
    {
      if (user2 == 'P')
      {
        cout << "Player 2 is the winner!";
      }
      else
      {
        cout << "Player 1 is the winner!";
      }
    }
    else if (user1 == 'N')
    {
      // Player 2 wins only if player 1 has 'P'
    }
    else // user1 == 'E'
    {
      // Player 1 wins only if player 2 has 'N'
    }
     
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Program for a game similar to rock-paper-scissors
  1. Scissor Lift (Replies: 9)

Loading...