Le meilleur est surement http://www.developpez.com , où tu trouveras par exemple le cours de Christian Casteyde :
http://www.developpez.com/c/tutcpp/book1.php
J´ai une question qui porte, il me semble, sur la technique plus que sur le langage lui-même.
J´utilise Visual Studio . NET. Il apparait que
BOOL y soit
typedef int BOOL;
TRUE y soit
FALSE y soit
J´aimerais savoir, quel est l´intérêt d´utiliser BOOL ? Pourquoi ne pas simplement utiliser le bool miniscule ordinaire ? Surtout que l´IDE met bool, true et false en bleu mais pas BOOL, TRUE et FALSE. Et dans le cas où il faudrait retourner un int, pourquoi ne pas utiliser le type int ?
errr...
FALSE y soit
pas 1 ![]()
BOOL existait avant bool : en C pas de bool, donc cela explique qu´il existe encore aujourd´hui de nombreuses librairies qui emploient cette notation, ne serais ce que par héritage de composant employant cette même notation.
Maintenant l´usage de l´une ou l´autre de ces notations dépens surtout du compilateur et de l´architecture d´exécution du code :
Si on reprends ton exemple, BOOL est en fait un int.
Or d´après la norme du C++ ( ANSI/ISO) :
1 < = sizeof(bool) < = size(long)
Oui oui, < = sizeof(long), c´est peut être idiot, mais c´est comme ca.
Ah mon avis BOOL est plus intéressant puisqu´utilisant à coup sûr le type int qui présente l´avantage d´être le type entier natif d´une machine sur laquelle le programme sera compilé.
Cependant bool peut prendre moins de place s´il est stocké sur un octet ( quoique j´ai lu que certains systèmes dont le type natif est int, stockent les chars sur des demi-int ( laissant ainsi une partie de la mémoire inutilisée), sauf cas des données consécutives : tableaux )
Bon en général on a plutôt tendance à emplyer bool, car type " officiel".
Mais la meilleure solution reste d´utiliser, dans le cas ou l´on doit faire usage de plusieures valeures booléennes, un système de flags ou on se sert des bits d´un unsigned int ou d´un unsigned char comme booléens. Grâce aux opératuer biwise et au masquage, on allie puissance, rapidité et faible encombrement en mémoire ![]()
Qu´est ce c´est le modulo(%) ?
L´opérateur modulo, tel que : a%b te permet d´obtenir le reste dans la division ENTIERE de a par b.
Ainsi : 7%4 = 3, 8%3 = 2, 6%3 = 0.
Cependant, l´opérateur modulo lorsqu´il est employé de très nombreuses fois successivement dans la boucle principale d´un jeu par exemple, peut nuire aux performances étant donné sa nature assez gourmande.
Une manière de l´utiliser tout en conservant une très bonne vitesse d´exécution consiste à n´employer que des puissances de 2 pour le diviseur ( ou du moins aussi souvent que possible) et d´effectuer un masquage.
Ainsi : 17 % 8 == 17 & 0x7 == 17 & 7
En effet, les reste possibles dans la division par 8 sont 0,1,2,3,4,5,6,7, donc en masquant les 3 dernier bits seulement, on obtient le reste dans cette division.
De même : 13 % 4 == 13 & 0x3 == 13 & 3
Donc, pour effectuer une opération modulo en utilisant une puissance de 2, il suffit simplement d´utiliser :
x & ( y-1)
Où x est le nombre quelquonsque à moduler ( pas forcément puissance de 2) et y est la puissance de 2 employée pour moduler ( on retranche 1 donc)
Bon ceci dit si tu ne t´en sert que peu dans la boucle d´un jeu ou que ton programme n´est pas orienté performance, mieux vaut conserver l´usage de % qui donne un code plus clair ![]()
Merci, mais je voudrais aussi savoir comment on fait avec la SDL pour ne blitter qu´une partie de l´image qu´on a charger ?
Il faut que tu utilise la fonction :
SDL_BlitSurface(image, &, ecran, &);
Où :
image est le pointeur vers ta SDL_Surface contenant ton image à afficher.
zone est un SDL_Rect qui détermine quelle partie de l´image tu veux afficher.
Imaginons que tu dispose d´une image de 20x30 pixels qui est en fait composée de 3 étape d´animation d´un sprite de 20x10 pixels.
Pour obtenir l´image du millieux, utilise :
SDL_Rect zone;
zone.x = 0; / / Pixel à partir duquel on copie l´image horizontalement
zone.y = 10; / / Pixel à partir duquel on copie l´image verticalement
zone.h = 10; / / Hauteur de la zone à copier
zone.w = 20; / / Largeur de la zone à copier
Ou plus court :
SDL_Rect zone = {0,10,10,20};
Pour obtenir l´image tout en bas :
SDL_Rect zone = {0,20,10,20};
Ou celle tout en haut :
SDL_Rect zone = {0,0,10,20};
Ecran est un pointeur vers la SDL_Surface représentant ton écran.
destination est un SDL_Rect dont seule les composantes x et y sont utilisées : elle définissent la position de ton image à l´écran.
Voila ![]()
Salut lag-it, j´ai plusieurs questions à te poser à propos de TIGCC ( je suis un débutant total) comment est ce que je peux faire pour afficher une image de présentation lorce que je lance mon prog sur ma ti89 ?
Et je voulais savoir aussi comment creer des lignes, des points,etc...
est-ce que vous connaissez un BON site pour apprendre à faire la 3D ? Merci ![]()
bon tuto 3D :
http://nehe.gamedev.net
sinon, je crois que lag-it a répondu a tout ![]()
mon opinion sur BOOL ou bool :
BERK ! !! ( ce type de merde prend 4 octets)
autant mettre direct un int ! ( ou alors un char, bien qu´avec l´alignement mémoire, on n´est pas sur d´y gagner), ou alors passer par masquage avec flags, comme disait lag-it ![]()
mais il faut faire gaffe parce que dans certain langage ( je ne croit pas en C, mais se pourrait dépandre des compilo) ( int)true==-1 et non pas 1 Ce qui peut provoquer des erreurs stupides.
de ttes facons on utilise jamais la valeur numerique de true. et true n´est pas 1, true est tout sauf zero.
en tous cas en toute rigueur. essayez de mettre un boolén a 1231, et regardez si votre boleen vaut true ou false, genre
bool B = 12;
if ( bool) cout < < " true";
else cout < < " false";
donc true vaut bien tout sauf zero. sauf effectivement dans certains langages ou le type boolen n´est pas implementé et qu´on a un type booléen fait par typedef....
salut je cherche les refs d´un bouquin ou d´un tutos si possible en francais sur l´opengl
( pourquoi en francais parceque en prog il y a enormement de termes techniques à abordé et la trdustions de ceux si n´est pas forcement dans mon cerveau donc perso je prefere un tuto francais pour les bases et continuer avec des tutos english)
ensuite pour opengl peut t´on équiper devc++ avec ou devrais-je resortir mon visual c++6
et ou puis je trouver cette libs et est ce que c´est payant
( je compte programmer en C avec)
dans l´ordre :
télécharges le Redbook 1.2, c´est le mieux ; il me semble qu´il existe une version française ( numérique je ne sais pas, mais au moins imprimée si tu veux l´acheter ; les PDF sont gratuits)
tu peux utiliser les libs OpenGL avec n´importe quel compilateur, voire OS ; c´est connu pour la portabilité, ce n´est pas une légende :D
ces libs sont déjà dans ton PC, les OS les embarquent avec eux ; tu peux éventuellement vouloir des libs complémentaires, comme glut, que tu trouveras facilement via un coup de google ( opengl.org, ça existe si je me rappelle bien)
et ce n´est pas payant
Je confirme l´existance du redbook en français version papier déja. ( ou alors il y a chez moi un livre qui vient d´une autre dimension...)
merci de m´avoir repondu y a pas longtemps pour ma recherche de sites
si vous en avez d´autre n´hesitez pas surtout
( comme ca je referais plusieurs fois les memes themes et je les connaitrais mieux)
Je télécharge les fichiers pour opengl. J´mets dans include GL.h et GLUT.h, et dans lib glaux.h et glut.h. Ensuite, je mets un bout de code, je compile, ça met :
gl/glut.h : No such files or directory
Help-me plz ![]()
Salut. Ca fait comme moi pour la SDL. Essaie gl.h ou glut.h, c´est ce que j´ai fait et ca marche.