Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <time.h>
- #include <cstdlib>
- #include"toqueYFama.h"
- //declaración de variables globales usadas por las funciones a continuación
- static int dificultad = 0;
- static int toqueUsuario, famaUsuario, toquePC, famaPC;
- static int numeroPC, posicionPC, numeroUsuario, posicionUsuario;
- static int memoriaPC1 = 0;
- static int memoriaPC2 = 0;
- static int vectorPC[5] = {10,10,10,10,10};
- static int vectorUsuario[5] = {30,30,30,30,30};
- /*
- * Nombre de la función: bienvenida_tf.
- * Tipo de función: void.
- * Parámetros: -
- * Dato de retorno: -
- * Descripción de la función: La función bienvenida_tf imprime por la consola el título del juego,
- * junto con una breve descripción de este.
- */
- void bienvenida_tf(){
- printf("Toque y Fama\n\n");
- printf("Bienvenido a Toque y Fama. En este juego deberas intentar adivinar los\n");
- printf("digitos del numero de la computadora antes de que esta adivine los tuyos.\n");
- }
- /*
- * Nombre de la función: selectorDificultad_tf.
- * Tipo de función: int.
- * Parámetros: -
- * Dato de retorno: "z" de tipo int.
- * Descripción de la función: La función selectorDificultad_tf le indica al usuario a través de la
- * consola que ingrese su nivel de dificultad (de 2 a 5). Luego este dato
- * es analizado por un bucle while, el que avisará si lo ingresado es correcto.
- * Si no es correcto, se pedirá al usuario ingresar nuevamente el nivel de
- * dificultad. Si es correcto, el while se rompe y la dificultad se devuelve
- * al programa principal a través de la variable z.
- */
- int selectorDificultad_tf(){
- char x[10];
- printf("\nSeleccione su nivel de dificultad (de 2 a 5): ");
- scanf("%s",&x);
- int k=0;
- while(k == 0){ //En caso de que el usuario ingrese un n�mero incorrecto (o una letra) , el programa pedir� que se ingrese otro.
- int temp = (int)x[0];
- if(((temp <= 53) && (temp >= 50))){
- while(x[1]!=0){
- printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 2 y 5.\n");
- fflush(stdin);
- scanf("%s",&x);
- }
- k=1;
- break;
- }
- else{
- printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 2 y 5\n");
- fflush(stdin);
- scanf("%s",&x);
- }
- }
- int z = x[0];
- z = z - '0';
- printf("La dificultad seleccionada es %i.\n\n",z);
- return z;
- }
- /*
- * Nombre de la función: generadorNumeroPC_tf.
- * Tipo de función: void.
- * Parámetros: vector "a" de 5 elementos, "b" de tipo entero.
- * Dato de retorno: -
- * Descripción de la función: La función generadorNumeroPC_tf generará, gracias a la librería time.h y
- * un par de bucles, un número aleatorio del tamaño que indique la variable b,
- * cuyos dígitos no se repiten. Este numero queda guardado en el vector a.
- */
- void generadorNumeroPC_tf(int a[5],int b){
- int x;
- int y=0;
- srand(time(NULL));
- while(y<b){
- int r=rand()%10;
- for (x = 0; x < y; x++)
- {
- if(a[x] == r){
- break;
- }
- }
- if(x==y){
- a[y++]=r;
- }
- }
- }
- /*
- * Nombre de la función: seleccionNumero_tf.
- * Tipo de función: void.
- * Parámetros: vector "a" de 5 elementos, "b" de tipo entero.
- * Dato de retorno: -
- * Descripción de la función: La función seleccionNumero_tf le pedirá al usuario ingresar un número del
- * tamaño que indique la variable b. Luego, gracias a un selector switch que
- * se moverá en los distintos valores posibles de b, y varios if anidados,
- * se comprueba que el número siga la estructura necesaria para el juego
- * (numeros de "b" cifras distintas). Si el número no cumple algún requisito,
- * se pide al usuario que ingrese un número nuevamente. Cuando el usuario ingrese
- * un número correcto, el numero se almacena en cifras separadas dentro del vector
- * a.
- */
- void seleccionNumero_tf(int a[5],int b){
- char x[6] = {0,0,0,0,0,0};
- int k = 0;
- while(k == 0){
- printf("Seleccione un numero de %i cifras distintas entre si: ",b);
- scanf("%s",&x);
- switch (b){
- case 2:
- if((x[0] >= 48) && (x[0] <= 57)){
- if((x[1] >= 48) && (x[1] <= 57)){
- if(x[2] == 0){
- if((x[0] != x[1])){
- k = 1;
- break;
- } } } }
- break;
- case 3:
- if((x[0] >= 48) && (x[0] <= 57)){
- if((x[1] >= 48) && (x[1] <= 57)){
- if((x[2] >= 48) && (x[2] <= 57)){
- if(x[3] == 0){
- if((x[0] != x[1]) && (x[1] != x[2]) && (x[0] != x[2])){
- k = 1;
- break;
- } } } } }
- break;
- case 4:
- if((x[0] >= 48) && (x[0] <= 57)){
- if((x[1] >= 48) && (x[1] <= 57)){
- if((x[2] >= 48) && (x[2] <= 57)){
- if((x[3] >= 48) && (x[3] <= 57)){
- if(x[4] == 0){
- if((x[0] != x[1]) && (x[1] != x[2]) && (x[2] != x[3]) && (x[0] != x[2]) && (x[0] != x[3])){
- k = 1;
- break;
- } } } } } }
- break;
- case 5:
- if((x[0] >= 48) && (x[0] <= 57)){
- if((x[1] >= 48) && (x[1] <= 57)){
- if((x[2] >= 48) && (x[2] <= 57)){
- if((x[3] >= 48) && (x[3] <= 57)){
- if((x[4] >= 48) && (x[4] <= 57)){
- if(x[5] == 0){
- 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])){
- k = 1;
- break;
- } } } } } } }
- break;
- }
- if(k == 0){
- printf("ERROR, el dato introducido no es valido, intente nuevamente.\n");
- }
- }
- for(int i = 0; i < b; i++){
- a[i] = x[i] - 48;
- }
- }
- /*
- * Nombre de la función: adivinarNumero_tf.
- * Tipo de función: int.
- * Parámetros: -
- * Dato de retorno: "y" de tipo int.
- * Descripción de la función: La función adivinarNumero_tf pide al usuario que ingrese algún numero que crea
- * está en el número del PC. El dato ingresado se revisa en un bucle while para
- * comprobar que sea un número de 0 a 9. Si no es un número se pide al usuario que
- * ingrese nuevamente un dato. Si es un número, se rompe el bucle y se devuelve el
- * dato al programa principal en la variable y. Como medida de seguridad, una vez el
- * usuario consiga una fama con algún número, ese numero no podrá volver a ser utilizado
- */
- int adivinarNumero_tf(){
- char x[10];
- printf("\nIntente adivinar un digito del numero del PC: ");
- scanf("%s",&x);
- int k=0;
- while(k == 0){ //En caso de que el usuario ingrese un n�mero incorrecto (o una letra), el programa pedir� que se ingrese otro.
- int temp = (int)x[0];
- if(((temp <= 57) && (temp >= 48))){
- while(x[1]!=0){
- printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 0 y 9.\n");
- fflush(stdin);
- scanf("%s",&x);
- }
- k=1;
- break;
- }
- else{
- printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 0 y 9.\n");
- fflush(stdin);
- scanf("%s",&x);
- }
- }
- int y = x[0];
- y = y - '0';
- return y;
- }
- /*
- * Nombre de la función: adivinarPosicion_tf.
- * Tipo de función: int.
- * Parámetros: "a" de tipo int.
- * Dato de retorno: "z" de tipo int.
- * Descripción de la función: La funcion adivinarPosicion_tf pide al usuario ingresar el lugar donde éste cree
- * está el digito ingresado en la función adivinarNumero_tf. El dato se revisa, usando bucles
- * y varios if, que corresponda a un número entre 1 y la variable a. Si no cumple algun parámetro,
- * se pide al usuario que intente nuevamente ingresar una posición. Si el dato es válido, el bucle
- * se rompe y se devuelve al programa principal la posición en la variable z.
- */
- int adivinarPosicion_tf(int a){
- char x[10];
- printf("\nIntente adivinar la posicion de el digito: ");
- scanf("%s",&x);
- int k=0;
- while(k == 0){ //En caso de que el usuario ingrese un n�mero incorrecto (o una letra), el programa pedir� que se ingrese otro.
- int y = a;
- y = y + '0';
- int temp = (int)x[0];
- if(((temp <= y) && (temp > 48))){
- while(x[1]!=0){
- printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 1 y %i.\n",a);
- fflush(stdin);
- scanf("%s",&x);
- }
- k=1;
- break;
- }
- else{
- printf("El dato digitado no es un valor correcto. Ingrese un valor numerico entre 1 y %i.\n",a);
- fflush(stdin);
- scanf("%s",&x);
- }
- }
- int z = x[0];
- z = z - '0';
- z = z-1;
- return z;
- }
- /*
- * Nombre de la función: pcNumberGuess_tf.
- * Tipo de función: int.
- * Parámetros: -
- * Dato de retorno: "x" de tipo int.
- * Descripción de la función: La función pcNumberGuess_tf genera un número aleatorio del 0 al 9, utilizando la función
- * srand y rand()%. Luego devuelve este número al programa principal en la variable x. Si el PC
- * generara un número con el que ya consiguió una fama, se volvera a generar un número.
- */
- int pcNumberGuess_tf(){
- int x;
- srand(time(NULL));
- int r=rand()%10;
- x = r;
- printf("El PC eligio el numero %i, ", x);
- memoriaPC2 = x;
- return x;
- }
- /*
- * Nombre de la función: pcPossitionGuess_tf.
- * Tipo de función: int.
- * Parámetros: "a" de tipo int.
- * Dato de retorno: "x" de tipo int.
- * Descripción de la función: La función pcPossitionGuess_tf genera un número aleatorio desde 1 hasta a, utilizando la
- * función srand y rand()%. Este número corresponde a la posición donde el PC cree está el número
- * generado en la función pcNumberGuess_tf. El dato se devuelve al programa principal en la variable x.
- */
- int pcPossitionGuess_tf(int a){
- int x;
- srand(time(NULL));
- int r=rand()%a;
- x = r;
- printf("y la posicion %i. \n", x + 1);
- return x;
- }
- /*
- * Nombre de la función: scanToqueFama_tf.
- * Tipo de función: void.
- * Parámetros: vector "a" y vector "b", de 5 elementos. "c", "d", "e", "f" y "g" de tipo int.
- * Dato de retorno: -
- * Descripción de la función: La función scanToqueFama_tf comprueba, usando bucles for y algunos if-else, si existe algun toque
- * (que el dígito ingresado por el PC o el usuario está en el número del contrincante), y alguna fama
- * (que el dígito esté en la posición indicada por el PC o el usuario). Si existe algun toque o fama del
- * del usuario, aumentara el contador de toques o famas, respectivamente. Si existe un toque del PC, se
- * almacenará un dato en la memoria de éste, por lo que el PC repetirá su dígito y variará sólo la posición
- * hasta conseguir una fama. Una vez conseguida la fama, se revertirá la memoria del PC y se seguirán generando
- * dígitos y posiciones aleatorias, y se guardará el número con el que el PC consiguió la fama, para que el PC
- * no lo vuelva a usar. Si existe una fama del usuario, ese número se almacenará en un vector que
- * impedirá repetir el número que ya fue fama. Al final de la función se imprimen los toques y famas actuales, tanto del
- * usuario como del PC.
- */
- void scanToqueFama_tf(int a[5], int b[5], int c, int d, int e, int f, int g){
- for(int i = 0; i < g; i++){
- if(a[i] == c){
- if(i == d){
- famaUsuario++;
- break;
- }
- else{
- toqueUsuario++;
- break;
- }
- }
- }
- for(int j = 0; j < g; j++){
- if(b[j] == e){
- if(j == f){
- memoriaPC1 = 30;
- famaPC++;
- break;
- }
- else{
- memoriaPC1 = 1;
- toquePC++;
- break;
- }
- }
- }
- printf("Toques del Usuario: %i. Famas del usuario: %i.\n", toqueUsuario, famaUsuario);
- printf("Toques del PC: %i. Famas del PC: %i. \n",toquePC, famaPC);
- }
- /*
- * Nombre de la función: scanVictoria_tf.
- * Tipo de función: void.
- * Parámetros: "a", "b" y "c" de tipo int. Vector d de 5 elementos.
- * Dato de retorno: -
- * 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
- * del PC (variable b) o las del usuario (variable a) son iguales al límite del juego (variable c). Si es así,
- * se imprime por la consola el ganador del juego, junto al número completo del PC para mostrar al usuario
- * cuál era este.
- */
- void scanVictoria_tf(int a, int b, int c, int d[5]){
- if(a == 4){
- printf("Gana el usuario! El numero del PC era: ");
- for(int i = 0; i < c; i++){
- printf("%i", d[i]);
- }
- }
- else if(b == 4){
- printf("Gana el PC, su numero era: ");
- for(int i = 0; i < c; i++){
- printf("%i", d[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement