Partage
  • Partager sur Facebook
  • Partager sur Twitter

HS trainer !

    9 avril 2006 à 14:24:39

    Salut à tous, voila j'ai créer un jeu avec ce que l'on dispose comme cours, il s'amélirera par la suite. Les bugs qui apparaissent sont :
    - En plein écran, ça rame à mort
    - La fonction du Plus ou Moins, qui charge un chiffre au hasard, ne fonctionne pas bien, vous verrez par vous même.

    PS : Le bouton insert sert à afficher la souris.

    Fichier main.c :

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include "prototypes.h"
    #define DISTANCE 3
    #define VITESSE 1
    #define COINHGX 68
    #define COINHDY 10
    #define COINBGY 42
    #define COINBDX 104
    #define LARGEUR 800
    #define HAUTEUR 600

    int main(int argc, char *argv[])
    {

        SDL_Surface *ecran = NULL, *img = NULL, *fond = NULL, *imgFond = NULL;
        SDL_Rect positionImg, positionFond, deplacement;
        SDL_Event event;
        int continuer = 1, hs = 1;
        long clicX = 0, clicY = 0;
        const long MAXX = LARGEUR - 110, MINX = 0;
        const long MAXY = HAUTEUR - 143, MINY = 0;


        SDL_Init(SDL_INIT_VIDEO);

        SDL_WM_SetIcon(IMG_Load("icone.jpg"), NULL); // Chargement de l'icone
        ecran = SDL_SetVideoMode(LARGEUR, HAUTEUR, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); // Ouverture de la fenêtre
        SDL_WM_SetCaption("Counter Strike Source - HS trainer - By W@Rn3R$hoO†", NULL)// Initialisation du titre

        positionFond.x = 0;
        positionFond.y = 0;

        fond = SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));


        imgFond = IMG_Load("fond.gif");
        positionFond.x = ecran->w - imgFond->w - 1;
        positionFond.y = ecran->h - imgFond->h - 1;
        SDL_BlitSurface(imgFond, NULL, ecran, &positionFond);


        SDL_EnableKeyRepeat(10, VITESSE);
        SDL_ShowCursor(SDL_DISABLE);
        srand(time(NULL));

        while (continuer)
        {
            if(hs)
            {
            positionImg.x = 0;
            positionImg.y = 0;
            img = IMG_Load("ct1.gif");
            SDL_WarpMouse(ecran->w / 2, ecran->h / 2);
            positionImg.x = (rand() % (MAXX - MINX + 1)) + MINX;
            positionImg.y = (rand() % (MAXY - MINY + 1)) + MINY;

            hs = 0;
            }

            SDL_WaitEvent(&event);

            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                    case SDLK_ESCAPE: // Flèche haut
                            continuer = 0;
                            break;
                    case SDLK_INSERT:
                            SDL_ShowCursor(SDL_ENABLE);
                            break;
                    }
                    break;
                case SDL_MOUSEMOTION:
                    deplacement.x = positionImg.x + ((ecran->w / 2) - event.motion.x);
                    deplacement.y = positionImg.y + ((ecran->h / 2) - event.motion.y);
                    break;
                case SDL_MOUSEBUTTONDOWN:
                    switch(event.button.button)
                    {
                    case SDL_BUTTON_LEFT:
                        clicX = event.motion.x;
                        clicY = event.motion.y;
                        if((clicX >= (positionImg.x + COINHGX) && clicX <= (positionImg.x + COINBDX)) && (clicY >= (positionImg.y + COINHDY) && clicY <= (positionImg.y + COINBGY)))
                        {
                        hs = 1;
                        }
                    break;
                    }
                    break;


            }

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        if(hs)
        {
        SDL_BlitSurface(img, NULL, ecran, &positionImg);
        }

        SDL_BlitSurface(img, NULL, ecran, &deplacement);
        SDL_BlitSurface(imgFond, NULL, ecran, &positionFond);
        SDL_Flip(ecran);
        }

        SDL_FreeSurface(imgFond);
        SDL_FreeSurface(img);
        SDL_FreeSurface(fond);
        SDL_FreeSurface(ecran);
        SDL_Quit();

        return EXIT_SUCCESS;
    }



    Fichier compiler .exe :

    HS trainer
    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2006 à 14:32:45

      le lien vers l'.exe ne marche pas
      edit : ah si c'est bon :lol:
      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2006 à 16:37:17

        Alors personne n'à d'idée ? On dirait que la création du chiffre aléatoire ne se fais pas après la première passe :(
        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2006 à 16:41:51

          Salut

          il faut mettre un seul
          ==> srand(time(NULL)); <==

          et le mieux c est de le mettre avant ta boucle while
          A+
          • Partager sur Facebook
          • Partager sur Twitter
            9 avril 2006 à 16:50:46

            Merci ! J'essaye cela tout de suite ! :)

            Edit : Nikel ! Merci beaucoup ! Est ce que quelqu'un sait comment calculer le temps qu'il se passe, entre le moment ou i = 1 (premier frag), et i = 20 (dernier frag), pour faire un calcul de point. Merci d'avance !
            • Partager sur Facebook
            • Partager sur Twitter
              9 avril 2006 à 16:58:12

              Citation : W@Rn3R$HoO†

              Merci ! J'essaye cela tout de suite ! :)

              Edit : Nikel ! Merci beaucoup ! Est ce que quelqu'un sait comment calculer le temps qu'il se passe, entre le moment ou i = 1 (premier frag), et i = 20 (dernier frag), pour faire un calcul de point. Merci d'avance !



              Il faut utiliser SDL_GetTicks qui te dit depuis combien de temps le programme est lancé.
              • Partager sur Facebook
              • Partager sur Twitter
                9 avril 2006 à 18:17:59

                Merci à toi, j'essairais !

                Sinon j'ai l'intention de faire un menu, le problème est que lorsque le score arrive à 20 (20 head shot), je veux que le code remonte au menu, mais ça plante o_O

                Edit : avec les switch, le problème est le même, essai...

                Mon code :

                #include <stdlib.h>
                #include <stdio.h>
                #include <SDL/SDL.h>
                #include <SDL/SDL_image.h>
                #include "prototypes.h"
                #define DISTANCE 3
                #define VITESSE 1
                #define COINHGX 68
                #define COINHDY 10
                #define COINBGY 42
                #define COINBDX 104
                #define LARGEUR 1000
                #define HAUTEUR 740
                #define SCORE 2
                #define MENU 1
                #define JEU 2

                int main(int argc, char *argv[])
                {

                    SDL_Surface *ecran = NULL, *img = NULL, *fond = NULL, *imgFond = NULL, *viseur = NULL, *imgChoix = NULL;
                    SDL_Rect positionImg, positionFond, deplacement, positionViseur, positionChoix;
                    SDL_Event event, eventChoix;
                    int continuer = 1, hs = 1, play = 0, choix = 1, jouer = 1, score = 0, section = MENU;
                    long clicX = 0, clicY = 0;
                    const long MAXX = LARGEUR - 110, MINX = 0;
                    const long MAXY = HAUTEUR - 143, MINY = 0;


                    SDL_Init(SDL_INIT_VIDEO);

                    SDL_WM_SetIcon(IMG_Load("icone.jpg"), NULL); // Chargement de l'icone
                    ecran = SDL_SetVideoMode(LARGEUR, HAUTEUR, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); // Ouverture de la fenêtre
                    SDL_WM_SetCaption("Counter Strike Source - HS trainer - By W@Rn3R$hoO†", NULL)// Initialisation du titre



                while(jouer)
                {
                switch (section)
                {
                    case MENU:
                    SDL_ShowCursor(SDL_ENABLE);
                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                    imgChoix = IMG_Load("css.jpg");
                    positionChoix.x = 0;
                    positionChoix.y = 0;
                    SDL_BlitSurface(imgChoix, NULL, ecran, &positionChoix);
                    SDL_Flip(ecran);

                while(choix)
                {
                    SDL_WaitEvent(&eventChoix);

                        switch(eventChoix.type)
                        {
                            case SDL_QUIT:
                                choix = 0;
                                jouer = 0;
                                break;
                            case SDL_KEYDOWN:
                                switch(eventChoix.key.keysym.sym)
                                {
                                case SDLK_e:
                                        choix = 0;
                                        jouer = 0;
                                        break;
                                case SDLK_n:
                                        choix = 0;
                                        section = JEU;
                                        break;
                                }
                                break;
                        }

                }

                choix = 1;
                    break;

                /* Début du jeu */

                    case JEU:

                    fond = SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

                    positionFond.x = 0;
                    positionFond.y = 0;
                    imgFond = IMG_Load("ak.gif");
                    positionFond.x = ecran->w - imgFond->w - 1;
                    positionFond.y = ecran->h - imgFond->h - 1;
                    SDL_BlitSurface(imgFond, NULL, ecran, &positionFond);

                    viseur = IMG_Load("viseur.gif");
                    positionViseur.x = ecran->w / 2 - viseur->w / 2;
                    positionViseur.y = ecran->h / 2 - viseur->h / 2;
                    SDL_BlitSurface(viseur, NULL, ecran, &positionViseur);


                    SDL_EnableKeyRepeat(10, VITESSE);
                    SDL_ShowCursor(SDL_DISABLE);
                    srand(time(NULL));

                    while (continuer)
                    {
                        if(hs)
                        {
                        positionImg.x = 0;
                        positionImg.y = 0;
                        img = IMG_Load("ct1.gif");
                        SDL_WarpMouse(ecran->w / 2, ecran->h / 2);
                        positionImg.x = (rand() % (MAXX - MINX + 1)) + MINX;
                        positionImg.y = (rand() % (MAXY - MINY + 1)) + MINY;

                        hs = 0;
                        }

                        SDL_WaitEvent(&event);

                        switch(event.type)
                        {
                            case SDL_QUIT:
                                continuer = 0;
                                jouer = 0;
                                break;
                            case SDL_KEYDOWN:
                                switch(event.key.keysym.sym)
                                {
                                case SDLK_ESCAPE:
                                        continuer = 0;
                                        jouer = 0;
                                        break;
                                case SDLK_INSERT:
                                        SDL_ShowCursor(SDL_ENABLE);
                                        break;
                                }
                                break;
                            case SDL_MOUSEMOTION:
                                deplacement.x = positionImg.x + ((ecran->w / 2) - event.motion.x);
                                deplacement.y = positionImg.y + ((ecran->h / 2) - event.motion.y);
                                break;
                            case SDL_MOUSEBUTTONDOWN:
                                switch(event.button.button)
                                {
                                case SDL_BUTTON_LEFT:
                                    clicX = event.motion.x;
                                    clicY = event.motion.y;
                                    if((clicX >= (positionImg.x + COINHGX) && clicX <= (positionImg.x + COINBDX)) && (clicY >= (positionImg.y + COINHDY) && clicY <= (positionImg.y + COINBGY)))
                                    {
                                    hs = 1;
                                    score++;
                                    if(score == SCORE)
                                    {
                                    continuer = 0;
                                    section = MENU;
                                    }
                                    }
                                break;
                                }
                                break;


                        }

                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

                    if(continuer == 1)
                    {
                    if(hs)
                    {
                    SDL_BlitSurface(img, NULL, ecran, &positionImg);
                    }

                    SDL_BlitSurface(img, NULL, ecran, &deplacement);
                    SDL_BlitSurface(imgFond, NULL, ecran, &positionFond);
                    SDL_BlitSurface(viseur, NULL, ecran, &positionViseur);
                    }
                    SDL_Flip(ecran);
                    }



                    break;
                }
                }

                    SDL_FreeSurface(imgFond);
                    SDL_FreeSurface(img);
                    SDL_FreeSurface(fond);
                    SDL_FreeSurface(ecran);
                    SDL_FreeSurface(viseur);
                    SDL_FreeSurface(imgChoix);
                    SDL_Quit();
                    return EXIT_SUCCESS;
                }

                • Partager sur Facebook
                • Partager sur Twitter
                  9 avril 2006 à 18:21:17

                  Ce que je te conseil de faire, c'est de faire un switch dans ta boucle principale contenant chaque partie de ton jeu dans un case différent :
                  -Le menu
                  -Le jeu
                  -Le tableau des scores
                  par exemple...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 avril 2006 à 18:39:44

                    J'ai éditer mon code avec les switch, aucun effets :(

                    est-ce que le fait de mettre plusieur variable d'évènements peut faire bugger le programme ?

                    PS : réédité, le code reviens au menu, mais dès que la touche n est enfoncé, le programme planté...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 avril 2006 à 20:03:42

                      Dans ton code :
                      déclarer section en tant que char
                      char section[5] = "menu";


                      et met plutot

                      section = 'JEU';


                      et dans tes switch :

                      case 'JEU';


                      et la meme chose avec MENU

                      A+
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 avril 2006 à 20:15:43

                        On ne peut pas mettre de chaine de caractères en switch, que me dis Code::block lors de la compilation.

                        C'est vrai que ce n'était pas très cohérent, a-tu vu que JEU et MENU n'était pas des variables, mais des chiffres (#define) ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 avril 2006 à 20:35:51

                          arf desole j avais pas vu

                          mais je pense avoir trouvé :

                          tu ne réinitialise pas ta variable continuer a 1

                          il faudrai que tu place continuer = 1; dans le menu
                          A+
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 avril 2006 à 20:40:06

                            OMG I love youuuuuuuuuuuuuuu !! Ca marche nikel merci encore ! :lol:
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 avril 2006 à 20:42:31

                              de rien
                              bon courage pour la suite
                              A+
                              Ps : OMG ?? ça veut dire quoi ??

                              PS 2 : j'ai fait un tour sur ton site c pas mal mais l'affichage des news c'est pas encore ca(1280*1024).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 avril 2006 à 20:54:07

                                Je sais mais je ne passe plus de temps sur mon site, je n'ai pas envie de l'optimiser :-°

                                OMG = Oh My God :p

                                Quand je donne mon .exe à des amis, il leur dit que des composants sont introuvable, ou quelque chose comme ça. Comment y remédier ?

                                PS : même avec les dll ça ne marche pas :(
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 avril 2006 à 12:58:56

                                  Oublie pas les bmp ^^ J'ai voulu télécharger ton projet, il n'y a que le .exe donc la SDL déploie son parachute (j'aime bien ce terme ^^) parceque les images ne peuvent être chargées...
                                  Si tu pouvais mettre un .zip ou .rar avec tout le projet...
                                  (Si tu as suivi ce qu'à conseillé M@téo tu dois avoir un dossier par projet, avec les sources, les .dll, les images et l'executable, fais un .zip ou .rar du dossier contenant tout pour l'envoyer, tout l'utile pour lancer le jeu sera dedans ;) )
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 avril 2006 à 13:25:57

                                    C'est fait ! Ce fichier sera courament mis à jour, car mon jeu ne demande qu'à s'améliorer ! Les fichiers source sont fournit, vous pouvez donc faire vos modifications personelles :)

                                    Cependant, j'avais envoyer le zip à un amis, mais il n'a pas réussi à le faire fonctionner, dites moi si cela ne fonctionne pas chez vous :

                                    HS Trainer.zip (694KB)

                                    PS : Les scores sont affichés dans le fichier scores.txt ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      10 avril 2006 à 15:09:04

                                      Je l'ai essayé, ça marche très bien chez moi, par contre tu as 2 .exe, un "projet1.exe" et un "SDLapp.exe", t'es sur qu'il a bien ouvert "projet1.exe" ton pote?
                                      Sinon sympa comme jeu par rapport au niveau des cours, ça destabilise juste un peu que ce soit le CT qui bouge et non le viseur mais après tout même si l'illusion du contraire y est donnée par le décors alentour, dans tous les FPS c'est pareil... ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        10 avril 2006 à 15:13:05

                                        Vi ! Tu crois que je peux me faire embaucher chez Valve ? :euh: Je rigole bien sûr !
                                        Ce que je compte faire, c'est avoir la gestion de la sensibilité de la souris, avoir un snipe ou une ak, choisir le nombre de mort, mettre un décor (pour l'instant ça rame trop :( ), choisir la difficulté, qui ne sera en fait que la taille de la cible, et enfin, ce que je viens de terminer, un mode oneshot, tu tires qu'une seule fois !

                                        Pour l'instant je suis bloqué sur le fichier .ini, je n'arrive pas à lire des valeurs chiffrés, et j'ai d'ailleur ouvert un topic là-dessu.

                                        Je vais en vours, a+
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          11 avril 2006 à 18:05:28

                                          Mise à jour assez grosse de mon jeu, si vous voyez des buggs, n'hésitez pas ;)

                                          PS : Le viseur avec le scout fait rammer :(

                                          Le lien : HS Trainer.zip (1.08MB)
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          HS trainer !

                                          × 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