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

C Discussion :

Creation d'un Labyrinthe


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Par défaut Creation d'un Labyrinthe
    Bonjour,
    Voila je dois concevoir un labyrinthe et un personnage qui ce déplace dans celui-ci. J'ai quelques problèmes :

    Le premier il ne casse pas les murs est et ouest et il ne fusionne pas les zones comme je le voudrais
    Si je pouvais avoir une peu d'aide Merci beaucoup
    Ps allea => alea
    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
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct { int num, n, o, s, e, p; } Kase;
     
    void init(int h, Kase TabT[h][h])
    {
    	int i=0; int e=0; int a=1;
        for (i=0; i<h; i++) 
        {
    	  for (e=0; e<h; e++) 
    	  {
    		TabT[i][e].num = a;
    		TabT[i][e].n=1;
    		TabT[i][e].s=1;
    		TabT[i][e].e=1;
    		TabT[i][e].o=1;
    		TabT[i][e].p=1;
    		a++;
    		printf("-%2d",TabT[i][e].num);
    	  }
    	  printf("\n");
    	}
    }
     
    void display(int h, Kase TabT[h][h])
    {
    int i=0; int e=0;
    for (i=0; i<h; i++) 
    {
    	for (e=0; e<h; e++) 
    	{
     
    		if (TabT[i][e].n==1) {
    			printf("+---");
    		}
    		else {
    			printf("+   ");
    		}
     
     
    	}
    	e=0;
    	printf("+\n");
    	for (e=0; e<h; e++) {
    		if (TabT[i][e].o==1 || TabT[i][e].o==1) {
    			if (TabT[i][e].p==0) {
    			printf("| P ");
    		}
     
    			else {
     
    			printf("|   ");
    		}
    		}
     
    		}
     
    	printf("|\n");
     
     
    }
     
    for (e=0; e<h; e++) {
    	printf("+---");
    }
    printf("+\n");
     
    }
     
    int main (int argc, const char * argv[]) 
    {
    	printf("entrez la hauteur et la largeur du labyrinthe, merci \n");
    	int h;
    	scanf("%d",&h);
    	Kase TabT[h][h];
     
    	init(h,TabT);	
     
    	display(h, TabT);
     
    	int allea1=0; int allea2=0;
     
     
     
    	int compteur=1;
     
    	while (compteur != h*h) {
    	  allea1=rand()%h;
    	  allea2=rand()%h;
    	  int aleatoire=rand()%4;
     
    	switch (aleatoire) {
    		case 1:
    			printf("le nord est pris\n");
    			if (allea1 > 0 && TabT[allea1][allea2].num!=TabT[allea1-1][allea2].num)
    			{
    				TabT[allea1][allea2].n=0;
    				TabT[allea1-1][allea2].s=0;
    				allea1=allea1-1;
    				compteur++;
    				// fusion
    				int x1 = TabT[allea1-1][allea2].num;
    	            int x2 = TabT[allea1][allea2].num;
    				int i=0; int e=0; 
    				for (i=0; i<h; i++) 
    				{
    					for (e=0; e<h; e++) 
    					{ if (TabT[i][e].num==x1){
    						TabT[i][e].num=x2;}
    			}
    				}
    				}
     
    			display(h, TabT);
    			int i; int e;
    			for (i=0; i<h; i++) 
    			{
    				for (e=0; e<h; e++) 
    				{
    					printf("-%2d",TabT[i][e].num);
    				}
    				printf("\n");
    			}
     
    			break;
     
     
     
    		case 2:
    			printf("le est est pris\n");
    			if (allea2 < 0 && TabT[allea1][allea2].num!=TabT[allea1][allea2+1].num)
    			{
    				TabT[allea1][allea2].e=0;
    				TabT[allea1][allea2+1].o=0;
    				allea2=allea2+1;
    				compteur++;
    				// fusion
    					int x1 = TabT[allea1][allea2+1].num;
    					int x2 = TabT[allea1][allea2].num;
    					int i=0; int e=0; 
    					for (i=0; i<h; i++) 
    					{
    						for (e=0; e<h; e++) 
    						{ if (TabT[i][e].num==x1){
    							TabT[i][e].num=x2;}
    						}
    					}
    				}
     
    				display(h, TabT);
    			for (i=0; i<h; i++) 
    			{
    				for (e=0; e<h; e++) 
    				{
    					printf("-%2d",TabT[i][e].num);
    				}
    				printf("\n");
    			}
    			break;
     
     
    		case 3:
    			printf("le ouest est pris\n");
    			if (allea2 < 0 && TabT[allea1][allea2].num!=TabT[allea1][allea2-1].num)
    			{
    				TabT[allea1][allea2].o=0;
    				TabT[allea1][allea2-1].e=0;
    				allea2=allea2-1;
    				compteur++;
    				// fusion
    					int x1 = TabT[allea1][allea2-1].num;
    					int x2 = TabT[allea1][allea2].num;
    					int i=0; int e=0; 
    					for (i=0; i<h; i++) 
    					{
    						for (e=0; e<h; e++) 
    						{ if (TabT[i][e].num==x1){
    							TabT[i][e].num=x2;}
    						}
    					}
    				}
    							display(h, TabT);
    			for (i=0; i<h; i++) 
    			{
    				for (e=0; e<h; e++) 
    				{
    					printf("-%2d",TabT[i][e].num);
    				}
    				printf("\n");
    			}
    			break;
     
     
     
     
     
    		case 4:
    			printf("le sud est pris\n");
    			if (allea1 > 0 && TabT[allea1][allea2].num!=TabT[allea1+1][allea2].num)
    			{
    				TabT[allea1][allea2].s=0;
    				TabT[allea1+1][allea2].n=0;
    				allea1=allea1+1;
    				compteur++;
    				// fusion
     
    					int x1 = TabT[allea1+1][allea2].num;
    					int x2 = TabT[allea1][allea2].num;
    					int i=0; int e=0; 
    					for (i=0; i<h; i++) 
    					{
    						for (e=0; e<h; e++) 
    						{ if (TabT[i][e].num==x1){
    							TabT[i][e].num=x2;}
    						}
    					}
    				}
    							display(h, TabT);		
    			for (i=0; i<h; i++) 
    			{
    				for (e=0; e<h; e++) 
    				{
    					printf("-%2d",TabT[i][e].num);
    				}
    				printf("\n");
    			}
    			break;
     
     
     
    		default:
    			break;
    	}
    			}
     
     
    	display(h, TabT);
    	int i=0; int e=0;
    	for (i=0; i<h; i++) 
        {
    		for (e=0; e<h; e++) 
    		{
    			printf("-%2d",TabT[i][e].num);
    		}
    		printf("\n");
    	}
     
     
    	i; e; int b=0; int a=0;
    	b=TabT[0][0].num;
    	printf("\n %d",b);
     
    	for (i=0; i<h; i++) 
        {
    		for (e=0; e<h; e++) 
    		{
    			a=TabT[i][e].num;
     
    			if (a<b)
    			{
    				b=a;
    				printf("\n %d\n",b);
    			}
    		}
    	}
     
     
     
     
     
    	allea1=0;
    	allea2=0;
    	TabT[allea1][allea2].p=0;
    	display(h, TabT);
     
     
     
     
     
    	while (1) {
     
     
    	printf("1 haut 2 bas 3 droite 4 gauche ");
    	int direction;
    	scanf("%d",&direction);	
     
    	switch (direction) {
    		case 1:
    			TabT[allea1][allea2].p=1;
    			TabT[allea1-1][allea2].p=0;
    			allea1=allea1-1;
     
     
    			break;
    			case 2:
    			TabT[allea1][allea2].p=1;
    			TabT[allea1+1][allea2].p=0;
    			allea1=allea1+1;
    				break;
    			case 4:
    			TabT[allea1][allea2].p=1;
    			TabT[allea1][allea2-1].p=0;
    			allea2=allea2-1;
    				break;
    			case 3:
    			TabT[allea1][allea2].p=1;
    			TabT[allea1][allea2+1].p=0;
    			allea2=allea2+1;
    				break;
     
     
     
    		default:
    			break;
    	}
     
     
     
     
     
     
    	display(h, TabT);
    	}
     
    	return 0;
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 836
    Billets dans le blog
    1
    Par défaut
    Salut
    Désolé. Déjà que ton énoncé qui parle de "casser" les murs et "fusionner" les zones est assez sibyllin, ton code lui est totalement imbitable. Des noms de variable comme "a" ou "e", aucun commentaire (enfin si, un seul "fusion" mais il ne veut pas dire grand chose), indentation aléatoire... Un code est la matérialisation de ta pensée et donc ici on sent que ta pensée est assez cafouilleuse donc il est normal que ton code le soit aussi. Donc on comprend tout à fait que tu ne t'y retrouves plus mais nous comme on ne s'y est jamais trouvé il y a peu de chance qu'on s'y retrouve.
    J'ai pas examiné les détails mais il me semble que la "fusion" est assez similaire dans les 4 cas. Pourquoi ne pas la factoriser dans une fonction dédiée ? Déjà tu allèges ce tas de lignes et il suffit de te concentrer sur un élément pour réussir 4 opérations...
    Désolé mais me semble que tu es parti à coder direct sans prendre le temps de réfléchir aux tâches à accomplir et à la façon de les décomposer. Ben malheureusement ce temps que tu aurais investi au départ tu l'aurais ensuite récupéré au centuple (ne serait-ce qu'en évitant d'en perdre à essayer de trouver la ou les erreurs). Et tu viens nous demander maintenant d'essayer de comprendre ta pensée pour qu'on t'indique à quel moment tu l'as mal traduite et ça ce n'est pas dans nos cordes...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Quand tu recommenceras à coder de zéro (après avoir bien réfléchi sur papier , il faut absolu que tu découpes ton code et fasse des fonctions. Ta fonction main de 200 lignes c'est 0/20. Pour te donner une idée, essaye d'avoir des fonctions d'au maximum 10 lignes et de n'avoir jamais 2 lignes de code identiques (enfin ça c'est l'idée, en pratique il faut juste essayer de tendre vers cet idéal).

    Bonne chance

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Par défaut
    Merci pour les conseils.

    Je vais repartir de 0 et essayer de structurer mon travail ( ce qui ne va pas être une chose facile, je suis nul en programmation ! )

    Merci

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fab9492 Voir le message
    Je vais [...] essayer de structurer mon travail ( ce qui ne va pas être une chose facile, je suis nul en programmation !
    C'est clairement le genre de remarque que je n'aime pas car je trouve qu'elle n'a pas de sens. Cette phrase sous-entend "je ne sais pas coder donc ça me dédouane de ne pas réussir à structurer ma pensée".

    Non monsieur ! Je ne suis pas d'accord !

    Il ne faut pas raisonner d'un point de vue code (dans le sens écriture du code) mais d'un point de vue algorithmique / logique. Comme l'a dit très justement Sve@r, il s'agit bien de "prendre le temps de réfléchir aux tâches à accomplir et à la façon de les décomposer". Il faut ici réfléchir en pseudo-code, pour ainsi dire en français. Ton talent de codeur n'entre pas en compte dans tout ça.

    Courage !

Discussions similaires

  1. quel logiciel de modelisation pour creation d'un labyrinthe
    Par mari-ion dans le forum Moteurs 3D
    Réponses: 3
    Dernier message: 26/02/2009, 18h31
  2. [c++ builder] creation de surface sur TPanel
    Par JEG dans le forum DirectX
    Réponses: 7
    Dernier message: 23/09/2002, 22h41
  3. [Kylix] SIGSEGV 11 - creation form
    Par pram dans le forum EDI
    Réponses: 1
    Dernier message: 29/08/2002, 15h24
  4. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56
  5. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 12h36

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