IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Interface utilisateur pour Sudoku


Sujet :

SDL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Interface utilisateur pour Sudoku
    Bonjour à tous et à toutes,je dois réaliser une sorte de correcteur de sudoku...et moi j'aimerai bien le faire graphique et j'ai déjà commencé....au début y'a le menu qui s'affiche après lorsque l'utilisateur appui la touche 1 la grille de sudoku s'affiche.Le probleme c'est que je sais pas comment faire pour lire les valeurs que l'utilisateur saisi et les afficher sur la grille.Je me suis procurer des images de chiffres(allant de 1 à 9) afin de les afficher sur la grille mais j'y arrive.
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    /* Cette fonction charge l'ensemble des chiffres */
    void chargement_chiffres(SDL_Surface *b[9])
    {
     
    	/* Chargement des chiffres de couleur bleu*/
    	b[0] = SDL_LoadBMP("chiffres/b1.bmp");
    	b[1] =SDL_LoadBMP("chiffres/b2.bmp");
    	b[2] = SDL_LoadBMP("chiffres/b3.bmp");
    	b[3] =SDL_LoadBMP("chiffres/b4.bmp");
    	b[4] = SDL_LoadBMP("chiffres/b5.bmp");
    	b[5] = SDL_LoadBMP("chiffres/b6.bmp");
    	b[6] = SDL_LoadBMP("chiffres/b7.bmp");
        b[7] =SDL_LoadBMP("chiffres/b8.bmp");
    	b[8] = SDL_LoadBMP("chiffres/b9.bmp");
    }
    void pause()
    {
        int continuer = 1;
        SDL_Event event;
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL,*imageDeFond = NULL;
        SDL_Rect positionFond;
        int continuer=1;
     
        positionFond.x = 0;
        positionFond.y = 0;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE  | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("SUDOKU par tizi", NULL);
        SDL_Event event;
     
        /* Chargement d'une image Bitmap dans une surface */
        imageDeFond = SDL_LoadBMP("sudoku.bmp");
           // Effacement de l'écran
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        /* On blitte par-dessus l'écran */
        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
     
        SDL_Flip(ecran);
     
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: // Veut arrêter le jeu
                            continuer = 0;
                            break;
                            case SDLK_1: // Demande à jouer
                                      ecran = SDL_SetVideoMode(1021, 769, 32, SDL_HWSURFACE  | SDL_DOUBLEBUF);
                                     SDL_WM_SetCaption("SUDOKU par tizi", NULL);
                                     SDL_Event event;
     
                                          /* Chargement d'une image Bitmap dans une surface */
     
                                            imageDeFond = SDL_LoadBMP("grille.bmp");
     
                                              /* On blitte par-dessus l'écran */
                                         SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
     
                                         SDL_Flip(ecran);
                                        pause();
     
                                         SDL_FreeSurface(imageDeFond); /* On libère la surface */
                                          SDL_Quit();
                                        return EXIT_SUCCESS;
                                           break;
     
     
                                  case SDLK_2:
                            continuer=0;
                            break;
     
                    }
                    break;
            }
     
     
            SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
            SDL_Flip(ecran);
        }
     
        SDL_FreeSurface(imageDeFond);
        SDL_Quit();
     
        return EXIT_SUCCESS;
     
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour ( et bienvenue )

    Un système simple à mettre en place, pourrait être un système de glisser déposer ( bien sur ce n'est pas le plus beau esthétiquement ).

    Le système de glisser deposer, on mais tout nos chiffres, sur un coté, et l'utilisateur devra cliquer sur ces chiffres, et les deposer sur la grille.

    Avec les event de la SDL c'est super simple . Si vous avez besoin plus d'explication, j'expliquerai
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    LittleWhite +1

    Par contre, pense à factoriser ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* Cette fonction charge l'ensemble des chiffres */
    void chargement_chiffres(SDL_Surface *b[9])
    {
     
    	/* Chargement des chiffres de couleur bleu*/
    	b[0] = SDL_LoadBMP("chiffres/b1.bmp");
    	b[1] =SDL_LoadBMP("chiffres/b2.bmp");
    	b[2] = SDL_LoadBMP("chiffres/b3.bmp");
    	b[3] =SDL_LoadBMP("chiffres/b4.bmp");
    	b[4] = SDL_LoadBMP("chiffres/b5.bmp");
    	b[5] = SDL_LoadBMP("chiffres/b6.bmp");
    	b[6] = SDL_LoadBMP("chiffres/b7.bmp");
        b[7] =SDL_LoadBMP("chiffres/b8.bmp");
    	b[8] = SDL_LoadBMP("chiffres/b9.bmp");
    }
    en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* Cette fonction charge l'ensemble des chiffres */
    void chargement_chiffres(char *pattern, SDL_Surface **b, int max)
    {
           char buf[1024];
           int i;
     
            for (i=1; i < max; i++)
            {
                snprintf (buf, sizeof (buf), pattern, i);
                assert (res < sizeof (buf));
                b[i - 1] = SDL_LoadBMP (buf);
            } 
    }
    et avec un appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chargement_chiffres ("chiffres/b%d.bmp", monTableauDeSurfaces, 9);
    Jc

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Autre solution : tu affiches une grille et un sorte de curseur (un trait rouge par exemple) qui est déplacé à l'aide des flèches directionnelles par le joueur. Lorsque le joueur appuie sur un chiffre, ce chiffres est mémorisé dans un tableau à 2 dimensions qui représente ta grille de sudoku, dans la case que tu peux retrouver en fonction de la position du curseur. Seul inconvénient : il faut à chaque affichage parcourir tout ton tableau et afficher dans les cases correspondantes les images des chiffres (sinon tu peux aussi te servir de SDL_ttf pour générer du texte au lieu d'images).

    Pour faire ça, le plus simple est d'avoir deux boucles événementielles, la première pour afficher le menu et attendre que le joueur fasse son choix .Puis la seconde pour gérer le remplissage de la grille.

  5. #5
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    j'ai l'impression que son problème pour l'instant c'est déjà d'afficher/stocker la grille.

    Effectivement tu peux (dois ?) créer une matrice/tableau int valeurs[9][9].
    Et tu stockes dedans tous les chiffres. (T'initialises à 0 les cases vides)
    Pour l'affichage tu parcours la matrice valeurs et tu blittes chaque surface de b sur écran en fonction de sa valeur.
    Au final, ça donnerait un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int i, j;
    int size = 9;
    SDL_Rect position;
     
    for(i = 0; i < size; i++) {
    	for(j = 0; j < size; j++) {
    		position.x = i + largeurDeCase;
    		position.y = j + hauteurDeCase;
    		SDL_BlitSurface(b[valeurs[i][j] - 1], NULL, ecran, &position);
    	}
    }

    Pour ce qui est du glisser/déposer, au final c'est pratique dans un jeu de Sudoku de pouvoir taper les chiffres au clavier. J'en avais développé un il y a quelques temps et effectivement la solution du curseur ou plutôt de la case présélectionnée dans mon cas s'était avérée la meilleure.

    Sur le clic, tu récupères les coordonnées écran et tu récupères la case présélectionnée ; tu changes l'affichage de ta case pour indiquer qu'elle est présélectionnée (tu peux blitter un rectangle vert, par exemple).
    Sur le keypressed, tu modifies la valeur de ta case.

    [edit]
    Je ne me souviens plus s'il faut blitter à chaque cycle avec la sdl ?
    Vive les roues en pierre

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/06/2015, 10h45
  2. Réponses: 9
    Dernier message: 14/10/2014, 16h07
  3. [AC-2007] Créer une interface utilisateur pour modifier des couleurs
    Par Triton972 dans le forum IHM
    Réponses: 6
    Dernier message: 18/08/2011, 20h36
  4. interface utilisateur pour les applications php/mysql
    Par ibrahima lamine dans le forum MySQL
    Réponses: 1
    Dernier message: 10/05/2011, 22h27
  5. interface utilisateur pour BD
    Par zakaroh dans le forum VB.NET
    Réponses: 5
    Dernier message: 19/05/2008, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo