Connecting Tech Pros Worldwide Forums | Help | Site Map

rock, paper, scissor help C programming

Newbie
 
Join Date: Aug 2008
Posts: 19
#1: Sep 2 '08
Hi here is my problem I want to have the outcome of my rock paper scissors game to print outcomes like: You chose paper and I chose rock. You win. The value for player_choice and machine_choice is declared in select.cpp (listed below).

My question is how would I go about telling, the report.cpp code below to check the select.cpp code for the variable to print?

#include "p_r_s.h"

void report(outcome result, int *win_cnt_ptr,
int *lose_cnt_ptr, int *tie_cnt_ptr)

{

switch(result) {
case win:
++*win_cnt_ptr;
printf("%27s I chose");
printf("%c", player_choice);
printf("%27s you chose");
printf("%c", machine_choice);
printf("%27s You win.\n", "\"");
break;
case lose:
++*lose_cnt_ptr;
printf("%27s i chose");
printf("%c", player_choice);
printf("%27s you chose");
printf("%c", machine_choice);
printf("%27s You lose.\n", "");
break;
case tie:
++*tie_cnt_ptr;
printf("%27s A tie.\n", "");
break;
default:
printf("PROGRAMMER ERROR: Unexpected result!\n\n");
exit(1);
}
}

#include "p_r_s.h"

p_r_s selection_by_machine(void)
{
return ((p_r_s) (rand() % 3));
}
p_r_s selection_by_player(char x)
{
char c;

p_r_s player_choice;

printf("Input p, r, or s: ");
scanf("%c", &c);
switch (c) {
case 'p':
player_choice = paper;
break;
case 'r':
player_choice = rock;
break;
case 's':
player_choice = scissors;
break;
case 'g':
player_choice = game;
break;
case 'i':
player_choice = instructions;
break;
case 'q':
player_choice = quit;
break;
default:
player_choice = help;
break;
}
return player_choice;
}

gpraghuram's Avatar
Expert
 
Join Date: Mar 2007
Location: Chennai
Posts: 1,258
#2: Sep 2 '08

re: rock, paper, scissor help C programming


R u saking how should you call the corresponding function in select.cpp or something else..?
can you explain it further as ia m not able to understand ...

Raghu
Newbie
 
Join Date: Aug 2008
Posts: 19
#3: Sep 2 '08

re: rock, paper, scissor help C programming


yeah thats basically it. In select.cpp the player and the machine makes a choice of rock paper or scissor. In report.cpp I want to call the selection that the player and the machine made in select.cpp to report.cpp and print that selection.
gpraghuram's Avatar
Expert
 
Join Date: Mar 2007
Location: Chennai
Posts: 1,258
#4: Sep 2 '08

re: rock, paper, scissor help C programming


Quote:

Originally Posted by jmf777

yeah thats basically it. In select.cpp the player and the machine makes a choice of rock paper or scissor. In report.cpp I want to call the selection that the player and the machine made in select.cpp to report.cpp and print that selection.


I think you have to call the report() function in a loop and from the report function you have to call the function in select().


NOTE:Please use code tags while posting the code.


Raghu
JosAH's Avatar
Expert
 
Join Date: Mar 2007
Posts: 10,611
#5: Sep 2 '08

re: rock, paper, scissor help C programming


Quote:

Originally Posted by jmf777

Expand|Select|Wrap|Line Numbers
  1.     printf("%27s I chose");

You do that all over the place; check your manuals because it is not correct.

kind regards,

Jos
Moderator
 
Join Date: Mar 2007
Location: North Bend Washington USA
Posts: 5,369
#6: Sep 2 '08

re: rock, paper, scissor help C programming


You use a storage class specifier to tell the compiler the variable exists but it's not in this file:

Expand|Select|Wrap|Line Numbers
  1. /*report.cpp*/
  2. extern p_r_s player_choice;
  3. extern p_r_s machine_choice;
  4.  
Then just define the variables in another file:
Expand|Select|Wrap|Line Numbers
  1. /*select.cpp*/
  2. p_r_s player_choice;
  3. p_r_s machine_choice;
  4.  
The linker will hook the variable in one file to the code in the other file.
Newbie
 
Join Date: Aug 2008
Posts: 19
#7: Sep 4 '08

re: rock, paper, scissor help C programming


I've got the program to at least build and executed it by adding the underlined code.

Expand|Select|Wrap|Line Numbers
  1. void report(outcome result, int *win_cnt_ptr,
  2.             int *lose_cnt_ptr, int *tie_cnt_ptr, p_r_s player_choice, p_r_s machine_choice)
to my header and my report function but now when I win. It prints funny characters like an up and down character before "you chose" and a smiley face box after "you chose." I'm now lost can someone please point me in the right direction. I'm assuming its because my outcome function is only returning a win or lose to main.

Expand|Select|Wrap|Line Numbers
  1. #include "p_r_s.h"
  2.  
  3. outcome compare(p_r_s player_choice, p_r_s machine_choice)
  4. {
  5.     outcome result;
  6.  
  7.     if (player_choice == machine_choice)
  8.         return tie;
  9.     switch (player_choice) {
  10. case paper:
  11.     result = (machine_choice == rock) ? win : lose;
  12.     break;
  13. case rock:
  14.     result = (machine_choice == scissors) ? win : lose;
  15.     break;
  16. case scissors:
  17.     result = (machine_choice == paper) ? win : lose;
  18.     break;
  19. default:
  20.     printf("PROGRAMMER ERROR: Unexpected choice!\n\n");
  21.     exit(1);
  22.     }
  23.     return result;
  24. }
  25.  
Newbie
 
Join Date: Aug 2008
Posts: 19
#8: Sep 4 '08

re: rock, paper, scissor help C programming


Whoops I just figured it out but thanks to everyone that responded and tried to help
Moderator
 
Join Date: Mar 2007
Location: North Bend Washington USA
Posts: 5,369
#9: Sep 4 '08

re: rock, paper, scissor help C programming


Quote:

Originally Posted by jmf777

Whoops I just figured it out

That's what we like to see.
Reply