Advertisement
c_pinoleo01

el_toqueyfama

Jan 24th, 2020
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <cstdlib>
  4. #include"toqueYFama.h"
  5.  
  6. //declaración de variables globales usadas por las funciones a continuación
  7. static int dificultad = 0;
  8. static int toqueUsuario, famaUsuario, toquePC, famaPC;
  9. static int numeroPC, posicionPC, numeroUsuario, posicionUsuario;
  10. static int memoriaPC1 = 0;
  11. static int memoriaPC2 = 0;
  12. static int vectorPC[5] = {10,10,10,10,10};
  13. static int vectorUsuario[5] = {30,30,30,30,30};
  14.  
  15. /*
  16. * Nombre de la función: bienvenida_tf.
  17. * Tipo de función: void.
  18. * Parámetros: -
  19. * Dato de retorno: -
  20. * Descripción de la función: La función bienvenida_tf imprime por la consola el título del juego,
  21. * junto con una breve descripción de este.
  22. */
  23. void bienvenida_tf(){
  24. printf("Toque y Fama\n\n");
  25. printf("Bienvenido a Toque y Fama. En este juego deberas intentar adivinar los\n");
  26. printf("digitos del numero de la computadora antes de que esta adivine los tuyos.\n");
  27.  
  28. }
  29.  
  30. /*
  31. * Nombre de la función: selectorDificultad_tf.
  32. * Tipo de función: int.
  33. * Parámetros: -
  34. * Dato de retorno: "z" de tipo int.
  35. * Descripción de la función: La función selectorDificultad_tf le indica al usuario a través de la
  36. * consola que ingrese su nivel de dificultad (de 2 a 5). Luego este dato
  37. * es analizado por un bucle while, el que avisará si lo ingresado es correcto.
  38. * Si no es correcto, se pedirá al usuario ingresar nuevamente el nivel de
  39. * dificultad. Si es correcto, el while se rompe y la dificultad se devuelve
  40. * al programa principal a través de la variable z.
  41. */
  42. int selectorDificultad_tf(){
  43.  
  44. char x[10];
  45. printf("\nSeleccione su nivel de dificultad (de 2 a 5): ");
  46. scanf("%s",&x);
  47.  
  48. int k=0;
  49. while(k == 0){ //En caso de que el usuario ingrese un n�mero incorrecto (o una letra) , el programa pedir� que se ingrese otro.
  50.  
  51. int temp = (int)x[0];
  52.  
  53. if(((temp <= 53) && (temp >= 50))){
  54. while(x[1]!=0){
  55. printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 2 y 5.\n");
  56. fflush(stdin);
  57. scanf("%s",&x);
  58. }
  59. k=1;
  60. break;
  61. }
  62. else{
  63. printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 2 y 5\n");
  64. fflush(stdin);
  65. scanf("%s",&x);
  66. }
  67. }
  68. int z = x[0];
  69. z = z - '0';
  70. printf("La dificultad seleccionada es %i.\n\n",z);
  71. return z;
  72. }
  73.  
  74. /*
  75. * Nombre de la función: generadorNumeroPC_tf.
  76. * Tipo de función: void.
  77. * Parámetros: vector "a" de 5 elementos, "b" de tipo entero.
  78. * Dato de retorno: -
  79. * Descripción de la función: La función generadorNumeroPC_tf generará, gracias a la librería time.h y
  80. * un par de bucles, un número aleatorio del tamaño que indique la variable b,
  81. * cuyos dígitos no se repiten. Este numero queda guardado en el vector a.
  82. */
  83. void generadorNumeroPC_tf(int a[5],int b){
  84.  
  85. int x;
  86. int y=0;
  87.  
  88. srand(time(NULL));
  89.  
  90. while(y<b){
  91. int r=rand()%10;
  92.  
  93. for (x = 0; x < y; x++)
  94. {
  95. if(a[x] == r){
  96. break;
  97. }
  98. }
  99. if(x==y){
  100. a[y++]=r;
  101. }
  102. }
  103.  
  104. }
  105.  
  106. /*
  107. * Nombre de la función: seleccionNumero_tf.
  108. * Tipo de función: void.
  109. * Parámetros: vector "a" de 5 elementos, "b" de tipo entero.
  110. * Dato de retorno: -
  111. * Descripción de la función: La función seleccionNumero_tf le pedirá al usuario ingresar un número del
  112. * tamaño que indique la variable b. Luego, gracias a un selector switch que
  113. * se moverá en los distintos valores posibles de b, y varios if anidados,
  114. * se comprueba que el número siga la estructura necesaria para el juego
  115. * (numeros de "b" cifras distintas). Si el número no cumple algún requisito,
  116. * se pide al usuario que ingrese un número nuevamente. Cuando el usuario ingrese
  117. * un número correcto, el numero se almacena en cifras separadas dentro del vector
  118. * a.
  119. */
  120. void seleccionNumero_tf(int a[5],int b){
  121.  
  122. char x[6] = {0,0,0,0,0,0};
  123. int k = 0;
  124. while(k == 0){
  125. printf("Seleccione un numero de %i cifras distintas entre si: ",b);
  126. scanf("%s",&x);
  127.  
  128. switch (b){
  129. case 2:
  130. if((x[0] >= 48) && (x[0] <= 57)){
  131. if((x[1] >= 48) && (x[1] <= 57)){
  132. if(x[2] == 0){
  133. if((x[0] != x[1])){
  134. k = 1;
  135. break;
  136. } } } }
  137. break;
  138. case 3:
  139. if((x[0] >= 48) && (x[0] <= 57)){
  140. if((x[1] >= 48) && (x[1] <= 57)){
  141. if((x[2] >= 48) && (x[2] <= 57)){
  142. if(x[3] == 0){
  143. if((x[0] != x[1]) && (x[1] != x[2]) && (x[0] != x[2])){
  144. k = 1;
  145. break;
  146. } } } } }
  147. break;
  148. case 4:
  149. if((x[0] >= 48) && (x[0] <= 57)){
  150. if((x[1] >= 48) && (x[1] <= 57)){
  151. if((x[2] >= 48) && (x[2] <= 57)){
  152. if((x[3] >= 48) && (x[3] <= 57)){
  153. if(x[4] == 0){
  154. if((x[0] != x[1]) && (x[1] != x[2]) && (x[2] != x[3]) && (x[0] != x[2]) && (x[0] != x[3])){
  155. k = 1;
  156. break;
  157. } } } } } }
  158. break;
  159. case 5:
  160. if((x[0] >= 48) && (x[0] <= 57)){
  161. if((x[1] >= 48) && (x[1] <= 57)){
  162. if((x[2] >= 48) && (x[2] <= 57)){
  163. if((x[3] >= 48) && (x[3] <= 57)){
  164. if((x[4] >= 48) && (x[4] <= 57)){
  165. if(x[5] == 0){
  166. if((x[0] != x[1]) && (x[1] != x[2]) && (x[2] != x[3]) && (x[3] != x[4]) && (x[0] != x[2]) && (x[0] != x[3]) && (x[0] != x[4])){
  167. k = 1;
  168. break;
  169. } } } } } } }
  170. break;
  171. }
  172. if(k == 0){
  173. printf("ERROR, el dato introducido no es valido, intente nuevamente.\n");
  174. }
  175.  
  176. }
  177.  
  178. for(int i = 0; i < b; i++){
  179.  
  180. a[i] = x[i] - 48;
  181.  
  182. }
  183.  
  184.  
  185. }
  186.  
  187. /*
  188. * Nombre de la función: adivinarNumero_tf.
  189. * Tipo de función: int.
  190. * Parámetros: -
  191. * Dato de retorno: "y" de tipo int.
  192. * Descripción de la función: La función adivinarNumero_tf pide al usuario que ingrese algún numero que crea
  193. * está en el número del PC. El dato ingresado se revisa en un bucle while para
  194. * comprobar que sea un número de 0 a 9. Si no es un número se pide al usuario que
  195. * ingrese nuevamente un dato. Si es un número, se rompe el bucle y se devuelve el
  196. * dato al programa principal en la variable y. Como medida de seguridad, una vez el
  197. * usuario consiga una fama con algún número, ese numero no podrá volver a ser utilizado
  198. */
  199. int adivinarNumero_tf(){
  200.  
  201. char x[10];
  202. printf("\nIntente adivinar un digito del numero del PC: ");
  203. scanf("%s",&x);
  204.  
  205. int k=0;
  206. while(k == 0){ //En caso de que el usuario ingrese un n�mero incorrecto (o una letra), el programa pedir� que se ingrese otro.
  207.  
  208. int temp = (int)x[0];
  209.  
  210. if(((temp <= 57) && (temp >= 48))){
  211. while(x[1]!=0){
  212. printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 0 y 9.\n");
  213. fflush(stdin);
  214. scanf("%s",&x);
  215. }
  216. k=1;
  217. break;
  218. }
  219. else{
  220. printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 0 y 9.\n");
  221. fflush(stdin);
  222. scanf("%s",&x);
  223. }
  224. }
  225. int y = x[0];
  226. y = y - '0';
  227. return y;
  228. }
  229.  
  230. /*
  231. * Nombre de la función: adivinarPosicion_tf.
  232. * Tipo de función: int.
  233. * Parámetros: "a" de tipo int.
  234. * Dato de retorno: "z" de tipo int.
  235. * Descripción de la función: La funcion adivinarPosicion_tf pide al usuario ingresar el lugar donde éste cree
  236. * está el digito ingresado en la función adivinarNumero_tf. El dato se revisa, usando bucles
  237. * y varios if, que corresponda a un número entre 1 y la variable a. Si no cumple algun parámetro,
  238. * se pide al usuario que intente nuevamente ingresar una posición. Si el dato es válido, el bucle
  239. * se rompe y se devuelve al programa principal la posición en la variable z.
  240. */
  241. int adivinarPosicion_tf(int a){
  242.  
  243. char x[10];
  244. printf("\nIntente adivinar la posicion de el digito: ");
  245. scanf("%s",&x);
  246.  
  247. int k=0;
  248. while(k == 0){ //En caso de que el usuario ingrese un n�mero incorrecto (o una letra), el programa pedir� que se ingrese otro.
  249.  
  250. int y = a;
  251. y = y + '0';
  252.  
  253. int temp = (int)x[0];
  254.  
  255. if(((temp <= y) && (temp > 48))){
  256. while(x[1]!=0){
  257. printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 1 y %i.\n",a);
  258. fflush(stdin);
  259. scanf("%s",&x);
  260. }
  261. k=1;
  262. break;
  263. }
  264. else{
  265. printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 1 y %i.\n",a);
  266. fflush(stdin);
  267. scanf("%s",&x);
  268. }
  269. }
  270. int z = x[0];
  271. z = z - '0';
  272. z = z-1;
  273. return z;
  274. }
  275.  
  276. /*
  277. * Nombre de la función: pcNumberGuess_tf.
  278. * Tipo de función: int.
  279. * Parámetros: -
  280. * Dato de retorno: "x" de tipo int.
  281. * Descripción de la función: La función pcNumberGuess_tf genera un número aleatorio del 0 al 9, utilizando la función
  282. * srand y rand()%. Luego devuelve este número al programa principal en la variable x. Si el PC
  283. * generara un número con el que ya consiguió una fama, se volvera a generar un número.
  284. */
  285. int pcNumberGuess_tf(){
  286.  
  287. int x;
  288.  
  289. srand(time(NULL));
  290.  
  291. int r=rand()%10;
  292.  
  293. x = r;
  294.  
  295. printf("El PC eligio el numero %i, ", x);
  296.  
  297. memoriaPC2 = x;
  298.  
  299. return x;
  300. }
  301.  
  302. /*
  303. * Nombre de la función: pcPossitionGuess_tf.
  304. * Tipo de función: int.
  305. * Parámetros: "a" de tipo int.
  306. * Dato de retorno: "x" de tipo int.
  307. * Descripción de la función: La función pcPossitionGuess_tf genera un número aleatorio desde 1 hasta a, utilizando la
  308. * función srand y rand()%. Este número corresponde a la posición donde el PC cree está el número
  309. * generado en la función pcNumberGuess_tf. El dato se devuelve al programa principal en la variable x.
  310. */
  311. int pcPossitionGuess_tf(int a){
  312.  
  313. int x;
  314.  
  315. srand(time(NULL));
  316.  
  317. int r=rand()%a;
  318.  
  319. x = r;
  320.  
  321. printf("y la posicion %i. \n", x + 1);
  322.  
  323. return x;
  324. }
  325.  
  326. /*
  327. * Nombre de la función: scanToqueFama_tf.
  328. * Tipo de función: void.
  329. * Parámetros: vector "a" y vector "b", de 5 elementos. "c", "d", "e", "f" y "g" de tipo int.
  330. * Dato de retorno: -
  331. * Descripción de la función: La función scanToqueFama_tf comprueba, usando bucles for y algunos if-else, si existe algun toque
  332. * (que el dígito ingresado por el PC o el usuario está en el número del contrincante), y alguna fama
  333. * (que el dígito esté en la posición indicada por el PC o el usuario). Si existe algun toque o fama del
  334. * del usuario, aumentara el contador de toques o famas, respectivamente. Si existe un toque del PC, se
  335. * almacenará un dato en la memoria de éste, por lo que el PC repetirá su dígito y variará sólo la posición
  336. * hasta conseguir una fama. Una vez conseguida la fama, se revertirá la memoria del PC y se seguirán generando
  337. * dígitos y posiciones aleatorias, y se guardará el número con el que el PC consiguió la fama, para que el PC
  338. * no lo vuelva a usar. Si existe una fama del usuario, ese número se almacenará en un vector que
  339. * impedirá repetir el número que ya fue fama. Al final de la función se imprimen los toques y famas actuales, tanto del
  340. * usuario como del PC.
  341. */
  342. void scanToqueFama_tf(int a[5], int b[5], int c, int d, int e, int f, int g){
  343.  
  344. for(int i = 0; i < g; i++){
  345.  
  346. if(a[i] == c){
  347. if(i == d){
  348. famaUsuario++;
  349. break;
  350. }
  351. else{
  352. toqueUsuario++;
  353. break;
  354. }
  355.  
  356. }
  357. }
  358.  
  359. for(int j = 0; j < g; j++){
  360.  
  361. if(b[j] == e){
  362. if(j == f){
  363. memoriaPC1 = 30;
  364. famaPC++;
  365. break;
  366. }
  367. else{
  368. memoriaPC1 = 1;
  369. toquePC++;
  370. break;
  371. }
  372. }
  373. }
  374.  
  375. printf("Toques del Usuario: %i. Famas del usuario: %i.\n", toqueUsuario, famaUsuario);
  376. printf("Toques del PC: %i. Famas del PC: %i. \n",toquePC, famaPC);
  377. }
  378.  
  379. /*
  380. * Nombre de la función: scanVictoria_tf.
  381. * Tipo de función: void.
  382. * Parámetros: "a", "b" y "c" de tipo int. Vector d de 5 elementos.
  383. * Dato de retorno: -
  384. * Descripción de la función: La función scanVictoria_tf comprueba, con un if - else if, si existe algún ganador, es decir, si las famas
  385. * del PC (variable b) o las del usuario (variable a) son iguales al límite del juego (variable c). Si es así,
  386. * se imprime por la consola el ganador del juego, junto al número completo del PC para mostrar al usuario
  387. * cuál era este.
  388. */
  389. void scanVictoria_tf(int a, int b, int c, int d[5]){
  390.  
  391. if(a == 4){
  392.  
  393. printf("Gana el usuario! El numero del PC era: ");
  394. for(int i = 0; i < c; i++){
  395. printf("%i", d[i]);
  396.  
  397. }
  398. }
  399.  
  400. else if(b == 4){
  401. printf("Gana el PC, su numero era: ");
  402. for(int i = 0; i < c; i++){
  403. printf("%i", d[i]);
  404.  
  405. }
  406. }
  407.  
  408.  
  409. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement