Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit exercice personnel

Comment l'améliorer ?

    27 juillet 2010 à 13:51:54

    J'avais pensé à l'économie du jeu, mais je voulais l'installer en même temps que le système de drop.
    Avant de débuter mes cours sur la SDL, j'avais fais plusieurs modifs majeures, dont le système de combat, une introduction/tutoriel, un choix de classe au début ...

    Je vous met ce code là, il est en chantier, amusez vous à le finir si ça vous amuse ( :D ). Je ne l'ai jamais testé car pas fini, je sais pas du tout si ça fonctionne :p

    main.c
    #include "main.h"
    
    int main(int argc, char *argv[])
    {
        int niveauDuJoueur = 1, i;
        int valeurDeCombatDuJoueur = 5, valeurDeCombatCastor = 10;
        int valeurDeCombatSerpent = 15, valeurDeCombatLoup = 20, valeurDeCombatOurs = 30;
        int valeurDeCombatDragon = 75, finiLeJeu = 0, resultatCombat = 0;
    
    
        FILE* joueur1 = NULL;
        FILE* equipement_joueur1 = NULL;
        FILE* capacite_joueur1 = NULL;
        FILE* caracteristique_joueur1 = NULL;
    
        if ("/joueur1.txt" == NULL)
        {
            char pseudo[50];
            int choixClasse, choixMenuDemarrage;
    
            printf("Bonjour, jeune aventurier. Ici, on m'appelle le Sage ; j'ai ete envoye pour guider les premiers pas des jeunes gens de ta sorte en ce monde.\n\n"
                "Pour commencer, puis-je connaitre ton nom ? ");
            scanf("%s", pseudo);
            printf("\n*Le Sage semble perdu dans ses pensées* %s ... Tres joli nom ...\nMais treve de bavardages.\n\n"
                "Il existe differents chemins qui te meneront a l'aneantissement du Dragon qui terrorise cette terre ; mais ces chemins passent tous par un choix ... capital, que tu vas devoir faire maintenant.\n"
                "Tu vas devoir decider de suivre l'une ou l'autre de ces deux voies : le Guerrier, toujours en premiere ligne, resistant par nature ; ou le Mage, fragile, mais possedant de puissants sortileges pour venir a bout de ses ennemis.\n"
                "Reflechis bien, car tu ne pourras pas revenir sur les paroles que tu vas prononcer.\n"
                "*silence*\n"
                "Bien, que decides-tu ?"
                "1. Je veux suivre la voie du Guerrier !\n"
                "2. Je souhaite etudier la magie !\n", pseudo);
            scanf("%d", &choixClasse);
    
            if (choixClasse == 1)
            {
                int puissance = 50;
    
                printf("Respectable choix ... Mais sache qu'avant de defier le Dragon, il te faudra apprendre a endurer les pires blessures !\n"
                    "*Le Sage te regarde de haut en bas, puis te fixe. Tu ne sourcilles pas.* Tu as l'air brave ... Soit, je vais t'entrainer.\n"
                    "Tu vois ce loup, la-bas ? Vas l'affronter, et ramene moi un de ses crocs.\n"
                    "Mais avant ... *fouille dans un sac* Prend cette epee, elle te sera utile. Je t'attendrai ici.\n\n"
                    "*Tu ranges fierement ta nouvelle arme dans son fourreau*\n\n"
                    "1. Affronter un Loup\n", pseudo);
                scanf("%d", &choixMenuDemarrage);
    
               if (choixMenuDemarrage == 1)
                {
                    int sortUtilise = 0;
    
                    printf("\n\n\nAlors que tu t'approches lentement, le Loup te remarque, s tourne vers toi ... Tu approches quelque peu, puis tu t'arretes ...\n\n"
                        "Apres quelques secondes, tu sors ton epee de son fourreau, et tu te rues vers lui en hurlant ! Il est temps de déclencher ta premiere attaque !\n"
                        "1. Attaque Rapide - Coute 1 de Puissance.\n");
                    scanf("%d", &sortUtilise);
    
                    if (sortUtilise == 1)
                    {
                        combatGuerrier(5, 2, "Attaque Rapide");
                        //A finir quand Carac du Loup créées
                    }
                    niveauDuJoueur ++;
                    valeurDeCombatDuJoueur += 5;
                    printf("Tu es desormais niveau %d, et as donc %d de valeur de combat.\n\n", niveauDuJoueur, valeurDeCombatDuJoueur);
    
                    system("PAUSE");
                    CLEAR_CONSOLE()
                }
                else
                {
                    printf("Il y a eu un probleme. Retour au menu.\n\n");
    
                    system("PAUSE");
                    CLEAR_CONSOLE()
                }
            }
        }
    
        joueur1 = fopen("joueur1.txt", "r+");
        equipement_joueur1 = fopen("equipement_joueur1.txt", "r+");
        capacite_joueur1 = fopen("capacite_joueur1.txt", "r+");
        caracteristique_joueur1 = fopen("caracteristique_joueur1.txt", "r+");
    
        if (joueur1 != NULL && equipement_joueur1 != NULL && capacite_joueur1 != NULL && caracteristique_joueur1 != NULL)
        {
            do
            {
                switch (menu_depart(pseudo, niveauDuJoueur, valeurDeCombatDuJoueur))
                {
                    case 3:
                        resultatCombat = combat(&valeurDeCombatDuJoueur, &valeurDeCombatCastor);
                        if (resultatCombat < 0)
                        {
                            printf("\n\n\nTu affrontes un Gobelin ... Et tu perds !\nRetourne t'entrainer un peu, tu n'as pas le niveau !\n\n");
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        else
                        {
                            printf("\n\n\nTu affrontes un Gobelin ... Et tu le bats !\n");
                            niveauDuJoueur ++;
                            valeurDeCombatDuJoueur += 5;
                            printf("Tu es desormais niveau %d, et as donc %d de valeur de combat.\n\n", niveauDuJoueur, valeurDeCombatDuJoueur);
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        break;
                    case 4:
                        resultatCombat = combat(&valeurDeCombatDuJoueur, &valeurDeCombatSerpent);
                        if (resultatCombat < 0)
                        {
                            printf("\n\n\nTu affrontes un Orc ... Et tu perds !\nRetourne t'entrainer un peu, tu n'as pas le niveau !\n\n");
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        else
                        {
                            printf("\n\n\nTu affrontes un Orc ... Et tu le bats !\n");
                            niveauDuJoueur ++;
                            valeurDeCombatDuJoueur += 5;
                            printf("Tu es desormais niveau %d, et as donc %d de valeur de combat.\n\n", niveauDuJoueur, valeurDeCombatDuJoueur);
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        break;
                    case 5:
                        resultatCombat = combat(&valeurDeCombatDuJoueur, &valeurDeCombatLoup);
                        if (resultatCombat < 0)
                        {
                            printf("\n\n\nTu affrontes un Troll ... Et tu perds !\nRetourne t'entrainer un peu, tu n'as pas le niveau !\n\n");
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        else
                        {
                            printf("\n\n\nTu affrontes un Troll ... Et tu le bats !\n");
                            niveauDuJoueur ++;
                            valeurDeCombatDuJoueur += 5;
                            printf("Tu es desormais niveau %d, et as donc %d de valeur de combat.\n\n", niveauDuJoueur, valeurDeCombatDuJoueur);
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        break;
                    case 6:
                        resultatCombat = combat(&valeurDeCombatDuJoueur, &valeurDeCombatOurs);
                        if (resultatCombat < 0)
                        {
                            printf("\n\n\nTu affrontes un Cyclope ... Et tu perds !\nRetourne t'entrainer un peu, tu n'as pas le niveau !\n\n");
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        else
                        {
                            printf("\n\n\nTu affrontes un Cyclope ... Et tu le bats !\nBravo, tu as presque fini le jeu, continue un peu jusqu'au "
                                "niveau 10 !\n\n");
                            niveauDuJoueur ++;
                            valeurDeCombatDuJoueur += 5;
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        break;
                    case 7:
                       return 0;
                        break;
                    default:
                        printf("Il y a eu un probleme. Retour au menu.\n\n");
                        system("PAUSE");
                        CLEAR_CONSOLE()
                        break;
    
                }
            } while (niveauDuJoueur < 10);
    
            while (niveauDuJoueur >= 10 && finiLeJeu == 0)
            {
                switch (menu_fin(niveauDuJoueur, valeurDeCombatDuJoueur))
                {
                    case 1:
                        printf("\n\n\nTu affrontes un Ogre ... Et tu le bats !\n");
                        niveauDuJoueur ++;
                        valeurDeCombatDuJoueur += 5;
                        printf("Tu es desormais niveau %d, et as donc %d de valeur de combat.\n\n", niveauDuJoueur, valeurDeCombatDuJoueur);
                        system("PAUSE");
                        CLEAR_CONSOLE()
                        break;
                    case 2:
                        resultatCombat = combat(&valeurDeCombatDuJoueur, &valeurDeCombatDragon);
                        if (resultatCombat < 0)
                        {
                            printf("\n\n\nTu te diriges vers la caverne ou se tapie le Dragon ... Ca y est, tu sens que l'air se rechauffe ... "
                            "Tu cours vers lui en hurlant, ton epee dans les mains ... Et tu te fais massacrer, d'un revers de la patte !\n"
                            "Retourne t'entrainer un peu, tu n'as pas le niveau !\n\n");
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        else
                        {
                            printf("\n\n\nTu te diriges vers la caverne ou se tapie le Dragon ... Ca y est, tu sens que l'air se rechauffe ... "
                            "Tu cours vers lui en hurlant, ton epee dans les mains ... Le combat est rude, tu ne vois plus rien, mais tu sens "
                            "son souffle chaud, alors tu continues a frapper ... Et tu lui perces le coeur !\nBravo, tu as vaincu le terrible "
                            "Dragon, tu as sauve le monde !\n\n");
                            finiLeJeu = 1;
                            system("PAUSE");
                            CLEAR_CONSOLE()
                        }
                        break;
                    case 3:
                        return 0;
                        break;
                    default:
                        printf("Il y a eu un probleme. Retour au menu.\n\n");
                        system("PAUSE");
                        CLEAR_CONSOLE()
                        break;
                }
    
            }
    
            printf("Petit aventurier est devenu Legende ... Bravo a toi !\n\n");
    
            fclose(joueur1);
            return 0;
            }
            else
            {
                printf("Impossible d'acceder aux fichiers.");
    
                return 0;
        }
    }
    


    main.h
    #ifndef DEF_MAIN
    #define DEF_MAIN
    
    #include <stdio.h>
    #include <stdlib.h>
    #define CLEAR_CONSOLE() for(i=0; i<500; i++)\
                                printf("\n");
    
    #endif
    


    menu.c
    #include "menu.h"
    
    int menu_depart(char *pseudo, int *niveauDuJoueur, int *valeurDeCombatDuJoueur)
    {
        int choix = 0, i;
    
    
        do
        {
            printf("\n\nChoisis desormais quel monstre tu veux combattre, %s, mais fais attention, certains sont trop puissants pour toi !\n"
                "Tu es actuellement niveau %d et tu as %d points de combat.\n\n"
                "Entre le numero correspondant.\n"
                "3. Gobelin\n"
                "4. Orc\n"
                "5. Troll\n"
                "6. Cyclope\n"
                "7. Quitter le jeu\n"
                "\n Votre choix ? ", pseudo, niveauDuJoueur, valeurDeCombatDuJoueur);
            scanf("%d", &choix);
    
            CLEAR_CONSOLE()
        } while (choix < 3 || choix > 7);;
    
        return choix;
    }
    
    int menu_fin(int *niveauDuJoueur, int *valeurDeCombatDuJoueur)
    {
        int choix = 0, i;
    
        while (choix < 1 || choix > 3)
        {
            printf("Bravo, tu viens d'atteindre le niveau 10, et as debloque un monstre bonus, le terrible Dragon !\nMais es-tu suffisamment "
                "puissant pour le vaincre ?\n"
                "Entraine-toi sur ces Ogres en attendant. Tu pourras defier le Dragon quand tu te sentiras pret.\n"
                "Tu es actuellement niveau %d et tu as %d points de combat.\n\n"
                "1. S'entrainer contre un Ogre\n"
                "2. Affronter le Dragon\n"
                "3. Quitter le jeu\n"
                "\nQuel est ton choix ? ", niveauDuJoueur, valeurDeCombatDuJoueur);
            scanf("%d", &choix);
    
            CLEAR_CONSOLE()
        }
    
        return choix;
    }
    


    menu.h
    #ifndef DEF_MENU
    #define DEF_MENU
    
    #include <stdio.h>
    #include <stdlib.h>
    #define CLEAR_CONSOLE() for(i=0; i<500; i++)\
                                printf("\n");
    
    int menu_depart();
    int menu_fin();
    
    #endif
    


    combat.c
    #include "combat.h"
    
    int combatMage(int *pointeurMagiePersonnage, int *pointeurDefenseMagiqueAdversaire, char *sortUtilise)
    {
        int tentativeLancer = 1, nombreMaximum = 5;
        const int MIN = 1;
    
        srand(time(NULL));
        tentativeLancer = (rand()%(nombreMaximum-MIN+1))+MIN;
    
        if (*sortUtilise == "Boule de Feu")
            return *pointeurMagiePersonnage * 2 - *pointeurDefenseMagiqueAdversaire;
    
        if (tentativeLancer == 1)
            return tentativeLancer = 1;
        else if (tentativeLancer == nombreMaximum)
        {
            nombreMaximum += 4;
            return *pointeurMagiePersonnage * 4 - *pointeurDefenseMagiqueAdversaire;
        }
        else
        {
            nombreMaximum += 2;
            return *pointeurMagiePersonnage * 3 - *pointeurDefenseMagiqueAdversaire;
        }
    }
    
    int combatGuerrier(int *pointeurForcePersonnage, int *pointeurDefenseAdversaire, char *sortUtilise)
    {
        int tentativeLancer = 1, nombreMaximum = 5;
        const int MIN = 1;
    
        srand(time(NULL));
        tentativeLancer = (rand()%(nombreMaximum-MIN+1))+MIN;
    
        if (*sortUtilise == "Attaque Rapide")
            return *pointeurForcePersonnage * 2 - *pointeurDefenseAdversaire;
    
        if (tentativeLancer == 1)
            return tentativeLancer = 1;
        else if (tentativeLancer == nombreMaximum)
        {
            nombreMaximum += 4;
            return *pointeurForcePersonnage * 4 - *pointeurDefenseAdversaire;
        }
        else
        {
            nombreMaximum += 2;
            return *pointeurForcePersonnage * 3 - *pointeurDefenseAdversaire;
        }
    }
    


    combat.h
    #ifndef DEF_COMBAT
    #define DEF_COMBAT
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int combatMage(int *pointeurMagiePersonnage, int *pointeurDefenseMagiqueAdversaire, char *sortUtilise);
    int combatGuerrier(int *pointeurForcePersonnage, int *pointeurDefenseAdversaire, char *sortUtilise);
    
    #endif
    


    PS : j'ai changé les noms des mobs dans le texte affiché, mais pas dans le nom des variables, faites-y attention :)
    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2010 à 13:55:05

      bon je suis tout a fais d'accord avec vous mais je pense que vous oubliée l'essetiel : sauvegarder/charger

      oui pouvoir arreter à un endroit et pouvoir recommencer au meme endroit soit des sauvegarde automatique soit demander au joueurs si il veux sauvegarder
      • Partager sur Facebook
      • Partager sur Twitter
        27 juillet 2010 à 13:55:47

        D'où mon introduction des fichiers dans ma version pas terminée :)
        • Partager sur Facebook
        • Partager sur Twitter
          27 juillet 2010 à 13:56:08

          Tu devrais utiliser les éléments que je t'ai crée, l'experience et aussi la structure qui te permet de passer dans les fonctions sans alourdir les prototypes de fonctions de centaines de variables^^
          • Partager sur Facebook
          • Partager sur Twitter
            27 juillet 2010 à 13:56:15

            Je suis pas fan de tous ses pointeurs :o^^
            • Partager sur Facebook
            • Partager sur Twitter
            http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
              27 juillet 2010 à 13:57:43

              Ah mais ça je l'ai fait y'a un jour ou deux, depuis je m'axe sur le cours de M@teo, donc ce que tu lis là je n'y ai pas touché depuis deux jours ^^'
              Libre à toi de rajouter tes éléments, de toute façon je rajouterai ces éléments dans le jeu en SDL =D
              • Partager sur Facebook
              • Partager sur Twitter
                27 juillet 2010 à 14:00:30

                Citation : qnope

                Je suis pas fan de tous ses pointeurs :o^^


                D'ou l'utilisation de structure !! :diable:
                *retourne sur son projet c++*
                • Partager sur Facebook
                • Partager sur Twitter
                  27 juillet 2010 à 14:17:04

                  Citation : Minimas

                  #define CLEAR_CONSOLE() for(i=0; i<500; i++)\
                                              printf("\n");
                  

                  Bonjour,

                  Il est inélégant d'utiliser une macro pour cela, et il est extrêmement inélégant que la macro modifie une variable qui n'est pas en paramètre. La solution normale est:
                  void clearConsole(void)
                  {
                      int i;
                      for(i = 0; i < 500; i++)
                          putchar('\n');
                  }
                  


                  Il est aussi inélégant (et inutile) d'inclure <stdio.h> et <stdlib.h> dans un fichier comme main.h et menu.h. Il vaut mieux faire des inclusions là où c'est nécessaire, et pas ailleurs.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juillet 2010 à 14:23:15

                    Merci de ces précisions, cependant j'ai pris l'habitude d'inclure <stdio.h> et <stdlib.h> dans tous mes fichiers, cela ne coûte rien et me permet d'éviter un plantage dans le cas d'une utilisation non-prévue d'une de ces bibliothèques :)

                    EDIT : Je pensais à une chose : pourquoi ne pas faire un mélange STR/RPG ? Je m'explique : on prend comme base la prise de la ville de Gondolin par le Mal, le joueur choisit entre Bien ou Mal pour jouer ... Et à chaque fois qu'un héros du Mal rencontre un héros du Bien, on passe en mode RPG, le joueur contrôle son héros, a plusieurs sorts différents à lancer ... Qu'en dites vous ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 juillet 2010 à 21:44:06

                      Up par rapport à mon edit et puis ... Si je vous dis C++, vous suivez toujours ? :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 juillet 2010 à 22:09:16

                        C ++ différent comme projet :p

                        Mais a par la gestion du langage pour lequel tu risques d'avoir certains problème du a ton niveau actuel (mais d'un coter tant mieux, c'est bête de faire du par coeur :p) ça n'apporte pas vraiment de différence :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 août 2010 à 10:54:35

                          Je peux utiliser des bibliothèques différentes en C++, c'est surtout ça qui m'attire en fait ...
                          http://jeux.developpez.com/bibliotheques/

                          A propos, a-t-on besoin d'une bibliothèque de chaque catégorie présentée ici (API graphique, Moteur de jeu, Moteur graphique, Interface graphique, Moteur physique, Bibliothèque réseau, Bibliothèque audio, GPGPU, Vidéo, Script) pour développer un jeu ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 août 2010 à 12:16:58

                            Normalement, une bibliothèque graphique a déja le moteur etc inclu.

                            Enfin je crois, la SDL fonctionne comme ça du moins
                            • Partager sur Facebook
                            • Partager sur Twitter
                            http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
                              1 août 2010 à 12:19:13

                              Donc si je code avec OpenGL, j'ai pas besoin de prendre autre chose dans la liste ? Dans ce cas, pourquoi une telle liste ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 août 2010 à 12:23:34

                                Si tu codes avec open GL, je te conseil de t'entrainer d'abord avec la SDL et tout le monde te le dira, il te faudra en plus un bon niveau en maths(vecteur etc)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
                                  6 août 2010 à 3:45:25

                                  OpenGL, c'est très bas niveau. Il faut parfois se compliquer pas mal la vie avant d'arriver à pouvoir faire quelques petites choses assez jolies. Si tu veux te lancer dans la 3D, il vaut peut être mieux utiliser dans un premier temps un moteur 3D tel que Ogre ou Irrlicht.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 août 2010 à 11:04:53

                                    Oki merci...

                                    J'ai plusieurs projets en cours notamment en PHP, donc c'est un peu compliqué en ce moment pour moi de continuer cet exercice ^^
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Petit exercice personnel

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown