Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- bool EnsureValid(char v){
- switch (v){
- case 'r':
- case 'p':
- case 's':
- return true;
- default:
- return false;
- }
- }
- string FriendlyName(char v){
- switch (v){
- case 'r':
- return "Rock";
- case 'p':
- return "Paper";
- case 's':
- return "Scissors";
- }
- return "Invalid";
- }
- bool Is1Win(char a, char b) {
- return a=='r'&&b=='s'||a=='p'&&b=='r'||a=='s'&&b=='p';
- }
- char Lowercase(char v){
- return v|0x20;
- }
- char silentGetChar();
- char TakeInput(int player) {
- for (;;) {
- cout << "Player " << player << ": [R/P/S]" << endl;
- char v=silentGetChar();
- v=Lowercase(v);
- if(EnsureValid(v)){
- return v;
- }
- cout << "Player " << player << ": That is not Rock, Paper or Scissors!"<< endl;
- }
- }
- int main(int, char*[])
- {
- char user[2] = {0,0};
- for (;;) {
- // Read inputs
- user[0]=TakeInput(1);
- user[1]=TakeInput(2);
- if(user[0]==user[1]) {// Tie check
- cout << "Both players chose " << FriendlyName(user[0]) << "!" << endl;
- }else if (Is1Win(user[0],user[1])){
- cout << "Player 1 wins with " << FriendlyName(user[0]) << "!" << endl;
- }else{// We have already checked the tie and p1 win, only other state is p2 win.
- cout << "Player 2 wins with " << FriendlyName(user[1]) << "!" << endl;
- }
- cout << "Play again [Y/N]" << endl;
- char v=silentGetChar();
- v=Lowercase(v);
- if(v!='y'){
- break;
- }
- }
- return 0;
- }
- #ifdef __unix__
- #include "termios.h"
- char silentGetChar() {
- struct termios current, ours;
- tcgetattr(0,¤t);
- ours=current;
- ours.c_lflag&= ~ICANON & ~ECHO;
- tcsetattr(0,TCSANOW,&ours);
- char v;
- cin.get(v);
- tcsetattr(0,TCSANOW,¤t);
- return v;
- }
- #elif WIN32
- #include "conio.h"
- char silentGetChar(){
- char v = _getch();
- if(v==3){//CTRL-C;
- exit(0);
- }
- return v;
- }
- #else
- char silentGetChar(){
- char v;
- cin.get(v);
- return v;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement