Last active
October 31, 2024 22:39
-
-
Save saroj22322/aa2f0849f33736395544c2d341ab3722 to your computer and use it in GitHub Desktop.
Hangman Game in C Programming
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @autor Saroj Tripathi | |
* @name Hangman | |
* https://www.onlinegdb.com/online_c_compiler . Just copy this source code and test it on this online compiler. | |
*/ | |
#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; | |
} |
1-2cloud
commented
Jun 8, 2021
via email
The code works fine in code blocks but not in visual studio code or in Dev
C++.
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
…On Tue, 1 Jun 2021 at 07:21, soul-warrior1692 ***@***.***> wrote:
***@***.**** commented on this gist.
------------------------------
thx for the reply on my email, just wanted to know one more thing, how
will I get to know which encryption is for which website name, as I want to
remove some from my code?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<https://gist.github.com/aa2f0849f33736395544c2d341ab3722#gistcomment-3764827>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AUCXN4TFMURXCSOK4P3CD43TQS7DRANCNFSM4UAKXZLQ>
.
Im using Dev c and im getting an error on line 31 when trying to compile
Code works just fine in vs code, thanks for making my life A LOT easier at uni :>>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment