Advertisement
Guest User

you wanted portability?

a guest
Nov 16th, 2016
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. bool EnsureValid(char v){
  7.     switch (v){
  8.         case 'r':
  9.         case 'p':
  10.         case 's':
  11.             return true;
  12.         default:
  13.             return false;
  14.     }
  15. }
  16.  
  17. string FriendlyName(char v){
  18.     switch (v){
  19.         case 'r':
  20.             return "Rock";
  21.         case 'p':
  22.             return "Paper";
  23.         case 's':
  24.             return "Scissors";
  25.     }
  26.     return "Invalid";
  27. }
  28.  
  29. bool Is1Win(char a, char b) {
  30.         return a=='r'&&b=='s'||a=='p'&&b=='r'||a=='s'&&b=='p';
  31. }
  32.  
  33. char Lowercase(char v){
  34.     return v|0x20;
  35. }
  36.  
  37. char silentGetChar();
  38.  
  39. char TakeInput(int player) {
  40.     for (;;) {
  41.         cout << "Player " << player << ": [R/P/S]" << endl;
  42.         char v=silentGetChar();
  43.         v=Lowercase(v);
  44.         if(EnsureValid(v)){
  45.             return v;
  46.         }
  47.         cout << "Player " << player << ": That is not Rock, Paper or Scissors!"<< endl;
  48.     }
  49. }
  50.  
  51. int main(int, char*[])
  52. {
  53.     char user[2] = {0,0};
  54.  
  55.     for (;;) {
  56.         // Read inputs
  57.         user[0]=TakeInput(1);
  58.         user[1]=TakeInput(2);
  59.         if(user[0]==user[1]) {// Tie check
  60.                 cout << "Both players chose " << FriendlyName(user[0]) << "!" << endl;
  61.         }else if (Is1Win(user[0],user[1])){
  62.                 cout << "Player 1 wins with " << FriendlyName(user[0]) << "!" << endl;
  63.         }else{// We have already checked the tie and p1 win, only other state is p2 win.
  64.                 cout << "Player 2 wins with " << FriendlyName(user[1]) << "!" << endl;
  65.         }
  66.  
  67.         cout << "Play again [Y/N]" << endl;
  68.         char v=silentGetChar();
  69.         v=Lowercase(v);
  70.         if(v!='y'){
  71.                 break;
  72.         }
  73.     }
  74.     return 0;
  75. }
  76.  
  77. #ifdef __unix__
  78.     #include "termios.h"
  79.     char silentGetChar() {
  80.         struct termios current, ours;
  81.         tcgetattr(0,&current);
  82.         ours=current;
  83.         ours.c_lflag&= ~ICANON & ~ECHO;
  84.         tcsetattr(0,TCSANOW,&ours);
  85.         char v;
  86.         cin.get(v);
  87.         tcsetattr(0,TCSANOW,&current);
  88.         return v;
  89.     }
  90. #elif WIN32
  91.     #include "conio.h"
  92.     char silentGetChar(){
  93.         char v =  _getch();
  94.         if(v==3){//CTRL-C;
  95.                 exit(0);
  96.         }
  97.         return v;
  98.     }
  99. #else
  100.     char silentGetChar(){
  101.         char v;
  102.         cin.get(v);
  103.         return v;
  104.     }
  105. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement