JYY , je ne comprends pas ta fonction BoxCollide :
je dois lui passer quoi ?
je te montre mon code :
/ / pour les futurs tests de collisions
SDL_Rect balle;
balle.x = Xposb;
balle.y = Yposb;
balle.w = 15; / / balle.bmp = 15*15 pixels
balle.h = 15;
SDL_Rect raquette2;
raquette2.x = Xpos2;
raquette2.y = Ypos2;
raquette2.w = 10; / / raquette1.bmp = 10*50 pixels
raquette2.h = 50;
j´ai donc deux structures balle et raquette
if ( BoxCollide ( & , &2 ) == 0 ) / /collision ?
{
XD=0; / / la balle change de sens
goto next;
}
voila en gros mon code , il compile mais la balle est . .. bizarre
elle descend et monte le long de l´écran , a gauche , derriere la raquette 1 . ..
hihi, non, c´est l´inverse : c´est quand c´est ==1 que c´est collision, 0 c´est si ça ne touche pas, donc normal que ce soit bizarre, tu la fais rebondir en permanence, lol !
sonic66 > ta structure réponse stocke des int, pourquoi ?
tu n´as pas besoin de cette structure, tu peux faire :
struct fraction rep;
/ / et oui, c´est une fraction aussi ! pas besoin de déclarer un nouveau type de strutcure !
et evidemment, apres, tu fais :
rep.num
et
rep.denom
si tu pouvais m´expliquer rapidement comment marche ta fonction , parceque , commencer avec un
!
des tests , et suivre avec des && et || , j´avoue que je suis perdu
j´ai pense que si la focntion renvoyait zero , il y avait collision , sinon elle renvoyait un , c´est bien ca ?
1 --> collision
2 --> pas collision
principe en français
j´appelle :
x1,y1 ( coin supérieur gauche boite 1)
w1,h1 ( largeur hauteur boite 1)
pareil pour 2
Le principe : les boites se chevauchent si et seulement si
une ligne horizontal de la boite passe entre les 2 lignes de l´autre
pareil pour les verticales.
ce qui donne :
pour x
x1<x2<x1+w1 OU x1<x2+w2<x1+w1
si tu n´as pas ça, meme pas la peine de tester les y : tu peux sortir, ça ne touche pas ( 1er if)
si tu l´as, alors il faut aussi tester les y
y1<y2<y1+h1 OU y1<y2+h2<y1+h1
si tu n´as pas ce cas, tu sors.
Si tu n´es pas sorti c´est que ça touche ! ![]()
oups, je voulais bien sur dir :
1 --> collision
0 --> pas collision
c´est soit 0, soit 1.
Il s´agit du 2e algo de collision le plus simple.
on parle d´algo de collision AABB ( Axes Aligned Bouding Box)
Il y a la meme chose en 3D : tu ajoutes un 3e if, et tu testes aussi facilement si 2 parallelépipedes se touchent...
si il fait un if ( (test_x) && ( test_y))
si le premier n´est pas vrai, ca ne regardera pas le second. Donc ca peut simplifier son algo mais je suis pas sur.
Deja, on peut le simlpifier avec la loi de Morgan qui dit que :
! (a && b) < => ! a || ! b
et
! (a || b) < => ! a && ! b
ça fait intervenir les algebres de boole ![]()
mais j´ai fait ça vite fait, lol ![]()
oui oui
arrete tu vas leur faire peur !
joke.
" ensuite, pour ta fraction, n´oublie pas les parentheses ! !
( 1/2.0)*(1/3.0)* . . .."
en ce moment on est en train de travailler la dessus en cours... structures de données abstraites. C´est bien sympthique aussi.
XyTiX >
Tien si t´aimes bien les structures de données :
on a parlé de ce cas y´a pas longtemps, compile moi ça, et lance le
http://rafb.net/paste/results/DENtz289.html
" la loi de Morgan"
ouhlala ! ! heresie ! ! . . la loi de *De* Morgan bien sur............ comment ca je chipote ? ? ; )
En effet, c´est monsieur De Morgan ![]()
il est si important que ca " De Morgan " LGV ?
parceque , sa loi , elle me parait un peu bidon :
pas de a et b si pas de a ou pas de b , super !
Sinon , JeanYvesYves , j´ai reussi à implémenter ton code , ca marche , mais pas tout le temps bizarrement , parfois la balle passe a travers la raquette ( nan nan , c´est pas moi qui suis mauvais
) , il doit y avoir un cas particulier dont ton algo ne tient pas compte . ..
En fait , pour l´effet de rémanence , il disparait si je me met en SWURFACE , FULLSCREEN seulement , c´est bizarre mais le jeu est plus rapide et la balle ne clignote pas si je mets ca a la place de HWSURFACE , DOUBLEBUF et NOFRAME . .. j´aurais cru l´inverse mais bon , les faits sont la
pour tout les impatients , une version jouable bientot ![]()
ah ?
en FUllSCREEN, je suis ok, car la carte graphique est faite pour.
Mais, une fois en fullscreen, ça change si on met HW ou SW ? ? en ce qui concerne la balle ?
wow ! !
Bref, sinon, pour mon algo, je l´ai refait de tete, y´a surement une erreur qui a du se glisser, ça se corrige !
j´ai relu mon algo, je ne vois pas ou ça peut foirer, enfin bref.
Erreur classique, vérifie ça :
quand tu touches, que fais tu ?
tu changes juste de sens ?
si tu fais juste ça, alors, disons que ta direction vx = -1
tu touches, donc tu changes de sens, donc vx=1
MAIS ! ! Quand tu repars, si tu es DANS la raquette, et que tu retestes, peut etre que a la prochaine fois, la collision te renvoie que tu touches toujours, et la, tu rechanges de sens et tu repars vers la raquette, alors que tu ne devrais pas
Tu devrais protéger ta collision :
si vx=-1 && collision_raquette_gauche, alors vx=1
si vx=1 && collision_raquette_droite, alors vx=-1
car si tu entres dans le cas :
if vx=1 && collision_raquette_gauche, la il ne faut rien faire, il faut laisser ta balle partir, tu vois ce que je veux dire ?
Bah , en Software , le jeu est rapide et ne clignote pas
en Hardware , la balle clignote et j´ai des ralentissements
mais mon ordi a peu etre pas de vram aussi , je sais pas trop ce que c´est , il a trois ans et 256 mo de ram , mais apres . ..
par contre , pour ton algo , en fait c´est moi qui suis nul ^^ mais pas dans le jeu , dans la progr ^^ :
j´avais mis :
if ( BoxCollide ( &2 , & ) ==1 )
mais en fait , il semblerait qu´il faille
if ( BoxCollide ( & , &2 ) == 1 ) . ..
bizarre
non, normalement, l´ordre n´a pas d´importance, si tes boites sont bien faites.
Vérifie ce que j´ai marqué ci dessus.
Etonnant pour l´histoire du HW_SURFACE
essaie de voir si tes images sont chargées en RAM ou en VRAM, car souvent, y´a un
if ( echec VRAM) essaie RAM
faut voir s´il va dans le if.
Bref, peut etre aussi que ton jeu va TROP vite
Ben , j´ajoute un systeme de comptage des points , et je reposte ( j´essaie ) mon jeu sur le site . ..
Mais , je me posais la question d´une intelligence artificielle : meme pour un pong , ca me semble difficile : je dois anticiper les deplacements de la balle c´est ca ?
A la limite , je pense reussir a faire une ai imbattable , mais bon , pour le joueur c´est pas suepr itneressant , alors comment determiner une perte de balle ?
a la limite , un random a chaque fois , mais si le joueur sait que l´ordi fait expres de perdre , c´est pas interessant non plus . ..
Euh bon suis aller mater tes tuto JeanYves et gg mi suis mi la jai comme complilateur Devcpp ^^
mais quand je compile ceci :
int main()
{
cout < < " Yop ! ";
cin.get();
cout < < " re ^^";
cin.get();
system("pause");
return 0;
}
( tire du tuto...)et bien sa ne marque pas un mot juste : appuyer sur une touche...etc :s
eneleve cin get je vois pas pourquoi tu le mais !
int main()
{
cout<<"Yop ! "<<endl;
cout<< " re ^^";<<endl;
system("pause");
return 0;
}
pas besoin de mettre cin get et pour passé a la ligne fait endl; ![]()