Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/07/2007, à 18:13

fifidu42

[C] [DEMANDE D'AVIS] Problème de boucle (résolu)

Bonjour à tous,

Je me lance dans la programmation C. Et je commence par créé un morpion (ben oui, il faut bien commencer par quelque chose).
Mon premier but est d'afficher la grille de cases vide à l'écran, et je bloque sur un problème de boucle je pense. J'ai aussi un problème pour initialisé un tableau (à voir dans le code ci-dessous, je l'ai bien commenter).

(ps: Je suis sous Feisty, et j'utilise Code::Block comme ide)

/*
main.cpp
-----------------------------

Créé par Fifi
Rôle : Lance le Morpion

*/

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
    // Initialisation des surfaces
    SDL_Surface *ecran= NULL, *vide = NULL;
    SDL_Rect position;
    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode (300, 300, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

    // Les variables
    int grille[2][2];   // Tableau pour les cases de la grille
    int bx, by; // variable des axes abscises et ordonnées

    vide = SDL_LoadBMP("vide.bmp"); // La case vide 100*100 px

    /*
    Comme la mise à zéro du table ne marche pas de cette facon:

        int grille[2][2]={0};
        Réponse de Code::Blocks : attention : missing braces around initializer for «int [2]"

    Je le fais de cette façon :
    */

    for (by=0; by<3; by++)  // Boucle des ordonnées
    {
        for (bx=0; bx<3; bx++)  // Boucle des abcises
        {
            grille[bx][by] = 0;
        }
    }

    // Afficher les images sur la grille (vide, croix rond)
    for (by=0; by<3; by++)  // Boucle des ordonnées
    {
        for (bx=0; bx<3; bx++)  // Boucle des abcises
        {
            if (grille[bx][by] == 0)    // Si la case du tableau correspondant à bx et by est égal à zéro, alors j'affiche la case vide.
            {
                position.x = bx * 100;  // Je calcule la position de l'image
                position.y = by * 100;
                SDL_BlitSurface (vide, NULL, ecran, &position); // Je l'affiche
            }
        }
    }
    SDL_Flip(ecran);    // J'actualise l'écran

    SDL_Delay (1000);   // Je laisse 1 seconde pour voir le résultat

    // Je libère la surface, quitte la sdl
    SDL_FreeSurface (vide);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Et voici l'image qu'il m'affiche :

morpion.png

[edit] : Vous avez compris que le problème viens des 3 cases qui ne s'affiche pas (pas de carré blanc)

D'où viens le problème à votre avis? De la boucle?

Merci d'avance,
Fifi ;-)

Dernière modification par fifidu42 (Le 29/07/2007, à 08:15)


La vie, c'est comme une boite de chocolat, on sait jamais sur quoi on va tomber...

Hors ligne

#2 Le 27/07/2007, à 19:04

qqun

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

attention

int grille[2][2];   // Tableau pour les cases de la grille

  avec

  for (by=0; by<3; by++)  // Boucle des ordonnées
    {
        for (bx=0; bx<3; bx++)  // Boucle des abcises
        {
            grille[bx][by] = 0;
        }
    }

ca peu deja pas marcher !!

deja declare int grille[3][3];   // Tableau pour les cases de la grille

#3 Le 27/07/2007, à 19:04

abetsic

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

ce n'est pas grille[2][2] mais grille[3][3].
Le chiffre correspond au nombre d'élément du tableau, soit trois dans ton cas. Et le premier élément est le 0, et le dernier 2.

Hors ligne

#4 Le 27/07/2007, à 19:27

fifidu42

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

Génial! Merci beaucoup!!!

Par contre, comment mettre toutes les valeurs du tableau à 0?


La vie, c'est comme une boite de chocolat, on sait jamais sur quoi on va tomber...

Hors ligne

#5 Le 27/07/2007, à 19:33

qqun

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

int grille[3][3]={{0},{0}};

#6 Le 27/07/2007, à 19:41

fifidu42

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

Super! Merci encore!

Dernière modification par fifidu42 (Le 29/07/2007, à 08:16)


La vie, c'est comme une boite de chocolat, on sait jamais sur quoi on va tomber...

Hors ligne

#7 Le 28/07/2007, à 23:13

fifidu42

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

Bon, j'ai fini le plus gros du programme, pouvez-vous me donner votre avis?
D'ailleurs je ne sais pas si je l'ai bien mis comme il faut, car chez moi lorsque je clique sur "Morpion" il marche, mais je n'ai pas essayer sur d'autre pc... J'utilise fmod et sdl

Fichier tar.gz à télécharger

Merci d'avance pour vos conseils ;-)

Dernière modification par fifidu42 (Le 28/07/2007, à 23:41)


La vie, c'est comme une boite de chocolat, on sait jamais sur quoi on va tomber...

Hors ligne

#8 Le 29/07/2007, à 10:13

qqun

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

ca marche tres bien , sinon je vois pas de gros bug , sauf peut etre un peu imprecis pour la souris
(genre si tu clique sur la tete du type cela valide une croix dans la derniere colonne)

#9 Le 29/07/2007, à 13:21

fifidu42

Re : [C] [DEMANDE D'AVIS] Problème de boucle (résolu)

J'ai corrigé le problème du clique.
Pour les sources, vous pouvez les voir ici


La vie, c'est comme une boite de chocolat, on sait jamais sur quoi on va tomber...

Hors ligne