Hangman Game In C

Program Breakdown

Example

# include < stdio.h >
# include < stdlib.h >
# include < stdbool.h >
# include < time.h >
# include < string.h >
# define WORDS 10
# define WORDLEN 40
# define CHANCE 6

All the necessary library has taken into the code

Example

char * decrypt ( char * code ) {
	int hash = ( ( strlen ( code ) - 3 ) / 3 ) + 2 ;
	char * decrypt = malloc ( hash ) ;
	char * toFree = decrypt ;
	char * word = code ;
	for ( int ch = * code ; ch ! = ' \ 0 ' ; ch = * ( + + code ) )
	{
		if ( ( code - word + 2 ) % 3  = = 1 ) {
			* ( decrypt + + ) = ch - ( word - code + 1 ) - hash ;
		}
	}
	* decrypt = ' \ 0 ' ;
	return toFree ;
}

The given code snippet produces output by applying a hash function that verifies the presence of alphabetic characters.

Example

void printBody ( int mistakes , char * body ) {
	printf ( " \ t Mistakes : % d \ n " , mistakes ) ;
	switch ( mistakes ) {

		case 6 : body [ 6 ] = ' \ \ ' ; break ;
		case 5 : body [ 5 ] = ' / ' ; break ;
		case 4 : body [ 4 ] = ' \ \ ' ; break ;
		case 3 : body [ 3 ] = ' | ' ; break ;
		case 2 : body [ 2 ] = ' / ' ; break ;
		case 1 : body [ 1 ] = ' ) ' , body [ 0 ] = ' ( ' ; break ;
		default : break ;

	}

	printf ( " \ t _________ \ n "
	       " \ t |         | \ n "
	       " \ t |        % c % c \ n "
	       " \ t |        % c % c % c \ n "
	       " \ t |        % c % c \ n "
	       " \ t |             \ n "
	       " \ t |             " , body [ 0 ] , body [ 1 ] , body [ 2 ] ,
	       body [ 3 ] , body [ 4 ] , body [ 5 ] , body [ 6 ] ) ;
}

The above code will print the body of the man.

Example

void printWord ( char * guess , int len ) {
	printf ( " \ t " ) ;
	for ( int i = 0 ; i < len ; + + i )
	{
		printf ( " % c " , guess [ i ] ) ;
	}
	printf ( " \ n \ n " ) ;
}

The above code will print the word.

Program for Hangman Game in C

Example

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <string.h>

#define WORDS 10
#define WORDLEN 40
#define CHANCE 6

bool srand_called = false;

int i_rnd(int i) {
    if (!srand_called) {
        srand(time(NULL) << 10);
        srand_called = true;
    }
    return rand() % i;
}

char* decrypt(char* code) {
	int hash = ((strlen(code) - 3) / 3) + 2;
	char* decrypt = malloc(hash);
	char* toFree = decrypt;
	char* word = code;
	for (int ch = *code; ch != '\0'; ch = *(++code))
	{
		if((code - word + 2) % 3  == 1){
			*(decrypt++) = ch - (word - code + 1) - hash;
		}
	}
	*decrypt = '\0';
	return toFree;
}

void printBody(int mistakes, char* body) {
	printf("\tMistakes :%d\n", mistakes);
	switch(mistakes) {

		case 6: body[6] = '\\'; break;
		case 5: body[5] = '/'; break;
		case 4: body[4] = '\\'; break;
		case 3: body[3] = '|'; break;
		case 2: body[2] = '/'; break;
		case 1: body[1] = ')', body[0] = '('; break;
		default: break;

	}

	printf("\t _________\n"
	       "\t|         |\n"
	       "\t|        %c %c\n"
	       "\t|        %c%c%c\n"
	       "\t|        %c %c\n"
	       "\t|             \n"
	       "\t|             ", body[0], body[1], body[2],
	       body[3], body[4], body[5], body[6]);
}

void printWord(char* guess, int len) {
	printf("\t");
	for (int i = 0; i < len; ++i)
	{
		printf("%c ", guess[i]);
	}
	printf("\n\n");
}

