Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1677 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Exploiter un fichier .raw

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exploiter un fichier .raw

n°1636486
mrpropre00​7
Posté le 04-11-2007 à 18:43:51  profilanswer
 

:hello:  Salut tout le monde.  
 
Pour un projet, j'utilise une fonction qui permet de recupérer un fichier raw que j'ai créé sous photoshop.
Ceci dans le but de créer des niveaux de jeu pour un genre de pacman( un peu modifié ) :)
 
Au stade ou j’en suis, j’ai réussi en dessinant en noir ou en blanc sur un fichier raw (sous photoshop) a structurer le niveau grace au petit bout de code suivant :
 
for (i=0;i<lig ; i++)
  {
      for (j=0 ; j<col; j++)
      {
        if(ima[i][j]==255)terrain[i][j]='.';
        else cTableau[i][j]=SYMBOLE_MUR;
      }    
  }
Lorsque j’ai dessiné du blanc (255), je dessine un point : '.' (chemin autorisé) et lorsque j’ai du noir(0), je mets un mur (symbole : '+') pour que le bonhome ne puisse pas s’y déplacer.
Tout ca marche tres bien.
Cependant, j’aimerai aller plus loin dans l’exploitation de cette fonction et générer les items (F,S,V,etc) ainsi que des ennemis X. :pt1cable:  
J’ai édité le fichier raw sous photoshop et avec une palette de niveaux de gris (0-255), j’ai donné a chaque items un niveau de gris (par ex : les ennemis 'X' valent 40 en décimal et 29 en hexa(donné par la palette de photoshop))
/!\ Je parle simplement de l'affichage du niveau au départ, car vous allez me dire que mes ennemis bougent pas :p
 Dans le petit bout de code précédent, j’ai donc ajouté une liste de if de la manière suivante (en gras) :
 
for (i=0;i<lig ; i++)
  {
      for (j=0 ; j<col; j++)
      {
        if(ima[i][j]==255)terrain[i][j]='.';
        if(ima[i][j]==40 terrain[i][j]=’X';      // Car j’ai dessiné les ennemis X avec le niveau de gris 40 sous photoshop.
        …
        else terrain [i][j]=SYMBOLE_MUR;
      }    
  }
 
Mais malheureusement ca ne marche pas… :lol:  
Avez-vous une idée ?  
J'ai l'impression qu'en dehors du noir et du blanc, il ne reconnait pas les autres nuances de gris...
 
MErci :p
 


Message édité par mrpropre007 le 04-11-2007 à 18:44:14
mood
Publicité
Posté le 04-11-2007 à 18:43:51  profilanswer
 

n°1636693
lsdYoYo
gravity powered
Posté le 05-11-2007 à 10:48:53  profilanswer
 

A ton avis, que ce passe-t-il dans le code suivant :

Code :
  1. if(a == 255) b = 1;
  2. if(a ==  40) b = 2;
  3. else         b = 3;

En final, "b" n'aura jamais la valeur "1". Pourquoi ?

n°1637273
mrpropre00​7
Posté le 06-11-2007 à 00:18:18  profilanswer
 

Bah je comprend pas... si mon pixel vaut 255 alors j'aurai la valeur 1... tu veux dire que 254 est le maximum, c'est la que tu voulais en venir ??
Le probleme c'est que le test sur la valeur 255 marche! ce so,n les autres valeurs qui ne marchent pas , celles qui sont differentes de 0 et 255 :)
 
Merci de ta réponse ;)


Message édité par mrpropre007 le 06-11-2007 à 00:23:00
n°1637309
mcyrb
Mieux vaut tard que plus tard
Posté le 06-11-2007 à 08:10:53  profilanswer
 

Non, ce qu'il veut dire c'est qu'une clause else est associée à une seule clause if, pas 50.

n°1637335
mrpropre00​7
Posté le 06-11-2007 à 09:05:04  profilanswer
 

OK les gars c'est sympa! :)
Je vais tester ca, je vous tiens au  jus  
Merci encore ;)

n°1637341
mrpropre00​7
Posté le 06-11-2007 à 09:11:03  profilanswer
 

J'ai mis pleins de if a la suite les uns des autres et ca ne change rien ... il passe dans le if qui teste la valeur 255 et dans celui qui teste la valeur 0, mais toujours rien dans les autres... :(

n°1637400
mcyrb
Mieux vaut tard que plus tard
Posté le 06-11-2007 à 10:21:17  profilanswer
 

Montre voir comment t'as imbriqué tes tests (si t'as changé quelque chose parce que j'en doute...)

 

Et sinon, t'as déjà entendu parler de switch ?


Message édité par mcyrb le 06-11-2007 à 10:26:15
n°1637404
Joel F
Real men use unique_ptr
Posté le 06-11-2007 à 10:24:34  profilanswer
 

la portée d'un else, c'est son if associé.

 
Code :
  1. if(a == 255)      b = 1;
  2. else if(a ==  40) b = 2;
  3. else              b = 3;
 

On est pas en PASCAL :o


Message édité par Joel F le 06-11-2007 à 10:24:42
n°1637671
lsdYoYo
gravity powered
Posté le 06-11-2007 à 15:20:10  profilanswer
 

+1: regardes aussi du côté de l'instruction "switch".
ET n'oublie pas les "break;" entre chaque "case"  :D


Message édité par lsdYoYo le 06-11-2007 à 15:21:42
n°1637811
mrpropre00​7
Posté le 06-11-2007 à 19:36:15  profilanswer
 

Ok je vais mettre un switch a la place :)
Je vous tiens au courant... mais je crois bien que j'ai un probleme d'interpretation de niveaux de gris sous photoshop car ca parait bizarre que ca marche pas quand meme !

mood
Publicité
Posté le 06-11-2007 à 19:36:15  profilanswer
 

n°1637814
mrpropre00​7
Posté le 06-11-2007 à 19:45:15  profilanswer
 

Ca réagit de la meme maniere, je pense donc que le probleme ne vient pas du code, mais de photoshop... je dois aps créer le bon fichier en niveaux de gris :(

n°1637815
tpierron
Posté le 06-11-2007 à 19:47:37  profilanswer
 

Par curiosité, tu pourrais poster ton code ?


Message édité par tpierron le 06-11-2007 à 19:56:16
n°1638000
mrpropre00​7
Posté le 07-11-2007 à 10:16:59  profilanswer
 

Et voila pour le bout de code ;)
 
 

Code :
  1. long int couleur;
  2. ima=recup_raw();
  3. for (i=0;i<lig ; i++)
  4.   {
  5.       for (j=0 ; j<col; j++)
  6.       {
  7.         couleur=ima[i][j];
  8.         switch(couleur){
  9.                 case 255 : terrain[i][j]='.';
  10.                              break;
  11.                 case 15 : terrain[i][j]=’X’;      // Car j’ai dessiné les ennemis X avec le niveau de gris 15 sous photoshop.
  12.                              break;
  13.                 case 0 : terrain[i][j]=SYMBOLE_MUR;  // Symbole mur initialisé en define #define SYMBOLE_MUR 43
  14.                              break;
  15.                 }
  16.       } 
  17.   }


 
:)


Message édité par mrpropre007 le 07-11-2007 à 10:23:30
n°1638396
lsdYoYo
gravity powered
Posté le 07-11-2007 à 16:01:41  profilanswer
 

Un petit conseil : ajoute un "default:" à ton "switch" et affecte une valeur bidon à "terrrain[i][j]" pour tester.

n°1640552
mrpropre00​7
Posté le 09-11-2007 à 21:56:29  profilanswer
 

C'est bon le probleme est résolu. Le souci ne venait donc bien pas du code mais du fait que photoshop code ses couleurs comme une merde :)
Avec un niveau de gris de 40 en décimal, il renvoie 134 ... allez savoir pourquoi !
 
Merci a tous ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Exploiter un fichier .raw

 

Sujets relatifs
[HTML/PHP] Ouvrir un fichier pdf avec un mot surlignéExploiter Données fichiers csv sur excel
Probleme formulaire d'upload, renommer le fichierRecuperer des valeurs dans un fichier xls.
fichier iso[Résolu] Lecture dans un fichier avec GetPrivateProfileString
Codage noms de fichier Windows et serveur FTP[php] lire dans un fichier
envoyer un fichier en methode POST[batch dos RESOLU] lire nombre dans fichier et l'exploiter pour calcul
Plus de sujets relatifs à : Exploiter un fichier .raw


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR