Commit fc120e4b authored by Robin Verdenal-Tallieux's avatar Robin Verdenal-Tallieux 👽
Browse files

Setup the pendu git. Version 0.4

parents
### 08-06-2021 ###
New improvements in all of the code. It's working with utf-8 compatibility. new version 0.4.
Now master's version is safe.
### 07-06-2021 ###
Added long char compatibility. Work in progress.
<<<<<<<<<<<<<<<<<<<<<< Jeu du Pendu >>>>>>>>>>>>>>>>>>>>>>
Cloner le dépot:
git clone <nomdépot>
Installer le jeu du pendu:
- nécessite meson
- nécessite hunspell
Configuration:
cd pendu
meson setup builddir
cd builddir
ninja
ninja install
Bon jeu!
#include "functions.h"
wchar_t lireCaractere(char type)
{
wchar_t caractere = 0;
if(type == 'n')
{
wscanf(L"%d", &caractere);
}
else
{
caractere = getwchar();
caractere = towlower(caractere);
}
while (getwchar() != L'\n');
return caractere;
}
long numRandom(long MIN, long MAX)
{
long nombreRandom = 0;
nombreRandom = (rand() % (MAX - MIN + 1)) + MIN;
return nombreRandom;
}
void motRandom(FILE *fichier, wchar_t* mot)
{
wchar_t caractere;
long lignes = FILENMBLIGNES - FILESTARTSKIP - FILEENDSKIP;
long randomNumber = numRandom(0, lignes - 1);
lignes = 0;
while (lignes < (FILESTARTSKIP + randomNumber))
{
caractere = fgetwc(fichier);
if(caractere == L'\n')
{
lignes++;
}
}
unsigned char compte;
do
{
compte = 0;
caractere = 0;
do
{
caractere = fgetwc(fichier);
mot[compte] = caractere;
compte++;
} while(caractere != L'/');
mot[compte-1] = L'\0';
} while (wcschr (mot, L'-'));
}
void addToList(char *liste, char element)
{
unsigned char taille = strlen(liste);
liste[taille] = element;
liste[taille+1] = '\0';
}
_Bool lettreDansMot(char *liste, char lettre)
{
char *verif = NULL;
verif = strchr(liste, lettre);
if(verif != NULL)
{
return 1;
}
else
{
return 0;
}
}
char simplifierLettre(wchar_t lettre)
{
switch (lettre)
{
case L'é':
lettre = L'e';
break;
case L'à':
lettre = L'a';
break;
case L'è':
lettre = L'e';
break;
case L'ê':
lettre = L'e';
break;
case L'ù':
lettre = L'u';
break;
case L'ç':
lettre = L'c';
break;
case L'ï':
lettre = L'i';
break;
case L'ü':
lettre = L'u';
break;
}
return lettre;
}
void simplifierMot(const wchar_t mot[], char motASimp[])
{
wchar_t nouvMot[TAILLEMAX] = {0};
wcscpy (nouvMot, mot);
for (size_t i = 0; i < wcslen(mot); i++)
{
nouvMot[i] = simplifierLettre (nouvMot[i]);
}
wcstombs(motASimp, nouvMot, TAILLEMAX);
}
void reconstituerMot(const wchar_t mot[], const char lettresTrouvees[], wchar_t *nouvMot)
{
wcscpy (nouvMot, mot);
for (size_t i = 0; i < wcslen (nouvMot); i++)
{
if(! lettresTrouvees[i]) nouvMot[i] = L'*';
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
#include <stddef.h>
#include <wctype.h>
#define fichiermots "/usr/share/myspell/dicts/fr_FR.dic"
#define TAILLEMAX 20
#define FILESTARTSKIP 10666
#define FILEENDSKIP 32
#define FILENMBLIGNES 84140
long numRandom(long debut, long fin);
void motRandom(FILE *fichier, wchar_t* mot);
wchar_t lireCaractere(char type);
void addToList(char *liste, char element);
_Bool lettreDansMot(char *liste, char lettre);
void simplifierMot(const wchar_t mot[], char motASimp[]);
char simplifierLettre(wchar_t lettre);
void reconstituerMot(const wchar_t mot[], const char lettresTrouvees[], wchar_t *nouvMot);
#include "main.h"
void Help(char **options, char **description)
{
wprintf(L"\nOptions:\n");
for (size_t i = 0; i < LEN_OPTIONS; i++)
{
wprintf(L"\t%s : %s.\n", options[i], description[i]);
}
}
void Version(void)
{
wprintf(L"\n//// La version du jeu du pendu est: %ls !\n", VERSION);
}
int main(int argc, char** argv)
{
if (setlocale(LC_ALL, "") == NULL)
{
perror("setlocale");
return EXIT_FAILURE;
}
// OPTIONS
char version[] = "--version";
char version_description[] = "Affiche la version";
char help[] = "--help";
char help_description[] = "Affiche l'aide";
char *description[LEN_OPTIONS];
char *options[LEN_OPTIONS];
options[0] = help;
options[1] = version;
description[0] = help_description;
description[1] = version_description;
char continuer = 0;
// On affiche le message de bienvenue
wprintf(WELCOME_MESSAGE);
// On vérifie s'il y a des options
if(argc > 1)
{
if(strcmp(argv[1], options[0]) == 0)
{
Help(options, description);
}
else if (strcmp(argv[1], options[1]) == 0)
{
Version();
}
}
else{
// On lance le jeu
do{
StartPendu();
wprintf(L"\nVoulez-vous rejouer (taper 0 pour quitter et 1 pour rejouer) ? ");
continuer = lireCaractere('n');
} while (continuer);
wprintf(L"Bon vent !\n");
return 0;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
#include <stddef.h>
#include <ctype.h>
#define VERSION L"0.4"
#define LEN_OPTIONS 2
#define WELCOME_MESSAGE L"Bienvenue dans le jeu du pendu !\n\n"\
L"Les règles:\n\t- Les caractères spéciaux comme 'é', 'à' ou 'ç'... sont convertis vers leur équivalent 'e', 'a', 'c'."\
L"\n\t- N'entrez donc que des lettres de l'alphabet."\
L"\n\t- Les mots composés avec '-' sont bannis."\
L"\n\t- Bon jeu !\n"
char StartPendu(void);
char lireCaractere(char type);
project('Pendu', 'c', version : '0.4')
# Language
lang = run_command('echo', '$LANG')
# Dependecies
dir_dico_fr = include_directories('/usr/share/myspell/dicts/')
depend_dico = dependency('hunspell', version : '>=1.0.0')
dico_fr = declare_dependency(include_directories : dir_dico_fr)
executable('pendu', 'main.c', 'pendu.c', 'functions.c', dependencies: [depend_dico, dico_fr], install : true)
#include "functions.h"
char StartPendu(void)
{
// Variables
char nmbCoups = 10, lettreFormatee = 0, motFormate[TAILLEMAX] = {0}, caracteresUtilises[26] = {'\0'}, lettresTrouvees[TAILLEMAX] = {0}, niveau = 0, compte = 0;
wchar_t mot[TAILLEMAX] = {0}, lettreProposee = 0, motReconstitue[TAILLEMAX] = {0};
FILE *fichier = NULL;
// Initialiser le random
srand(time(NULL));
// Mot pioché au hasard
fichier = fopen(fichiermots, "r");
if(fichier == NULL)
{
wprintf (L"\nVous ne possédez pas de fichier .dic ou le chemin est mal indiqué.\n"
L"Vérifiez que vous avez bien un fichier .dic de votre langue installé et spécifiez son emplacemet dans le header functions.h.");
EXIT_FAILURE;
}
motRandom(fichier, mot);
fclose(fichier);
simplifierMot (mot,motFormate);
// Niveau
wprintf(L"\nQuelle difficulté voulez-vous choisir (du plus facile 0 au plus dur 3) ? ");
niveau = lireCaractere('n');
// On initialise le mot à reconstituer et le niveau
nmbCoups = (wcslen(mot) + 10) / (niveau+1);
// Boucle principale
while (nmbCoups > 0)
{
wprintf(L"\f");
// Récupérer l'entrée utilisateur
wprintf(L"\n\nIl vous reste %d coups à jouer.\n", nmbCoups);
wprintf(L"Donnez une lettre : ");
lettreProposee = lireCaractere('l');
lettreFormatee = simplifierLettre (lettreProposee);
// On vérifie que la lettre n'a pas déjà été utilisée
if(lettreDansMot(caracteresUtilises, lettreFormatee))
{
wprintf(L"Attention, vous avez déjà utlisé cette lettre.");
continue;
}
// Ajout aux lettre utilisées
addToList(caracteresUtilises, lettreFormatee);
// On vérifie si elle se trouve dans le mot et dans ce cas on complète les trous
if(lettreDansMot(motFormate, lettreFormatee))
{
wprintf(L"Vous avez vu juste, Le caractère '%c' se trouve dans le mot.\n", lettreFormatee);
for (size_t i = 0; i < wcslen (mot); i++)
{
if(motFormate[i] == lettreFormatee)
{
lettresTrouvees[i] = 1;
}
}
}
else
{
nmbCoups--;
wprintf(L"Désolé, le mot ne contient pas la lettre '%c'.\n", lettreFormatee);
}
// On affiche l'avancée ou si le mot est complétement retrouvé on donne la victoire
compte = 0;
for (size_t i = 0; i < wcslen (mot); i++)
{
compte += lettresTrouvees[i];
}
if(compte == wcslen (mot))
{
wprintf(L"\n");
switch (niveau)
{
case 0:
wprintf(L"Bravo !! C'est un bon début.");
break;
case 1:
wprintf(L"Mes félicitations, tu prends du galon !!!");
break;
case 2:
wprintf(L"Mais nous avons un champion !!! Un grand Bravo !!!!!");
break;
case 3:
wprintf(L"Un grand maitre tu es. La sagesse en toi à jamais. Bravissimo !!!!!!");
break;
}
wprintf(L"\nVous avez trouvé le mot : %ls.\n", mot);
return 1;
}
else
{
reconstituerMot (mot, lettresTrouvees, motReconstitue);
wprintf(L"Le mot secret : %ls \nVous avez déjà utilisé ces lettres: ", motReconstitue);
for (size_t i = 0; i < strlen(caracteresUtilises); i++)
{
wprintf(L"'%c', ", caracteresUtilises[i]);
}
wprintf(L"\b\b.");
if(nmbCoups == 0)
{
wprintf(L"\n\nMince, c'était la dernier tour.\nLe mot était %ls.\nTu as perdu.\n", mot);
}
}
}
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment