RPGEN, Profil RP

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Xilax

Membre
Sep 14, 2016
7
0
1
1474059163-rpgen-v1.png
Salut !​


Ayant commencer le C aujourd'hui, j'ai fait un petit programme, que je trouve sympa (même si je doute de son utilitée après coup lol), qui permet, de créer un profil pour un RP du genre RP sur forum (demande des infos de base donc, sauvegarder sur un fichier .txt à la fin de l'utilisation du programme, fin prêt pour être C/C sur le forum sur lequel vous jouer !).



Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) // Équivalent de int main()
{//Programme complet
//Fonction Lire
int lire(char *chaine, int longueur)
{
    char *positionEntree = NULL;
    if (fgets(chaine, longueur, stdin) != NULL)  
    {
        positionEntree = strchr(chaine, '\n'); 
        if (positionEntree != NULL) 
        {
            *positionEntree = '\0'; 
        }
        return 1; 
    }
    else
    {
        return 0; 
    }
}
//Stockages Variables RP
	  int barreDeVie = 100, ageDuJoueur = 500; //Vie & âge en INT 
	  unsigned long gold = 0; // Argent du perso en LONG (positif only) (régler d'office)
	  unsigned char niveau = 1; // level du perso en CHAR (positif only)
	  char age[15] = "200";
	  char nom[30] = "210"; // nom du perso (CHAR en TEXTE)
	  char prenom[50] = "220"; // prénom du perso (CHAR en TEXTE)
	  char histoire[254] = "230"; // Histoire du perso
	  char race[50] = "240"; // Race du perso
//Save perso RP
    FILE* fichier = NULL;
    fichier = fopen("RPGEN 1.0 - Perso.txt", "w+");
    if (fichier != NULL) 
	{
//Créateur de perso RP:
	printf("/!\\ Ne pas utiliser d'accents /!\\\n\n");	
	printf("Nom: \n"); //affiche Nom:
    lire(nom, 30); //L'utilisateur entre le nom de son perso (qui vas se stocker dans la variable "nom")
	printf("\nPrenom: \n");
    lire(prenom, 50);
	printf("\nRace: \n");
    lire(race, 50);
	printf("\nAge: \n");
	lire(age, 15);
	printf("\nHistoire (en 253 caracteres ou moins): \n");
    lire(histoire, 254);
	printf("Sauvegarde en cours...");
//Fiche perso RP finie
	printf("\n\n\n_________________\nFiche RP \n"); // Cette instruction affiche "Fiche RP" à l'écran
	printf("Nom: %s %s \n", prenom, nom); //affiche une variable CHAR (ou unsigned CHAR)
	printf("Race: %s \n", race);
	printf("Niveau: %ld \n", niveau); // %ld marche aussi pour les variables CHAR (numérique), %s pour les CHAR TEXTE
	printf("Age: %s ans \n", age); //pour les variables en FLOAT ou DOUBLE, on utilise %f
	printf("Histoire: \n%s \n", histoire);
	printf("HP: %d \n", barreDeVie); //affiche une variable INT (ou unsigned INT)
	printf("Golds: %ld Or \n",gold); //affiche une variable LONG (ou unsigned LONG)
//Sauvegarder
	fprintf(fichier, "Fiche RP crée via RPGEN 1.0 by Xilax\n");
	fprintf(fichier, "/!\\ ATTENTION /!\\\n");
	fprintf(fichier, "Renommez le fichier .txt ou il sera réinitialiser au prochain lancement du programme\n\n");
	fprintf(fichier, "Nom: %s %s \n", prenom, nom); //écrit une variable CHAR (ou unsigned CHAR) daans le fichier
	fprintf(fichier, "Race: %s \n", race);
	fprintf(fichier, "Niveau: %ld \n", niveau); // %ld marche aussi pour les variables CHAR (numérique), %s pour les CHAR TEXTE
	fprintf(fichier, "Age: %s ans \n", age); //pour les variables en FLOAT ou DOUBLE, on utilise %f
	fprintf(fichier, "Histoire: \n%s \n", histoire);
	fprintf(fichier, "HP: %d \n", barreDeVie); //écrit une variable INT (ou unsigned INT)
	fprintf(fichier, "Golds: %ld Or", gold);
    fclose(fichier);
    }
    else
    {
        printf("Impossible de sauvegarder !"); 
    }
//Magic-Trick
	char magictrick[] = "a";
	printf("\n__________________\n\nAppuyer sur n'importe qu'elle touche puis sur Enter pour fermer le createur de perso RP\n");
	scanf("%s", &magictrick);
    return 0;
}


