Guest User

Untitled

a guest
Jan 22nd, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <algorithm>
  4. #include <string>
  5. #include <ctime>
  6. using namespace std;
  7.  
  8. //function prototypes
  9. void writeString(string, int, int);
  10. void writeChar(char, int, int);
  11. void drawScaffold();
  12. void playGame(string);
  13.  
  14. int main() {
  15. string setWord = "";
  16. char answer = ' ';
  17. const int whiteText = 7;
  18.  
  19. string wordBankArray[17] = { "structure", "function", "assign", "compare",
  20. "void", "int", "double", "char", "string",
  21. "datatype", "pointer", "find", "length",
  22. "replace", "substr", "classes", "insert"};
  23.  
  24. srand(static_cast<int>(time(0)));
  25.  
  26.  
  27. do {
  28. setWord = wordBankArray[rand() % (16 + 1)];
  29. playGame(setWord);
  30.  
  31. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), whiteText);
  32. writeString("Would you like to play again? <y/n> ", 30, 18);
  33. cin >> answer;
  34.  
  35. if(answer == 'n' || answer == 'N')
  36. writeString("", 30, 19);
  37.  
  38. }while(answer == 'y' || answer == 'Y');
  39. return 0;
  40. }//end function
  41.  
  42. void writeString(string str, int x, int y) {
  43. COORD pos = {x, y};
  44. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  45. cout << str;
  46. }//end function
  47.  
  48. void writeChar(char c, int x, int y) {
  49. COORD pos = {x, y};
  50. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  51. cout << c;
  52. }//end function
  53.  
  54. void drawScaffold() {
  55. COORD pos = {0, 0};
  56. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  57.  
  58. system("cls");
  59. writeString("Used Letters", 32, 0);
  60.  
  61. writeChar(char(169), 10, 24);
  62. cout << "---------";
  63. cout << char(170);
  64.  
  65.  
  66. pos.X = 15; pos.Y = 16;
  67. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  68. for(int x = 0; x < 7; x++) {
  69. pos.Y++;
  70. SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), pos);
  71. cout << char(179);
  72. }//end for
  73.  
  74. writeChar(char(169), 15, 16);
  75. cout << "-----";
  76. cout << char(170);
  77. }//end function
  78.  
  79. void playGame(string setWord) {
  80. //declare booleans
  81. bool gameOver = false;
  82. bool dashReplace = false;
  83.  
  84. //declare variables
  85. const string alphabet = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z";
  86. string usedLetters = "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _";
  87. string letter = "";
  88. string guessWord = "";
  89.  
  90. unsigned int numChars = static_cast<int>(setWord.length());
  91. unsigned int numIncorrect = 0;
  92.  
  93. transform(setWord.begin(), setWord.end(), setWord.begin(), toupper);
  94. guessWord.assign(numChars, '_'); //assigns a dash to however many characters in setWord
  95. for(unsigned int i = 1; i < (numChars * 2); i += 2)
  96. guessWord.insert(i, " "); //inserts a blank space between each dash in guessWord
  97.  
  98. drawScaffold();
  99. writeString("Guess this word: ", 30, 15);
  100. cout << guessWord;
  101. writeString(usedLetters, 12, 2);
  102.  
  103. while(gameOver == false) {
  104. do {
  105. writeString("Enter a letter: ", 30, 16);
  106. writeString("", 46, 16);
  107. cin >> letter;
  108. transform(letter.begin(), letter.end(), letter.begin(), toupper);
  109.  
  110. //error routine that checks if the player inputed valid data for letter
  111. if(letter < "A" || letter > "Z" || letter.length() >= 2) {
  112. writeString("You entered an invalid character.", 30, 17);
  113. Sleep(1000);
  114. writeString(" ", 30, 17);
  115. }
  116. }while(letter < "A" || letter > "Z" || letter.length() >= 2);
  117.  
  118. //adjusts usedLetters according to the selection
  119. usedLetters.replace(alphabet.find(letter), 1, letter);
  120. writeString(usedLetters, 12, 2);
  121.  
  122. //adjusts guessWord according to the selection
  123. for(unsigned int i = 0; i < numChars; i++) {
  124. if(setWord.substr(i, 1) == letter) {
  125. guessWord.replace((i * 2), 1, letter);
  126. dashReplace = true;
  127. }
  128. }
  129.  
  130. //determine whether a replacement was made
  131. if(dashReplace == true) {
  132. //display the status of the guessed word
  133. writeString("Guess this word: ", 30, 15);
  134. cout << guessWord;
  135.  
  136. //searches guessWord for the first occurance of a dash, if none were found, find() returns a -1
  137. if((guessWord.find("_", 0)) == -1) {
  138. gameOver = true;
  139. writeString("Yes, the word is: ", 30, 17);
  140. transform(setWord.begin(), setWord.end(), setWord.begin(), tolower);
  141. setWord[0] = toupper(setWord[0]);
  142. cout << setWord;
  143. writeString("I think I'm in love!", 30, 18);
  144.  
  145. int numColor = 0;
  146. for(int x = 0; x < 100; x++) {
  147. numColor++;
  148. if(numColor == 15)
  149. numColor = 1;
  150. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), numColor);
  151. writeString("<3", 51, 18);
  152. Sleep(50);
  153. writeString(" ", 51, 18);
  154. }
  155. } else
  156. dashReplace = false;
  157. } else {
  158. numIncorrect++;
  159. switch (numIncorrect) {
  160. case 1:
  161. writeChar(char(179), 21, 17);
  162. writeChar(char(1), 21, 18); //Displays head
  163. break;
  164. case 2:
  165. writeChar(char(179), 21, 19); //Displays body
  166. writeChar(char(179), 21, 20);
  167. break;
  168. case 3:
  169. writeChar(char(47), 20, 19); //Displays first arm
  170. break;
  171. case 4:
  172. writeChar(char(92), 22, 19); //Displays second arm
  173. break;
  174. case 5:
  175. writeChar(char(47), 20, 21); //Displays first leg
  176. break;
  177. case 6:
  178. gameOver = true;
  179. writeChar(char(92), 22, 21); //Displays first leg
  180. Sleep(1000);
  181. writeString("Sorry, the word is: ", 30, 17);
  182. transform(setWord.begin(), setWord.end(), setWord.begin(), tolower);
  183. setWord[0] = toupper(setWord[0]);
  184. cout << setWord;
  185. break;
  186. default:
  187. break;
  188. }//end switch
  189. }//end else
  190. }//end while
  191. }//end function
Add Comment
Please, Sign In to add comment