hangman.c
C# .NET
#include "hangman.h"
/**
* Funkcia detekuje, ci hrac uhadol heslo
* @parameter: pole secret obsahuje obsahuje hracom hadane slovo
* @parameter: pole letters_guessed retazec hadanych znakov
* @return: 1, ak je slovo uhadnute, 0 v ostatnych pripadoch.
*/
int is_word_guessed(const char secret[], const char letters_guessed[])
{
}
/**
* Funkcia vrati retazec reprezentujuci hadane slovo
* Tento retazec obsahuje viditelne pismena, ktore uz boli hracom uhadnute na spravnej pozicii.
* Ostatne neuhadnute znaky su zobrazene znakom '_'.
* @parameter: pole secret obsahuje retazec malych pismen tajneho slova
* @parameter: pole letters_guessed obsahuje retazec znakov, ktore hrac uz hadal
* @parameter: pole guessed_word reprezentuje aktualny stav hadaneho slova (vystupny parameter)
*/
void update_guessed_word(const char secret[], const char letters_guessed[], char guessed_word[])
{
}
/**
* Vrati znaky, ktore su este k dispozicii pre hadanie
* Funkcia vrati mnozinu malych pismen v alfabetickom poradi.
* Tato mnozina obsahuje vsetky znaky, okrem tych, ktore uz boli hadane.
* @parameter: pole letters_guessed obsahuje male pismena, ktore uz boli hadane
* @parameter: pole available_letters obsahuje pismena, ktore su este k dispozicii
*/
void get_available_letters(const char letters_guessed[], char available_letters[])
{
}
/**
* Startuje interaktivitu vasej hry.
*
* @parameter: pole znakov secret s hadanym slovom
* Funkcia je uz vytvorena, mozete ju volat z hlavneho programu
* Ak sa vam nepaci, mozete si ju aj preprogramovat
*/
void hangman(const char secret[])
{
int nc = MAXSTEPS;
int i;
int c;
char letters_guessed[100];
char available_letters[30];
char guessed_word[strlen(secret)+1];
strcpy(available_letters,"abcdefghijklmnopqrstuvwxyz");
for(i=0; i<strlen(secret); i++)
guessed_word[i] = '_';
guessed_word[i] = '\0';
printf("Vitaj v hre HANGMAN!\n");
printf("Myslim si slovo dlhe %d znakov\n",strlen(secret));
printf("------------------------------------------------------------\n");
while(!is_word_guessed(secret,letters_guessed) && nc>0){
printf("Mate %d pokusov na uhadnutie hesla\n", nc);
printf("Pouzitelne pismena: %s\n",available_letters);
printf("Vloz hadane pismeno: ");
c = getchar();getchar();
if(strchr(letters_guessed,c) == NULL){
letters_guessed[strlen(letters_guessed)] = c;
letters_guessed[strlen(letters_guessed)+1] = '\0';
get_available_letters(letters_guessed, available_letters);
if(strchr(secret,c) == NULL){
printf("Zla volba, toto pismeno sa v slove nenachadza: ");
nc--;
}
else {
update_guessed_word(secret, letters_guessed, guessed_word);
printf("Dobra volba: ");
}
for(i=0; i<strlen(guessed_word); i++)
printf("%c ",guessed_word[i]);
printf("\n");
}
else {
printf("Toto pismeno uz bolo hadane: ");
for(i=0; i<strlen(guessed_word); i++)
printf("%c ",guessed_word[i]);
printf("\n");
}
printf("------------------------------------------------------------\n");
}
if(!is_word_guessed(secret,guessed_word))
printf("\nNeuhadol si.\nHadane slovo bolo: %s\n",secret);
else
printf("\nG r a t u l u j e m ! Vyhral si!\n");
}
/**
* Vrati náhodne slovo
* Funkcia otvori subor so vsetkymi slovami a nahodne vyberie jedno slovo
* ktore ulozi do premennej secret. SLovo obsahuje len male pismena.
* @parametre: pole znakov secret, do ktoreho sa vlozi nacitane nahodne slovo
* @return: 0, ak je vsetko OK, 1 ak dojde k chybe.
* Funkcia je uz vytvorena, vy ju len pouzijete v hlavnom programe
*/
int get_word(char secret[]){
// kontroluje pritomnost suboru so slovami
FILE *fp = fopen(WORDLIST_FILENAME, "rb");
if( fp == NULL ){
fprintf(stderr, "Subor sa nenasiel: %s\n", WORDLIST_FILENAME);
return 1;
}
// zisti velkost suboru
struct stat st;
stat(WORDLIST_FILENAME, &st);
long int size = st.st_size;
do{
// generuje nahodne cislo zo suboru
long int random = (rand() % size) + 1;
// nastavi na vygenerovanu poziciu
fseek(fp, random, SEEK_SET);
// ziska slovo zo suboru
int result = fscanf(fp, "%*s %20s", secret);
if( result != EOF )
break;
}while(1);
fclose(fp);
return 0;
}
Neformátovaný
Přidáno: 24.11.2022
Expirace: Neuvedeno