int main() {

	printf("\n\t Be aware you can be hanged!!.");

	printf("\n\n\t Rules : ");
	printf("\n\t - Maximum 6 mistakes are allowed.");
	printf("\n\t - All alphabet are in lower case.");
	printf("\n\t - All words are name of very popular Websites. eg. Google");
	printf("\n\t - If you enjoy continue, otherwise close it.");

	printf("\n\t Syntax : Alphabet");
	printf("\n\t Example : a \n\n");

	char values[WORDS][WORDLEN] = {"N~mqOlJ^tZletXodeYgs","gCnDIfFQe^CdP^^B{hZpeLA^hv","7urtrtwQv{dt`>^}FaR]i]XUug^GI",
									"aSwfXsxOsWAlXScVQmjAWJG","cruD=idduvUdr=gmcauCmg]","BQt`zncypFVjvIaTl]u=_?Aa}F",
									"iLvkKdT`yu~mWj[^gcO|","jSiLyzJ=vPmnv^`N]^>ViAC^z_","xo|RqqhO|nNstjmzfiuoiFfhwtdh~",
									"OHkttvxdp|[nnW]Drgaomdq"};
	char *body = malloc(CHANCE+1);

	int id = i_rnd(WORDS);
	char *word = decrypt(values[id]);
	int len = strlen(word);
	char *guessed = malloc(len);
	char falseWord[CHANCE];

	memset(body, ' ', CHANCE+1);
	memset(guessed, '_', len);
	char guess;
	bool found;
	char* win;

	int mistakes = 0;
	setvbuf(stdin, NULL, _IONBF, 0);

	do {

		found = false;
		printf("\n\n");
		printBody(mistakes, body);
		printf("\n\n");
		printf("\tFalse Letters : ");
		if(mistakes == 0) printf("None\n");
		for (int i = 0; i < mistakes; ++i)
		{
			printf("%c", falseWord[i]);
		}
		printf("\n\n");
		printWord(guessed, len);
		printf("\tGive me a alphabet in lower case : ");
		do {scanf("%c",&guess);} while ( getchar() != '\n' );
		for (int i = 0; i < len; ++i)
		{
			if(word[i] == guess) {
				found = true;
				guessed[i] = guess;
			}
		}
		if(!found) {
			falseWord[mistakes] = guess;
			mistakes += 1;
		}
		win = strchr(guessed, '_');
	}while(mistakes < CHANCE && win != NULL);

	if(win == NULL) {
		printf("\n");
		printWord(guessed, len);
		printf("\n\tCongrats! You have won : %s\n\n", word);
	} else {
		printf("\n");
		printBody(mistakes, body);
		printf("\n\n\tBetter try next time. Word was %s\n\n", word);
	}

	free(body);
	free(word);
	free(guessed);
	return EXIT_SUCCESS;
}

Output:

Output

Be aware you can be hanged!!.

         Rules : 
         - Maximum 6 mistakes are allowed.
         - All alphabet are in lower case.
         - All words are name of very popular Websites. eg. Google
         - If you enjoy continue, otherwise close it.
         Syntax : Alphabet
         Example : a 
        Mistakes :0
         _________
        |         |
        |
        |
        |
        |
        |

        False Letters : None
        _ _ _ _ _ _ _ _ _

        Give me a alphabet in lower case : a
Mistakes :0
         _________
        |         |
        |
        |
        |
        |
        |

        False Letters : None
        _ _ _ _ a _ _ a _
Give me a alphabet in lower case : b
        Mistakes :1
         _________
        |         |
        |        ( )
        |
        |
        |
        |
        False Letters : b
        _ _ _ _ a _ _ a _
Give me a alphabet in lower case : c
        Mistakes :2
         _________
        |         |
        |        ( )
        |        /
        |
        |
        |

        False Letters : bc

        _ _ _ _ a _ _ a _
Give me a alphabet in lower case : q


        Mistakes :3
         _________
        |         |
        |        ( )
        |        /|
        |
        |
        |

        False Letters : bcq

        _ _ _ _ a _ _ a _
Give me a alphabet in lower case : p


        Mistakes :4
         _________
        |         |
        |        ( )
        |        /|\
        |
        |
        |

        False Letters : bcqp

        _ _ _ _ a _ _ a _
Give me a alphabet in lower case : s

        Mistakes :4
         _________
        |         |
        |        ( )
        |        /|\
        |
        |
        |

        False Letters : bcqp

        _ _ s _ a _ _ a _
Give me a alphabet in lower case : d


        Mistakes :5
         _________
        |         |
        |        ( )
        |        /|\
        |        /
        |
        |

        False Letters : bcqpd

        _ _ s _ a _ _ a _
Give me a alphabet in lower case : m
        Mistakes :5
         _________
        |         |
        |        ( )
        |        /|\
        |        /
        |
        |

        False Letters : bcqpd

        _ _ s _ a _ _ a m
Give me a alphabet in lower case : u

        Mistakes :6
         _________
        |         |
        |        ( )
        |        /|\
        |        / \
        |
        |
        Better try next time. Word was instagram

Input Required

This code uses input(). Please provide values below: