NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Avatar
Autor: Lubo Cerebla
Aktivity