program for a game similar to rock-paper-scissors


by sandy.bridge
Tags: game, program, rockpaperscissors, similar
sandy.bridge
sandy.bridge is offline
#1
Jan31-13, 01:36 PM
P: 767
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 Code:
    char user1user2;
    
bool ABCDEF;
    
cout << "Player 1, please enter your move: ";
        
cin >> user1;
        
cout << "Player 2, please enter your move: ";
        
cin >> user2;

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

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

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

    if (
user1 'N')
    {
        
true;
    }
    else
    {
        
false;
    }
    if (
user1 'E')
    {
        
true;
    }
    else
    {
        
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!
Phys.Org News Partner Science news on Phys.org
Review: With Galaxy S5, Samsung proves less can be more
Making graphene in your kitchen
Study casts doubt on climate benefit of biofuels from corn residue
CompuChip
CompuChip is offline
#2
Jan31-13, 01:57 PM
Sci Advisor
HW Helper
P: 4,301
You could start by replacing all = with == and see what happens?
sandy.bridge
sandy.bridge is offline
#3
Jan31-13, 02:13 PM
P: 767
That didn't work.

sandy.bridge
sandy.bridge is offline
#4
Jan31-13, 02:14 PM
P: 767

program for a game similar to rock-paper-scissors


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

int main() {
    
char user1user2;
            
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.
CompuChip
CompuChip is offline
#5
Jan31-13, 02:24 PM
Sci Advisor
HW Helper
P: 4,301
Can you post the changed code that you tried but didn't work?
sandy.bridge
sandy.bridge is offline
#6
Jan31-13, 02:44 PM
P: 767
PHP Code:
    char user1user2;
    
bool ABCDEF;
    
cout << "Player 1, please enter your move: ";
        
cin >> user1;
        
cout << "Player 2, please enter your move: ";
        
cin >> user2;

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

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

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

    if (
user1 == 'N')
    {
        
== true;
    }
    else
    {
        
== false;
    }
    if (
user1 == 'E')
    {
        
== true;
    }
    else
    {
        
== 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 Code:
#include <iostream>
using namespace std;

int main() {
    
char user1user2;
            
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 ^^^
SteamKing
SteamKing is offline
#7
Jan31-13, 03:05 PM
HW Helper
Thanks
P: 5,554
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';

}
sandy.bridge
sandy.bridge is offline
#8
Jan31-13, 03:16 PM
P: 767
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.
Mark44
Mark44 is offline
#9
Jan31-13, 03:19 PM
Mentor
P: 21,032
Quote Quote by sandy.bridge View Post
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:
1. P1P + P2P = P2 wins
2. P1P + P2N = P1 wins
3. P1P + P2E = P1 wins
4. P1N + P2P = P2 wins
5. P1N + P2N = P1 wins << P2 should be the winner here
6. P1N + P2E = P2 wins
7. P1E + P2P = P1 wins
8. P1E + P2N = P2 wins
9. P1E + P2E = P2 wins
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.
sandy.bridge
sandy.bridge is offline
#10
Jan31-13, 03:22 PM
P: 767
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 Code:
             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 
Mark44
Mark44 is offline
#11
Jan31-13, 03:24 PM
Mentor
P: 21,032
I redid the indentation in your code so that the lines didn't scroll so far to the right.
Quote Quote by sandy.bridge View Post

#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 ^^^
Mark44
Mark44 is offline
#12
Jan31-13, 03:30 PM
Mentor
P: 21,032
Quote Quote by sandy.bridge View Post
Yeah, I noticed that as well.
Then you have an error in post 1. According to the table below, if both players play a neutron, P2 wins.

Quote Quote by sandy.bridge View Post

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 Code:
             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 
sandy.bridge
sandy.bridge is offline
#13
Jan31-13, 03:35 PM
P: 767
Oops! I just edited that thanks.
Mark44
Mark44 is offline
#14
Jan31-13, 04:17 PM
Mentor
P: 21,032
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.

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'
}


Register to reply

Related Discussions
FTL via entanglement- paper discussing similar Quantum Physics 4
log - rock - scissors Earth 26
Rock Paper Scissors in Court! General Discussion 3
rock, paper, scissors revisited General Discussion 645
Rock, Paper, Scissors General Discussion 28