>>>Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!<<<​


PS: Si quelqu'un à des idées et/ou peut m'aider en C, je suis toujours preneur d'un peu d'aide pour m'expliquer mes erreurs, et comment faire mieux ^^ (mp si vous voulez Skype)
 

Attachments

  • RPGEN 1.0 By Xilax.exe
    259.7 KB · Views: 0
Last edited:

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
J'avais écris un truc un peu long avec des phrases puis je l'ai perdu donc je vais faire plus court :mdr1:.

Du coup voila quelques conseils que je pourrais donner :
- Transforme tes variables barreDeVie et ageDuJoueur en uint car elles ne peuvent etre negatives (vieMinimum = 0, ageMinimum = 0).
- A la limite tu peux reduire la taille de tes int/uint si tu veux economiser quelques bits (Et que tu veux pas un perso ultra vieux)
- D'un point de vue algo, tu peux peut etre demander les variables PUIS ouvrir ton fichier (Et proposer un autre choix si le fichier est deja utilise).
- Autoriser des tailles d'histoires sur mesures.
 

Syn'

Membre
Apr 27, 2012
38
1
313
28
Heureusement qu'a epitech on a une norme, j'aimerais pas coder de cette manière *_*
 

Xilax

Membre
Sep 14, 2016
7
0
1
Effectivement, aucune des infos demandée ne pouvant être négative, j'ai passé toutes mes variables en unsigned, bien vu ^^


Pour la vie, et l'âge, c'est mon expérience en RP forum qui me fait dire qu'une varible int, c'est adapté (j'ai vu plus d'une fois des persos "vieux comme le monde" lol). Après, oui, sur un RP "classique", rare que la vie du perso dépasse 255, je pourrais passer la vie en uchar, mais une fois de plus, si c'est le même perso qui fait plusieurs RP, il est possible qu'il dépasse les 255.


Ensuite, au niveau du nom du fichier, je voulais le faire différement (il se crée à la fin, une fois que toutes les infos ont été demandée), mais impossible de réussir à mettre une variable dans le nom du fichier...


Code:
FILE* fichier = NULL;
    fichier = fopen("RPGEN 1.0 - %s %s .txt", "w+", prenom, nom);
    if (fichier != NULL)
{
 }
    else
    {
        printf("Impossible de sauvegarder !");
 }
	{


Il doit me manquer quelque chose pour que sa fonctionne, ou je fait pas quelque chose correctement, mais je ne trouve pas quoi :/


Et enfin, pour le texte, je ne sais actuellement qu'utiliser des variables char pour stocker du texte, du coup, je sais pas encore comment faire sauter la limite des 255 caractères (et pour le moment, toutes mes recherches se sont révélée infructueuse, même si j'ai une piste lol).


Edit:
En tout cas merci pour les pistes
Syn', si tu parle de la "mise en page", chez moi sa ressort propre :x
Et puis, j'fait sa tout seul, j'ai pas un bahut derrière ^^'
 
Last edited:

Blowa

Membre actif
Jun 8, 2014
175
55
944
Beijing
github.com
Discord
Blowa#1337
Code:
FILE* fichier = NULL;

if ((fichier = fopen("RPGEN 1.0 - Perso.txt", "w+")) == NULL)
   return (EXIT_FAILURE);

plz :-(

Faut partir du principe quand on dev quelque chose que notre utilisateur est un débile, du coup, faut lui faire des pages d'aide.
(UNIX -h || --help)

J'aurais mit :
- Personnage généré dans un fichier (existant ou non à gérer) à passer en paramètre
- Fonction main avec juste un check de tes args puis appel de ta sous fonction principale
- Static sur tes variables lues dans un seul fichier, const pour celles qui sont à valeur fixes (d'ailleurs INT sur la barre de vie si elle vaut 100 autant la mettre en uint_8t)
- Allocation dynamique de tes variables en fonction du retour de ton fgets (better choice si tu veux une bonne gestion des variables liées à ton personnage)
- Economie de lignes en checkant directement tes retours de fonction comme ci-dessus

Quelques règles de bases qui rendront ton code bien plus propre, lisible quand tu fais du dev sur des gros projets

Et un autre petit conseil, quand tu dev, met toi à une norme de programmation (celle d'Epitech et donc 42 aussi c'est une bonne norme pour s'introduire dans de la programmation clean)

N'hésite pas à me mp si tu as des questions sur le C et la programmation en général

(Par contre le %s de printf c'est un pointeur sur char pas un simple char :p)

Enjoy !
 
Last edited: