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

Allegro Discussion :

[Allegro] Sokoban Probème affichage.


Sujet :

Allegro

  1. #1
    Futur Membre du Club
    Inscrit en
    mai 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [Allegro] Sokoban Probème affichage.
    Bonjour.
    Je suis en train de coder un jeu de sokoban sous allegro en C# mais je me heurt à un problème gênant.J'essaie tant bien que mal d'afficher la carte d'un niveau à partir d'un fichier

    Le niveau ressemble à ca :



    et voici mon code (assez bordélique je sait )

    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
     
     
    #include <string.h>
    #include "constante.h"
    #include <allegro.h>
    #include <stdio.h>
     
    #define LARGEUR_MAX 20
    #define TAILLE_BLOC         34
    #define SURFACE 0
    #define MUR 1
    #define CAISSE 2
    #define OBJECTIF 3
    #define JOUEUR 4
    int largeur,hauteur;
    int map(void);
    char ligne[LARGEUR_MAX+1];
    int carte[LARGEUR_MAX][LARGEUR_MAX];
     
    int main (void)
    {
     
        int colordepth=24;
        char*Surface="surface.bmp";
        char*Mur="mur.bmp";
        char*Caisse="caisse.bmp";
        char*Objectif="objectif.bmp";
        char*Joueur="joueur.bmp";
        BITMAP* surface;
        BITMAP* mur;
        BITMAP* caisse;
        BITMAP* objectif;
        BITMAP* joueur;
     
        surface=load_bitmap(Surface,NULL);
        mur=load_bitmap(Mur,NULL);
        caisse=load_bitmap(Caisse,NULL);
        objectif=load_bitmap(Objectif,NULL);
        joueur=load_bitmap(Joueur,NULL);
     
        int i = 0, j = 0;
     
        allegro_init();
        install_keyboard();
    set_color_depth(colordepth);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, TAILLE_BLOC * largeur, TAILLE_BLOC * hauteur , 0, 0); // makes the screen a 640x480 window
     
        clear_to_color(screen, makecol(255, 255, 255));
     
     
    int map(void);
     
     
    for (i = 0 ; i < LARGEUR_MAX; i++)
            {
                for (j = 0 ; j < largeur  ; j++)
                {
     
                    switch(carte[i][j])
                    {
                        case MUR:
                            blit(mur,screen, 0,0,i*TAILLE_BLOC,j*TAILLE_BLOC, TAILLE_BLOC,TAILLE_BLOC);
                            break;
                        case CAISSE:
                            blit(mur,screen, 0,0,i*TAILLE_BLOC,j*TAILLE_BLOC, TAILLE_BLOC,TAILLE_BLOC);
                            break;
                        case OBJECTIF:
                            blit(mur,screen, 0,0,i*TAILLE_BLOC,j*TAILLE_BLOC, TAILLE_BLOC,TAILLE_BLOC);
                            break;
                        case JOUEUR:
                            blit(mur,screen, 0,0,i*TAILLE_BLOC,j*TAILLE_BLOC, TAILLE_BLOC,TAILLE_BLOC);
                            break;
     
                    }
                }
            }
     
     
        readkey();
        return 0;
    }
     
    int map()
    {
     
        int i = 0, j = 0;
        char nomfichier [] = "niveaux.lvl";
        FILE *ptrfichier;
     
     
        ptrfichier=fopen(nomfichier, "r");
     
        //fscanf(ptrfichier,"%d",&largeur);
        for (i = 0 ; i < LARGEUR_MAX && fgets(ligne, LARGEUR_MAX+1, ptrfichier) != NULL; i++)
        {
            largeur = strlen(ligne);
            for (j = 0 ; j < largeur ; j++)
            {
                switch (ligne[j])
                {
                    case ' ':
                    carte[i][j] = 0;
                    break;
                    case '#':
                    carte[i][j] = 1;
                    break;
                    case '$':
                    carte[i][j] = 2;
                    break;
                    case '.':
                    carte[i][j] = 3;
                    break;
                    case '@':
                    carte[i][j] = 4;
                    break;
                }
            }
            hauteur = i;
     
        }
     
     
        fclose(ptrfichier);
        return 1;
     
     
    }
     
    END_OF_MAIN()
    Mais voila je n'ai pas de problème pour compiler mais en revanche quand je lance le programme une fenêtre apparait une demi seconde puis plus rien, je deviens un peut perdu si quelqu'un pouvait m'aider à afficher cet carte je lui serait reconnaissant.
    Je pense que cela peut venir d'un problème de réglage de la taille de la fenêtre ou au moment où je blit les sprites

  2. #2
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    7 359
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 359
    Points : 16 990
    Points
    16 990
    Par défaut
    1-il y a un sous forum allegro
    Citation Envoyé par ald2ff64 Voir le message
    Mais voila je n'ai pas de problème pour compiler mais en revanche quand je lance le programme une fenêtre apparait une demi seconde puis plus rien, je deviens un peut perdu si quelqu'un pouvait m'aider à afficher cet carte je lui serait reconnaissant.
    encore une fois compilation et exécution sont 2 choses différentes ; ce qui passe logiquement à la compilation au niveau de la syntaxe et grammaire du code source ne peut pas passer à l'exécution au niveau du code machine résultant.
    Je pense que cela peut venir d'un problème de réglage de la taille de la fenêtre ou au moment où je blit les sprites
    As-tu posé des points d'arrêt et débogué pas-à-pas
    Tu as un tableau à 2 dimensions est-tu certain de ne pas dépasser les limites ?
    Qu'est ce qui est petit et marron ? Un marron ( Kaamelott)

  3. #3
    Futur Membre du Club
    Inscrit en
    mai 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai test en debug mode et un énorme log apparait (Back trace )

    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
     
    #0 0x1002847a	destroy_driver_list (??:??)
    #1 0x00000000	?? (??:??)
    #2 0x00ffffff	?? (??:??)
    #3 0x004013da	_mangled_main (main.c:48)
    #4 0x1006b025	geta (??:??)
    ...
    #15 0x00401782	WinMain (main.c:129)
    ...
    #85 0x1003b010	ustrtol (??:??)
    #86 0x1007f438	poly_scanline_ptex_mask_lit32 (??:??)
    ...
    #96 0x10005280	register_sample_file_type_init (??:??)
    ...
    #105 0x1002b010	close_fli (??:??)
    ...
    #123 0x10035e90	color_map (??:??)
    #124 0x10036280	poly_zbuf_ptex_mask16 (??:??)
    ...
    #141 0x100416b0	fixtan (??:??)
    #142 0x10041fd0	poly_zbuf_ptex_mask8 (??:??)
    ...
    #158 0x1003b4c0	ustrzcat (??:??)
    #159 0x1007f484	poly_scanline_ptex_mask_lit32 (??:??)
    ...
    #169 0x1003f730	poly_zbuf_ptex_mask_lit24 (??:??)
    ...
    #187 0x1003f540	do_circle (??:??)
    ...
    #204 0x1003b240	ustrupr (??:??)
    #205 0x1007f45c	poly_scanline_ptex_mask_lit32 (??:??)
    ...
    #215 0x1001b280	poly_scanline_atex_trans16 (??:??)
    ...
    #229 0x1001b550	poly_zbuf_ptex8 (??:??)
    ...
    #247 0x1001b600	poly_zbuf_ptex_lit15 (??:??)
    ...
    #264 0x1000e810	destroy_sample (??:??)
    #265 0x100799fc	fix_filename_case (??:??)
    .....
    #556 0x736e756d	GetSurfaceFromDC (??:??)
    ...
    #671 0x736b636f	ReleaseDDThreadLock (??:??)
    ..
    #891 0x736e6f43	GetSurfaceFromDC (??:??)
    ...
    #1018 0x77c2fc80	sys_nerr (??:??)
    #1019 0x77c2fca0	msvcrt!_iob (??:??)
    #1020 0x77c2fcc0	msvcrt!_iob (??:??)
    #1021 0x77c2fce0	msvcrt!_iob (??:??)
    #1022 0x77c2fd00	msvcrt!_iob (??:??)
    #1023 0x77c2fd20	msvcrt!_iob (??:??)
    #1024 0x77c2fd40	msvcrt!_iob (??:??)
    #1025 0x77c2fd60	msvcrt!_iob (??:??)
    #1026 0x77c2fd80	msvcrt!_iob (??:??)
    #1027 0x77c2fda0	msvcrt!_iob (??:??)
    #1028 0x77c2fdc0	msvcrt!_iob (??:??)
    #1029 0x77c2fde0	msvcrt!_iob (??:??)
    #1030 0x77c2fe00	msvcrt!_iob (??:??)
    #1031 0x77c2fe20	msvcrt!_iob (??:??)
    #1032 0x77c2fe40	msvcrt!_iob (??:??)
    #1033 0x77c2fe60	msvcrt!_iob (??:??)
    #1034 0x77c2fe80	msvcrt!_iob (??:??)
    #1035 0x77c2fea0	msvcrt!_iob (??:??)
    #1036 0x77c2fec0	msvcrt!_iob (??:??)
    #1037 0x77c2fee0	msvcrt!_iob (??:??)
    ...
    #1536 0x774f1eff	ole32!CoGetApartmentID (??:??)
    #1537 0x774f1f07	ole32!CoGetApartmentID (??:??)
    #1538 0x774f2193	ole32!CoGetApartmentID (??:??)
    #1539 0x774f2171	ole32!CoGetApartmentID (??:??)
    #1540 0x774f21c3	ole32!CoGetApartmentID (??:??)
    #1541 0x774f1f0f	ole32!CoGetApartmentID (??:??)
    #1542 0x774f2239	ole32!CoGetApartmentID (??:??)
    #1543 0x774f1f52	ole32!CoGetApartmentID (??:??)
    #1544 0x774f1f62	ole32!CoGetApartmentID (??:??)
    #1545 0x774f1f29	ole32!CoGetApartmentID (??:??)
    #1546 0x774f1f38	ole32!CoGetApartmentID (??:??)
    ...
    #1612 0x73e7292b	DirectSoundCreate (??:??)
    ..
    #1725 0x00401ee0	malloc (??:??)
    #1726 0x00401aa0	__main (??:??)
    Je ne pense avoir dépasser la limite de mon tableau car j'ai volontairement mis "trop" de cases.

  4. #4
    Futur Membre du Club
    Inscrit en
    mai 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai réussi à éliminer mon problème de crash mais je n'arrive toujour pas à afficher mon niveau de sokoban
    J'essaie donc pour le moment d'afficher que les murs du niveau, mais je bloque toujours.
    Nouvelle version :

    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
     
    #define ERREUR(msg) {\
       set_gfx_mode(GFX_TEXT,0,0,0,0);\
       allegro_message("erreur ligne %d, fichier %s: %s\n",__LINE__, __FILE__,msg);\
       allegro_exit();\
       exit(EXIT_FAILURE);\
    }
    #include <string.h>
    //#include "constante.h"
    #include <allegro.h>
    #include <stdio.h>
    #define ECRAN_X	TAILLE_BLOC * LARGEUR_MAX
    #define ECRAN_Y	HAUTEUR_MAX * TAILLE_BLOC
    #define MODE    GFX_AUTODETECT_WINDOWED
    #define LARGEUR_MAX 12
    #define HAUTEUR_MAX 12
    #define TAILLE_BLOC         34
    //#define SURFACE 0
    //#define MUR 1
    //#define CAISSE 2
    //#define OBJECTIF 3
    //#define JOUEUR 4
    enum {VIDE, MUR, CAISSE, OBJECTIF, JOUEUR, CAISSE_OK};
    int largeur,hauteur;
    int map(void);
    char ligne[LARGEUR_MAX*HAUTEUR_MAX+1]= {0};
    int carte[LARGEUR_MAX][HAUTEUR_MAX] ;
     
    int main (void)
    {
     
        int x,y;
        int colordepth=24;
    //    char*Surface="surface.bmp";
        char*Mur="mur.bmp";
    //    char*Caisse="caisse.bmp";
    //    char*Objectif="objectif.bmp";
    //    char*Joueur="joueur.bmp";
    //    BITMAP* surface;
        BITMAP* mur;
    //    BITMAP* caisse;
    //    BITMAP* objectif;
    //    BITMAP* joueur;
     
     
        int i = 0, j = 0;
     
        allegro_init();
        install_keyboard();
        set_color_depth(colordepth);
       if (set_gfx_mode(MODE,ECRAN_X,ECRAN_Y,0,0)!=0)
          ERREUR("initialisation mode graphique");
     
        clear_to_color(screen, makecol(0, 0, 0));
    //    surface=load_bitmap(Surface,NULL);
        mur=load_bitmap(Mur,NULL);
          if (!mur)
          ERREUR("load mage");
    //    caisse=load_bitmap(Caisse,NULL);
    //    objectif=load_bitmap(Objectif,NULL);
    //    joueur=load_bitmap(Joueur,NULL);
     
    map();
     
       textprintf_ex(screen,font,140+100,100+50,makecol(255,255,255),10,
                  "hauteur : %d,largeur %d",hauteur,largeur);
     
    for (i = 0 ; i < LARGEUR_MAX; i++)
            {
                for (j = 0 ; j < HAUTEUR_MAX  ; j++)
                {
     
                    switch(carte[i][j])
                    {
                        case MUR:
                            blit(screen, mur,0,0, i*TAILLE_BLOC, j*TAILLE_BLOC,mur->w ,mur->h);
                            break;
    /*                    case CAISSE:
                            blit(caisse, screen, 0, 0, i*TAILLE_BLOC, j*TAILLE_BLOC, caisse->w, mur->h);
                            break;
                        case OBJECTIF:
                            blit(objectif, screen, 0, 0, i*TAILLE_BLOC, j*TAILLE_BLOC, objectif->w, mur->h);
                            break;
                        case JOUEUR:
                        blit(joueur, screen, 0, 0, i*TAILLE_BLOC, j*TAILLE_BLOC, joueur->w, mur->h);
                        break;
     */
                    }
                }
            }
     
     
        readkey();
        return 0;
    }
     
    int map()
    {
     
        int i = 0, j = 0;
        char nomfichier [] = "niveaux.lvl";
        FILE *ptrfichier;
     
     
        ptrfichier=fopen(nomfichier, "r");
        if (ptrfichier == NULL)
        return 0;
        fgets(ligne, LARGEUR_MAX * HAUTEUR_MAX + 1, ptrfichier);
        //fscanf(ptrfichier,"%d",&largeur);
        for (i = 0 ; i < LARGEUR_MAX;i++ )
        {
            hauteur = strlen(ligne);
            for (j = 0 ; j < HAUTEUR_MAX ; j++)
            {
                switch (ligne[(i * LARGEUR_MAX) + j])
                {
                    case '0':
                    carte[i][j] = 0;
                    break;
                    case '1':
                    carte[i][j] = 1;
                    break;
                    case '2':
                    carte[i][j] = 2;
                    break;
                    case '3':
                    carte[i][j] = 3;
                    break;
                    case '4':
                    carte[i][j] = 4;
                    break;
                }
            }
            largeur = i;
     
        }
     
     
        fclose(ptrfichier);
        return 1;
     
     
    }
     
    END_OF_MAIN()

Discussions similaires

  1. [Allegro] Problème affichage sprite à l'exécution
    Par Invité dans le forum Allegro
    Réponses: 1
    Dernier message: 18/05/2011, 08h29
  2. [Richfaces] probème affichage de calendar
    Par mitnick2006 dans le forum JSF
    Réponses: 6
    Dernier message: 19/05/2009, 04h03
  3. [PHP 5.0] Probème d'affichage du nom de la catégorie sur internet explorer
    Par paysbasque64 dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2009, 14h52
  4. Réponses: 0
    Dernier message: 01/09/2008, 15h38
  5. [AJAX]probème d'affichage de traitement
    Par jeandormesson dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2006, 16h28

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