Posté le 09/12/2013 13:45
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 240 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 21/03/2014 20:26 | #
en fait je voudrais mettre tout les éléments de la structure à 0
en gros
tableau[2][2].id=0;
tableau[2][2].tinvoc=0;
tableau[2][2].attack=0;
...
mais tableau[2][2]={0}; ne marche pas et je voudrais une solution pas trop longue
Citer : Posté le 21/03/2014 20:30 | #
Eh bien
{
tableau[i].type = 0;
tableau[i].id = 0;
tableau[i].tinvoc = 0;
// etc
}
Par contre, je ne vois pas vraiment l'intérêt, puisque tu va les remplir après en chargeant tes données.
Et puis, pourquoi deux dimensions ?
Citer : Posté le 22/03/2014 08:50 | #
En fait, ça représente le plateau de jeu yugioh qui fait 5*4 cases. Donc il me faut un tableau à deux dimensions pour le representer facilement, dans chaque case, il y a le type de cartes(magie, piège effet, normal), l id de la carte, le type d'invocation (attaque , defense ou caché), une valeur pour savoir s'il a deja attaque, une autre pour savoir s'il a déjà changé d'état (attaque <> defense < cache )
Citer : Posté le 22/03/2014 09:00 | #
Ah ! Je pensais qu'il s'agissait de la liste des monstres.
Tu ne peux pas affecter une valeur à tous les éléments d'une structure d'un coup, puisque ces éléments n'ont pas tous la même taille.
En revanche, je peux te proposer ça (à utiliser avec précaution, je ne l'ai pas testé)
ptr = (unsigned char *)(&structure);
for(i=0;i<sizeof(structure);i++) *ptr++ = 0;
Explication:
- On initialise un pointeur de type unsigned char à l'adresse de la structure.
- Puisque cette fois-ci, sizeof nous renvoie bien la taille en octets de la structure, on boucle sur toute la structure et on met les octets à 0.
Attention néanmoins: si une variable fait plusieurs octets, alors tous les octets, hauts et bas, seront mis à 0. Le code ne fait pas attention à quels octets sont à alloués à quelle variable.
Citer : Posté le 22/03/2014 19:49 | #
pour passer un tableau de structure dans une fonction,je fais
struct Card
{
int type;
int id;
int tinvoc;
int attack;
int switchstate;
int effect;
Phase timeffect;
};
fonction1(){
Card buffer[2]={0};
buffer[0].id=3;
fonction2(buffer);
}
fonction2(Card tab[2]){
tab[0].id=10;
tab[1].id=20;
tab[0].id=30;
}
mais quand j'affiche les id dans la fonction1, ça ne se modifie pas, l'id n'a pas changé, comment s'est possible?
Faut il que je fasse (*tab[0]).id=10; ou tab[0]->id=10;
Citer : Posté le 22/03/2014 20:34 | #
Ben non, évidemment que l'id n'est pas changé
Puisque tu passes tout ton tableau de structures en paramètre de ta fonction, celui-ci est copié.
Voilà ce qu'il faut faire.
{
int type;
int id;
int tinvoc;
int attack;
int switchstate;
int effect;
Phase timeffect;
} Card; // pour simplifier
fonction1()
{
Card buffer[2]={0};
// Cette instruction fonctionne-t-elle ?
buffer[0].id=3;
fonction2(buffer);
}
fonction2(Card *tab)
{
*tab.id=10;
*(tab+1).id=20;
*tab.id=30;
}
Si je ne me suis trompé nulle part, ça devrait fonctionner.
Citer : Posté le 22/03/2014 20:35 | #
{
tab->id=10;
(tab+1)->id=20;
tab->id=30;
}
Ajouté le 22/03/2014 à 20:43 :
effectivement, voila la syntaxe correcte (vérifié sur compilateur)
{
tab->id=1;//pour le tab[0]
tab[1].id=2;
}
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 23/03/2014 10:37 | #
Ben non, évidemment que l'id n'est pas changé
Puisque tu passes tout ton tableau de structures en paramètre de ta fonction, celui-ci est copié.
Voilà ce qu'il faut faire.
{
*tab.id=10;
*(tab+1).id=20;
*tab.id=30;
}
En fait, il faudrait faire
{
(*tab).id=10;
(*(tab+1)).id=20;
(*tab).id=30;
}
Mais vu que les programmeurs sont feignants, -> remplace le (*tab).xxx :
{
tab->id=10;
tab->id=20;
tab->id=30;
}
Ajouté le 23/03/2014 à 10:38 :
Bref, voir ici pour plus d'infos => http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/pointeur-de-structure
Citer : Posté le 07/04/2014 19:21 | #
je vais faire une fonction pour inverser les tableaux pour ML_bmp
ex; 01111001 devient 10011110
mais je ne sais pas comment faire? est ce qu'il existe un truc comme ^,| ou &?
Citer : Posté le 07/04/2014 19:25 | #
Avec & tu peux isoler un bit, je crois.
Du genre :
Citer : Posté le 07/04/2014 19:31 | #
Fait 0xFF - var
avec une boucle, un sprite de 8*8 est vite fait
Citer : Posté le 07/04/2014 19:55 | #
0xFF - var
en clair je fais 255(0xFF) - la valeur à inverser
Citer : Posté le 07/04/2014 20:08 | #
Tu fais valeur max - valeur actuelle.
Sur 8 bits, ça fait 255-valeur.
Exemple, 255-23 = 232.
00010111 devient 1110100.
Citer : Posté le 07/04/2014 20:10 | #
00010111 devient 11101000.
tu veux dire?
Ajouté le 07/04/2014 à 20:10 :
en tout cas, ça vas m'aider pour ma future MoveLib
Citer : Posté le 07/04/2014 20:12 | #
J'ai corrigé l'erreur, je ne sais pas si tu as vu ^^'
L'exemple illustre bien le processus, non ?
23 (00010111) devient 232 (11101000) après l'opération.
Citer : Posté le 08/04/2014 17:15 | #
int i;
for(i=0;i<size;i++){
bmp[i]=0xFF-bmp[i];
}
}
est ce que c'est bon?
Citer : Posté le 08/04/2014 17:19 | #
Oui, c'est bon.
Citer : Posté le 08/04/2014 18:39 | #
Par contre, là tu ne retourne que des sprites de 8*hauteur.
Pour les autres, ça sera un peu plus complexe.
Citer : Posté le 08/04/2014 19:20 | #
C'est quoi des sorites ;)(même mon correcteur d'orthographe reconnaît sorite )?
Pour les sorites 8*8 je sais comment sait comment sais coder mais en dessus je n'en ai aucune idée
Citer : Posté le 08/04/2014 19:26 | #
En fait, le problème est le suivant.
Considérons un sprite de 8*x de large.
Après inversion, il est transformé en
Ce qui déjà est différent de l'objectif recherché.
De plus, prenons un sprite de 8*x+3 de large.
Après inversion, cela donne
Et là, les bits significatifs de l'octet de fin disparaissent.
Citer : Posté le 08/04/2014 19:48 | #
En fait, le problème est le suivant.
Considérons un sprite de 8*x de large.
Après inversion, il est transformé en
ça s'est bon pour les sprites 8*x
Mais pour les sprites 16*x, c'est ça le problème
Je pense que c'est coder comme ça (exemple pour un bmp de 20*x)
en rouge, l'image codé et en bleu, des bites non utilisées dans l'image
et le problème c'est que en inversant le dernier octet, je devrais faire
c'est ça