Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.h>
- char cadenas[201][50] ={
- "futbol","ordenador","onomatopeya","trigonometria","televisor","locura","fiesta","musica","edificio","ballesta","galera","fotosintesis",
- "pinza","subnormal","arbol","piscina","vacaciones","libro","ciclomotor","camping","precipitacion","integral","fisica","convento","cerebro",
- "silla","ventana","iconoclasta","mitocondria","piscina","telediario","maletin","invisible","atomo","armario","temporal","elemento",
- "centimetro","esdrujula","imagen","tarantula","fantastico","subterraneo","detergente","infraestructura","fructifero","codigo","maquina",
- "remunerado","administracion","fragmento","llave","dureza","calma","caos","presente","estomago","papel","techo","indigente","inocuo","vacuo",
- "vacuno","frase","ahorcado","botella","alcohol","murcielago","satisfaccion","programador","esperpento","odio","farola","republica","monarquia",
- "paralelipedo","confianza","vida","mecenas","acampada","envidia","cerrojo","cartas","amor","placer","sonrisa","victoria","pasado","destino",
- "hambre","matematicas","cuantica","metafisico","renacimiento","mamifero","alegria","agua","magnifico","maravilla","universidad","polivalente",
- "oceano","asiduidad","perfectamente","flexo","indeciso","papiroflexia","portaaviones","patibulo","hipertension","informacion","paraguas",
- "antinuclear","metafisica","nocturno","inteligencia","conocimiento","naturaleza","sintonizar","amplitud","frecuencia","inmutabilidad","humanidad",
- "anticlericalismo","cosquilleo","especulacion","discipulo","cientifico","ordinariedad","continuidad","unanime","fenomeno","cardiovasculatorio",
- "veridico","periodico","geografia","prohibicion","estupidez","inauguracion","domestico","artificial","inhospito","antaño","fotografia","transcurrir",
- "perenne","establecer","iluminado","atormentado","sospechoso","silenciosamente","humillacion","necesidad","retorcido","inflexible","enfermedad",
- "enmascarado", "azulado","comercial","anuncio","socialismo","autarquia","temblor","iniciativa","realidad","espiritualidad","despota","triunfador",
- "fantasma","garbanzo","estabilidad","mausoleo","explicacion","disimuladamente","catalizador","recomendado","desayuno","furtivo","hospital","inquilino",
- "consecuencia","administrador","funcionario","becario","licenciatura","pronunciamiento","manifiesto","soldado","congreso","constitucion","liberalismo",
- "constancia","fortaleza","aguardiente","juventud","levitacion","manuscrito","profundidad","incomodidad","establo","espiritu"
- };
- char patibulo[100][30] ={
- " ||===========",
- " || |",
- " || ",
- " || ",
- " || ________ ",
- " || | | ",
- " || | | ",
- "//\\\\______|____|__"
- };
- char historial[100][60]; // Aqui se almacena el historial de letras utilizada
- char resultado[100][50]; // Aqui se almacena lo descubierto en el ahorcado (re_ul__do)
- char cadena[100][50]; // Aqui se copia la palabra con la que se juega
- int w=-1; // Es el valor que toma cada iteracion del juego. Así coje una fila diferente de historial,resultado,cadena
- int pos_historial; // Historial (-2=vacio) (-1=nueva) (2=repetida)
- int existe_;
- /* Imagen final */
- void patibulofin()
- {
- int n,m;
- /** Limpiar patibulo **/
- for (n=2;n<7;n++)
- {
- for (m=6;m<20;m++)
- {patibulo[n][m] = ' ';};
- };
- patibulo[2][13] = '|';
- patibulo[3][13] = '|';
- patibulo[4][13] = '@';
- patibulo[5][12] = '/';
- patibulo[5][13] = '|';
- patibulo[5][14] = '\\';
- patibulo[6][12] = '/';
- patibulo[6][14] = '\\';
- patibulo[7][10] = '_';
- patibulo[7][15] = '_';
- }
- /* Imagen ganar */
- void patibulowin()
- {
- int n,m;
- /** Limpiar patibulo **/
- for (n=2;n<7;n++)
- {
- for (m=6;m<20;m++)
- {patibulo[n][m] = ' ';};
- };
- patibulo[5][13] = '@';
- patibulo[6][12] = '/';
- patibulo[6][13] = '|';
- patibulo[6][14] = '\\';
- patibulo[7][12] = '/';
- patibulo[7][14] = '\\';
- patibulo[7][10] = '_';
- patibulo[7][8] = '_';
- patibulo[7][15] = '_';
- }
- /* ___Imprimir cadena de carácteres___ */
- imprimir (char cadena_[])
- {
- int n_letras, n;
- if (cadena_[0]=='.')
- { return; }
- n_letras = strlen(cadena_);
- for (n=0;n<n_letras;n++)
- { printf("%c|",cadena_[n]); }
- }
- /* ___Devuelve el valor con la posicion___ */
- int determinar_posicion(char letra, char cadena_[], int inicio)
- {
- int x,n;
- n=strlen(cadena_)-1;
- if (n==-1)
- {return -2;} // Esto es para el historial
- for (x=0+inicio;x<=n;x++)
- {
- if(letra==cadena_[x])
- {
- if (inicio!=-1) // inicio=-1 significa que viene del historial. No tiene que asignar la letra.
- {resultado[w][x]=letra;}
- return x;
- }
- }
- existe_ = 0;
- return -1;
- }
- /* ___Determinar si se ha completado: 1 = si, 0 = no___ */
- int comprobar (char juego[],char escaneado[50],int inicio)
- {
- int n,x,aciertos;
- n = strlen(juego)-inicio;
- aciertos = 0;
- for (x=0;x<n;x++)
- {
- if(escaneado[x+inicio]==juego[x])
- {aciertos++;}
- }
- if (aciertos==n) {return 1;}
- else {return 0;}
- }
- /** ____________________JUEGO______________________ **/
- int programa()
- {
- char escaneado[50]; // Para introducir la palabra entera
- char pos[w][50]; // Posición de la letra escaneada, o -1 si no existe
- int n,m,n_letras,ganar,aciertos,intentos,p,o;
- historial[w][0] = '.';
- /* Limpiar patibulo */
- for (p=2;p<7;p++)
- {
- for (o=6;o<20;o++)
- {patibulo[p][o] = ' ';};
- };
- for (p=8;p<18;p++)
- {
- patibulo[4][p] = '_';
- patibulo[7][p] = '_';
- }
- for (p=5;p<8;p++)
- {
- patibulo[p][10] = '|';
- patibulo[p][15] = '|';
- }
- n_letras=strlen(cadena[w]); // Numero de letras
- for (n=0;n<n_letras;n++) // Poner barrabajas en Resultado
- {resultado[w][n]= '_';}
- /**_________ PROGRAMA EN SI ____________**/
- int contador = 0; // Posicionar la letra escaneada en historial
- int asterisco;
- pos[w][0]=-1;
- intentos = 7;
- aciertos = 0;
- /* Imprimir patibulo */
- for (p=0;p<10;p++)
- {printf("%s \n",patibulo[p]);}
- printf("\n ' %s ' (%d letras)",resultado[w],n_letras);
- /**______BUCLE: Escanear letra, comprobar, historial, ¿fin?______**/
- do
- {
- /* Escanear letra */
- printf("\n\nLetra: ");
- fflush(stdin);
- scanf("%s",escaneado);
- /* Escanear palabra entera */
- if (escaneado[0] == '*')
- {
- if (escaneado[1] == '*') {exit(0);}
- asterisco = 1;
- for(p=0;p<n_letras;p++)
- {
- if (escaneado[p+1]!=cadena[w][p])
- {
- intentos--;
- intentos--;
- ganar=0;
- system("cls");
- goto continuar;
- }
- }
- ganar = comprobar(cadena[w],escaneado,1);
- goto i_won;
- } else {asterisco = 0;}
- system("cls");
- /* Historial de letras */
- pos_historial = determinar_posicion(escaneado[0],historial[w],-1);
- if (pos_historial != -2 && pos_historial == -1)
- {
- historial[w][contador] = escaneado[0];
- contador++;
- }
- else
- {
- /* Imprimir patibulo */
- for (p=0;p<10;p++)
- {printf("%s \n",patibulo[p]);}
- printf("\n ' %s ' ",resultado[w]);
- printf("\n\nYa has usado esta letra antes.");
- printf("\n\nLetras utilizadas: \n");
- imprimir(historial[w]);
- printf("\n");
- ganar=0;
- goto continuar2;
- }
- /* Determinar posición */
- n=-1;
- m=0;
- /***___BUCLE: Determinar posicion, ¿ganar?___***/
- do
- {
- n++;
- pos[w][n] = determinar_posicion(escaneado[0],cadena[w],m); // Posicion en la cadena. -1 = no existe
- if (pos[w][n]!=-1)
- {
- aciertos++;
- m = pos[w][n] + 1;
- }
- /* Comprueba si se ha ganado */
- ganar = comprobar (cadena[w],resultado[w],0);
- i_won:
- if (ganar==1)
- {
- system("cls");
- patibulowin();
- for (p=0;p<10;p++)
- {printf("%s \n",patibulo[p]);};
- if (asterisco==1){printf("\n ' %s ' ",cadena[w]);}
- else {printf("\n ' %s ' ",resultado[w]);}
- printf ("\n\nEnhorabuena! Has ganado! \1 \n\n");
- goto continuar2;
- }
- } while (pos[w][n]!=-1);
- /***___FIN BUCLE___***/
- /* Comprobacion */
- if (intentos==0) // Comprueba si ya no quedan más intentos.
- {
- patibulofin();
- for (n=0;n<10;n++)
- {printf("%s \n",patibulo[p]);};
- printf("\nOhh...No te quedan mas intentos! La palabra era: %s\n",cadena[w]);
- break;
- }
- if(pos[w][0]==-1) // Analiza la primera posicion: si es -1, no aparece. Si es !=, si aparece. Patíbulo.
- {
- intentos--;
- continuar:
- switch (intentos)
- {
- case 1 : patibulo[4][14] = '\\';
- case 2 : patibulo[4][12] = '/';
- case 3 : patibulo[3][14] = '\\';
- case 4 : patibulo[3][12] = '/';
- case 5 : patibulo[3][13] = '|';
- case 6 : patibulo[2][13] = 1;
- break;
- case 0 : patibulofin();
- for (n=0;n<10;n++)
- {printf("%s \n",patibulo[n]);};
- printf("\nOhh...No te quedan mas intentos! La palabra era: %s\n",cadena[w]);
- ganar=1;
- getch();
- goto continuar2;
- }
- }
- else
- {
- for (p=0;p<10;p++) // Imprimir patibulo
- {printf("%s \n",patibulo[p]);}
- printf("\n ' %s ' ",resultado[w]);
- printf("\nLa letra '%c' SI aparece. (%d intentos restantes)\n",escaneado[0],intentos);
- goto salto;
- }
- for (p=0;p<10;p++){printf("%s \n",patibulo[p]);} // Imprimir patibulo
- printf("\n ' %s ' ",resultado[w]);
- if (asterisco==0) // Sólo hay que imprimir esto si no se ha escaneado la palabra entera (asterisco==0)
- {printf("\nLa letra '%c' NO aparece. (%d intentos restantes)\n",escaneado[0],intentos);}
- salto:
- printf("\n\nLetras utilizadas: \n");
- imprimir(historial[w]);
- printf("\n");
- continuar2:
- fflush(stdin);
- } while (ganar==0);
- /**______FIN BUCLE______**/
- }
- /*_____________________________Menú principal_________________________________________*/
- int main()
- {
- srand (getpid());
- int n;
- char jugadores[1], salir[10];
- do
- {
- fflush(stdin);
- printf("____EL A_ORCADO v2.0____\n\n1.Un jugador\n2.Dos jugadores\n*. Ayuda\n**. Salir\n\n...");
- scanf("%s",&jugadores);
- switch (jugadores[0])
- {
- case '1': do
- {
- w++;
- system("cls");
- fflush(stdin);
- n = rand () % (200-1+1) + 1;
- strcpy(cadena[w],cadenas[n]);
- system("cls");
- programa();
- printf("\nQuieres jugar otra vez?\nSi (s)\nVolver al menu (c)\nNo (n): \n");
- fflush(stdin);
- scanf("%s",&salir);
- system("cls");
- if(salir[1]=='e' && salir[2]=='n')
- {
- printf("Jorge, no te cansas tio? NO HAY BUG!!");
- getch();
- }
- } while (salir[0] == 's');
- break;
- case '2': do
- {
- w++;
- system("cls");
- fflush(stdin);
- printf("\n\nIntroduzca la palabra: ");
- scanf("%s", &cadena[w]);
- system("cls");
- programa();
- printf("\nQuieres jugar otra vez?\nSi (s)\nVolver al menu (c)\nNo (n): \n");
- fflush(stdin);
- scanf("%s",&salir);
- system("cls");
- } while (salir[0] == 's');
- break;
- case '*' :
- if (jugadores[1]=='*') {exit(0);}
- system("cls");
- printf("\n______AYUDA______\n\n\n- Durante el juego, para salir, introduce '**' (doble asterisco)\n\n- Durante el juego, si sabes la palabra y aun te quedan varias letras puedes\n introducirla con un asterisco (*) delante.\n\nPor ejemplo, tienes: a_o_ca_o y sabes que la palabra es 'ahorcado',\npuedes escribir: *ahorcado\nSi fallas, se te restaran dos intentos.");
- salir[0]='c';
- getch();
- system("cls");
- break;
- default: printf("\nIntroduce '1' para un solo jugador, o '2' para el modo multijugador.");
- getch();
- salir[0] = 'c';
- system("cls");
- }
- } while (salir[0] == 'c');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement