Petit jeu de skill !

Discussions autour des nouvelles technologies : matériel informatique, sites internet, jeux, réseaux ... .
Répondre
LoDSmooth
Messages : 167
Enregistré le : 29 avr. 2011, 20:31

Petit jeu de skill !

Message par LoDSmooth » 26 févr. 2013, 21:36

Salut !

Je viens de finir un petit jeu que j'ai programmé en C !

J'aimerais bien que des personnes le test pour voir si il fonctionne sur un autre pc. Et aussi pour avoir votre avis ^^.
Téléchargez ici (à peine 1Mo)

Il suffit d'extraire quelque part et d'ouvrir le .exe

pour info j'ai fais 40/40 en 19.73 secondes =p


EDIT : Ici la version non buggée En fait le temps décomptait dès qu'on lançait le jeu, maintenant juste à partir de quand on appuie sur "commencer"
Modifié en dernier par LoDSmooth le 26 févr. 2013, 23:15, modifié 2 fois.

Avatar du membre
mrboo
Messages : 1173
Enregistré le : 13 nov. 2010, 17:34
Localisation : Nord - Lens

Re: Petit jeu de skill !

Message par mrboo » 26 févr. 2013, 21:57

Il fonctionne :-)
mrboo since 2009 - Rédacteur Urban Terror France
Follow me on Twitter !

Avatar du membre
fandesandro
Messages : 3048
Enregistré le : 28 mars 2011, 19:18
Localisation : Angers

Re: Petit jeu de skill !

Message par fandesandro » 26 févr. 2013, 22:01

Pour une première c'est pas mal, un petit menu pour commencer le jeu (et recommencer à la fin) ça serait pas mal.
Tu t'attends à quoi comme retour ici ? Juste des scores ?

Hésite pas à partager ton code, ça peut peut-être intéresser des membres ;)

edit : si on lance le jeu, on tente de fermer la fenêtre, on se retape la "première page" avec possibilité de relancer mais dès le premier clic le jeu crash.
Chaîne entre potes avec divers jeux (LoL, CS, Hearthstone, USF4 etc) : http://twitch.tv/lessupermadbros
http://www.madbro.eu

LoDSmooth
Messages : 167
Enregistré le : 29 avr. 2011, 20:31

Re: Petit jeu de skill !

Message par LoDSmooth » 26 févr. 2013, 22:21

Non mais en fait c'était plutôt pour vous montrer quoi ^^

Sinon j'avais pas pris en compte le cas 'je ferme la fenêtre alors que j'ai pas finis', faut que je corrige ;)

Ya un autre bug c'est qu'on ne peut pas perdre au premier clic. Rien ne se passe.

Je vais essayer de corriger ça.

Pour ceux qui veulent le code :

Code : Tout sélectionner

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <time.h>
#include <math.h>
#include "SDL/SDL_ttf.h"
#include "main.h"


int main (int argc, char *argv[])
{
    double score = 0.0, tempsdepart = 0.0;
    int continuer = 1, placementProgramme = 0;
    srand(time(NULL));
    TTF_Init();
    SDL_Surface *ecran = NULL, *rectangle = NULL;
    SDL_Rect position;
    SDL_Event event;
    SDL_Init(SDL_INIT_VIDEO);
    SDL_WM_SetCaption ("Skill a la souris", NULL);
    ecran = SDL_SetVideoMode(largeurFenetre, hauteurFenetre, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, tailleCarre, tailleCarre, 32, 0, 0, 0, 0);

    TTF_Font *police = pageAccueil(&score, ecran, event, &continuer, &placementProgramme, &tempsdepart);

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 15,150,150));
    SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 10,10,10));
    SDL_Flip(ecran);
    afficherRect(rectangle, &position, ecran, score);
    while (continuer)
    {
        attendreEvent(&continuer, event, &position, ecran, rectangle, &score, &placementProgramme);
    }
    pageAccueil(&score, ecran, event, &continuer, &placementProgramme, &tempsdepart);

    SDL_FreeSurface(ecran);
    SDL_FreeSurface(rectangle);
    TTF_CloseFont(police);
    TTF_Quit();
    SDL_Quit();
    return 0;
}

int attendreEvent(int *continuer, SDL_Event event, SDL_Rect *pointeurposition, SDL_Surface *ecran, SDL_Surface *rectangle, double *score, int *placementProgramme)
{

        SDL_WaitEvent(&event);

        switch(event.type)
        {
            case SDL_QUIT :
            *continuer = 0;
            *placementProgramme = 1;
            break;
            case SDL_MOUSEBUTTONDOWN :
            if ((event.motion.x) >= pointeurposition->x && event.motion.x <= ((pointeurposition->x)+tailleCarre-5*(*score-1)) && (event.motion.y) >= pointeurposition->y && event.motion.y <= ((pointeurposition->y)+tailleCarre-5*(*score-1)))
            {
                afficherRect(rectangle, pointeurposition, ecran, *score);
                (*score)++;
            }
            else
            {
                if (*score >= 0)
                {
                    *placementProgramme = 2;
                    *continuer = 0;
                }
            }
            break;
        }
}

int afficherRect(SDL_Surface *rectangle, SDL_Rect *pointeurposition, SDL_Surface *ecran, int score)
{
    rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, tailleCarre-5*score, tailleCarre-5*score, 32, 0, 0, 0, 0);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255,255-5*score,255-4*score));
    SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 35,50,35));
    pointeurposition->x = rand()%(800-(tailleCarre-5*score));
    pointeurposition->y = rand()%(600-(tailleCarre-5*score));
    SDL_BlitSurface(rectangle, NULL, ecran, pointeurposition);
    SDL_Flip(ecran);
}

TTF_Font * pageAccueil(double *score, SDL_Surface *ecran, SDL_Event event, int *pointeurSurContinuer, int *placementProgramme, double *tempsdepart)
{
    int continuer =1;
    double tempsfinal = 0.0, skill=0.0;
    TTF_Font *police = NULL;
    police = TTF_OpenFont("calibri.ttf", 40);
    SDL_Surface *texte = NULL, *texte2 = NULL;
    SDL_Color couleurBlanche = {255,255,255};
    SDL_Surface *imageDeFond= NULL, *boutonDepart;
    SDL_Rect fond, bouton;
    fond.x = 0;
    fond.y = 0;
    bouton.x = 3.0/8.0*largeurFenetre;
    bouton.y = 3.0/8.0*hauteurFenetre;
    boutonDepart = SDL_CreateRGBSurface(SDL_HWSURFACE, 2.0/8.0*largeurFenetre, 2.0/8.0*hauteurFenetre, 32, 0, 0, 0, 0);
    SDL_FillRect(boutonDepart, NULL, SDL_MapRGB(ecran->format, 150, 50, 50));
    imageDeFond = SDL_LoadBMP("Grandcanyon.bmp");

    if (*score <= 0.5 && *placementProgramme < 1)
    {
        texte = TTF_RenderText_Blended(police, "commencer", couleurBlanche);
        SDL_BlitSurface(imageDeFond, NULL, ecran, &fond);
        SDL_BlitSurface(boutonDepart, NULL, ecran, &bouton);
        bouton.y = 0.5*hauteurFenetre-0.5*texte->h;
        SDL_BlitSurface(texte, NULL, ecran, &bouton);
        SDL_Flip(ecran);

        do
        {
            SDL_WaitEvent(&event);
            switch (event.type)
            {
                case SDL_QUIT :
                continuer = 0;
                *pointeurSurContinuer = 0;
                *placementProgramme=1;
                break;

                case SDL_MOUSEBUTTONDOWN :
                if (event.motion.x>=(largeurFenetre-(5.0/8.0*largeurFenetre)) && event.motion.x <= (largeurFenetre-(3.0/8.0*largeurFenetre)) && event.motion.y<=(hauteurFenetre-(3.0/8.0*hauteurFenetre))&& event.motion.y>=(hauteurFenetre-(5.0/8.0*hauteurFenetre)))
                {
                    continuer = 0;
                    *tempsdepart=SDL_GetTicks();
                }
                break;
            }

        }while(continuer == 1);
        return police;
    }
    else if (*score > 0.5 && *placementProgramme != 1 || *placementProgramme == 2)
    {
        tempsfinal = SDL_GetTicks()-(*tempsdepart);
        skill = *score/(tempsfinal/1000)+0.1*(*score-log(tempsfinal/1000));
        char scoreFinal[40], texteTemps [40];
        int scoreDebug = *score;

        sprintf(scoreFinal, "Ton score : %d / 40", scoreDebug);
        tempsfinal /=1000;
        sprintf(texteTemps, "Ton temps : %f secondes", tempsfinal);
        texte = TTF_RenderText_Blended(police, scoreFinal, couleurBlanche);
        texte2 = TTF_RenderText_Blended(police, texteTemps, couleurBlanche);
        bouton.x = 260;
        SDL_BlitSurface(imageDeFond, NULL, ecran, &fond);
        SDL_BlitSurface(texte, NULL, ecran, &bouton);
        bouton.y +=60;
        bouton.x -=100;
        SDL_BlitSurface(texte2, NULL, ecran, &bouton);
        SDL_Flip(ecran);
        do
        {
            SDL_WaitEvent(&event);
            switch (event.type)
            {
                case SDL_QUIT :
                continuer = 0;
                break;
            }
        }while(continuer == 1);
    }

}

edit : code de la version améliorée

Avatar du membre
Weedwalker
Messages : 995
Enregistré le : 19 mars 2009, 13:04

Re: Petit jeu de skill !

Message par Weedwalker » 27 févr. 2013, 02:19

je télécharge pas, c'est peut être un virus... :evil:

LoDSmooth
Messages : 167
Enregistré le : 29 avr. 2011, 20:31

Re: Petit jeu de skill !

Message par LoDSmooth » 27 févr. 2013, 10:50

oui bien sur j'ai que ça à faire ^^

t'es un peu parano dis donc ;)

Sinon ce matin j'ai rajouté un bouton "rejouer", c'est + pratique

Avatar du membre
Dipsy
Messages : 1407
Enregistré le : 19 oct. 2009, 10:45
Localisation : Paris

Re: Petit jeu de skill !

Message par Dipsy » 27 févr. 2013, 18:26

C'est juste qu'il trouve pas le bouton t'inquiètes.
J'essaierai ça plus tard ;)
bdo.Team ♥
<23:57:50> "k0ry": depuis que j'ai perdu contre toi en 1v1 sur tp en 2010 je t'aime plus.

Répondre