Compare commits
11 commits
Author | SHA1 | Date | |
---|---|---|---|
6e1d65a638 | |||
2267eda745 | |||
1a3d0320f6 | |||
a9a45e0512 | |||
7f111867c4 | |||
f1a4c59105 | |||
e3c5b6d318 | |||
ae267a4763 | |||
17faeb85e0 | |||
af22c64d5b | |||
6527dbbe9c |
4 changed files with 64 additions and 34 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
.vscode
|
||||
*.pdf
|
||||
main
|
||||
main.exe
|
||||
|
|
12
.gitlab-ci.yml
Normal file
12
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,12 @@
|
|||
image: gcc
|
||||
|
||||
stages:
|
||||
- build
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- gcc main.c -o pendu
|
||||
artifacts:
|
||||
paths:
|
||||
- pendu
|
|
@ -1,4 +1,6 @@
|
|||
# Pendu
|
||||
Mon premier pendu tout language confondu, s'il y a des approximations tu peux faire une PR 😀
|
||||
|
||||
Pour lancer le pendu : `git clone https://github.com/Mylloon/pendu-C.git && cd pendu-C && gcc main.c -o main && ./main listeMots.txt` devrait fonctionner.
|
||||
Pour lancer le pendu : `git clone https://gitlab.com/Mylloon/penduEnC.git && cd penduEnC && gcc main.c -o main && ./main listeMots.txt` devrait fonctionner.
|
||||
|
||||
Tu peux aussi télécharger l'artéfact de la [dernière pipeline](https://gitlab.com/Mylloon/penduEnC/-/pipelines/).
|
||||
|
|
79
main.c
79
main.c
|
@ -2,14 +2,14 @@
|
|||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int longueurMot(const char mot[]) {
|
||||
int longueurMot(const char mot[]) { // pour connaitre la longueur d'un mot
|
||||
int taille;
|
||||
for(taille = 0; mot[taille] != 0; taille++);
|
||||
|
||||
return taille;
|
||||
}
|
||||
|
||||
char * recuperationMot(const char file[]) {
|
||||
char * recuperationMot(const char file[]) { // pour récupérer un mot aléaotoirement dans un fichier
|
||||
int tailleMaxMot = 25;
|
||||
char * mot = malloc(tailleMaxMot * sizeof(char));
|
||||
|
||||
|
@ -48,63 +48,78 @@ char * recuperationMot(const char file[]) {
|
|||
return mot;
|
||||
}
|
||||
|
||||
char * obfuscation(char mot[], int lettresValidees[], int taille) {
|
||||
int tailleMot = taille * 2;
|
||||
char * motCache = malloc(tailleMot * sizeof(char));
|
||||
int caractereSpecial(char lettre) { // vérification que la lettre n'est pas un caractere special
|
||||
if(lettre == ' ') return 1;
|
||||
if(lettre == '\'') return 1;
|
||||
if(lettre == '-') return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char * obfuscation(char mot[], int lettresValidees[], int taille) { // pour afficher les trous dans le mot
|
||||
int tailleMotCache = taille * sizeof(char) * 2;
|
||||
char * motCache = malloc(tailleMotCache); // x2 pour l'espace entre les "_"
|
||||
int j = 0;
|
||||
for(int i = 0; i < taille; i++) {
|
||||
if(lettresValidees[i] != 1) motCache[j] = '_'; else motCache[j] = mot[i];
|
||||
motCache[j + 1] = ' ';
|
||||
if(lettresValidees[i] != 1) { // pas trouvé
|
||||
if(caractereSpecial(mot[i]) == 0) motCache[j] = '_'; // si c'est pas un caractère spéciale
|
||||
else { // si c'en est un
|
||||
motCache[j] = mot[i];
|
||||
lettresValidees[i] = 1;
|
||||
}
|
||||
} else motCache[j] = mot[i]; // trouvé
|
||||
motCache[j + 1] = ' '; // on rajoute un espace entre les underscores
|
||||
j = j + 2;
|
||||
}
|
||||
for(int i = 0; i < longueurMot(motCache); i++)
|
||||
if(i >= tailleMotCache) motCache[i] = 0;
|
||||
|
||||
return motCache;
|
||||
}
|
||||
|
||||
int lettreDansMot(char mot[], int tailleMot, char lettre[], int lettresValidees[]) {
|
||||
int lettreDansMot(char mot[], int tailleMot, char lettre[], int lettresValidees[]) { // pour vérifier si la lettre est dans le mot
|
||||
int ok = 0;
|
||||
for(int i = 0; i < tailleMot; i++) if(mot[i] == lettre[0]) {
|
||||
lettresValidees[i] = 1;
|
||||
lettresValidees[i] = 1; // note que la lettre a été découverte
|
||||
ok = 1;
|
||||
};
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
int partieGagnee(int lettresValidees[], int taille) {
|
||||
int partieGagnee(int lettresValidees[], int taille) { // pour vérifier si la partie est gagné
|
||||
for(int i = 0; i < taille; i++) if(lettresValidees[i] != 1) return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int jeu() {
|
||||
// mot aléatoire
|
||||
char liste[14] = "listeMots.txt";
|
||||
char * mot = recuperationMot(liste);
|
||||
int tailleMot = longueurMot(mot);
|
||||
int tableauLettresValidees[tailleMot];
|
||||
char * motObfusque;
|
||||
int demandeLettre;
|
||||
char lettre;
|
||||
for(int i = 0; i < tailleMot; i++) tableauLettresValidees[i] = 0;
|
||||
int jeu(const char liste[]) { // déroulement du jeu
|
||||
char * mot = recuperationMot(liste); // mot aléatoire
|
||||
int tailleMot = longueurMot(mot); // longueur du mot
|
||||
int tableauLettresValidees[tailleMot]; // tableau des lettres trouvés par le joueur
|
||||
for(int i = 0; i < tailleMot; i++) tableauLettresValidees[i] = 0; // initialisation de tout le tableau à 0
|
||||
char * motObfusque; // mot avec les lettres pas encore trouvées cachées
|
||||
int demandeLettre; // scanf
|
||||
char lettre; // lettre que le joueur propose
|
||||
short int essaisRestants = 10; // nombre d'essais
|
||||
int finDuJeu = 0; // 0 si partie en cours, 1 si partie terminée
|
||||
|
||||
// lancement jeu
|
||||
short int essaisRestants = 10;
|
||||
int finDuJeu = 0;
|
||||
while(finDuJeu == 0) {
|
||||
motObfusque = obfuscation(mot, tableauLettresValidees, tailleMot);
|
||||
motObfusque = obfuscation(mot, tableauLettresValidees, tailleMot); // récupération du mot a trou
|
||||
printf("\nMot à trouver : %s\n", motObfusque);
|
||||
free(motObfusque);
|
||||
printf("Nombre d'erreurs restantes : %hu\n", essaisRestants);
|
||||
printf("Saisissez une lettre : ");
|
||||
demandeLettre = scanf(" %c", &lettre);
|
||||
demandeLettre = scanf(" %c", &lettre); // demande de la lettre au joueur
|
||||
|
||||
if(demandeLettre == 1) {
|
||||
printf("\n");
|
||||
if(lettre >= 97 && lettre <= 122) lettre = lettre - 32;
|
||||
if(lettre >= 97 && lettre <= 122) lettre = lettre - 32; // capitalisation de la lettre
|
||||
// vérification si lettre dans le mot
|
||||
if(lettreDansMot(mot, tailleMot, &lettre, tableauLettresValidees) == 1) {
|
||||
if(lettreDansMot(mot, tailleMot, &lettre, tableauLettresValidees) == 1) { // vérification lettre dans le mot
|
||||
printf("La lettre %c est dans le mot !\n", lettre);
|
||||
if(partieGagnee(tableauLettresValidees, tailleMot) == 1) {
|
||||
if(partieGagnee(tableauLettresValidees, tailleMot) == 1) { // vérification partie gagnée
|
||||
printf("Le mot est %s\n", mot);
|
||||
return 1;
|
||||
}
|
||||
|
@ -114,11 +129,11 @@ int jeu() {
|
|||
}
|
||||
} else perror("Error");
|
||||
|
||||
// verification plus d'essais restants
|
||||
if(essaisRestants == 0) finDuJeu = 1;
|
||||
if(essaisRestants == 0) finDuJeu = 1; // verification plus d'essais restants
|
||||
}
|
||||
|
||||
printf("\nLe mot était %s\n", mot);
|
||||
free(mot);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -130,8 +145,8 @@ int main(const int argc, const char * argv[]) {
|
|||
return 0;
|
||||
}
|
||||
argv++;
|
||||
if(jeu(argv) == 1) printf("\\o/ Bravo ! Vous remportez la partie ! \\o/\n");
|
||||
else printf("Euh.. sérieux ? Vous perdez la partie.\n");
|
||||
if(jeu(argv[0]) == 1) printf("\\o/ Bravo ! Vous remportez la partie ! \\o/\n");
|
||||
else printf("Vous perdez la partie.\n");
|
||||
} else printf("Veuillez préciser le dictionnaire à utiliser.\n");
|
||||
|
||||
return 0;
|
||||
|
|
Reference in a new issue