PONG

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 13 oct. 2005 à 21:13
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 26 oct. 2005 à 15:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34191-pong

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 oct. 2005 à 15:13
JulioDelphi ( Membre Club )
:=
"
hello
bah si ton bateau est dans un TImage tu as la propriété TRANSPARENT et tu mets TRUE, saches ke la couleur transparente sera la pixel inférieure gauche (ds le cas de ton bateau ça ne doit pas poser de soucis), et si c'est dans un TBitmap tu as la propriété TRANSPARENTCOLOR (ki attend un TColor)
voila mon ami :) bon coding ! "

Ben voila je pense que Juliodelphi a repondu indirectement a ma question ...
Slt
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
24 oct. 2005 à 22:57
Ca je sais mais je voulais te dire(en tt cas ac Delhi7) que qd tu ne definis pas manuellement ta couleur de transparence et que tu mets juste ds l inspecteur d object ton Timage a transparent := true Je pense que ca prend la couleur la + dominante et que ca la mets en couleur de transparence ...

Suis je fou ???

Ciao
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
21 oct. 2005 à 20:15
Slt,

La transparence fonctionne comme pour une image GIF. C'est toi qui décide la couleur qui ne sera pas afficher. C'est très pratique pour utiliser des sprites.
Pour cela, tu dois déclarer que tu veux la trasparence et définir la couleur :

Var BMP : TBitmap;

BMP.Transparent := True;
BMP.TransparentColor := RGB(255, 0, 0); // Pour choisir la couleur rouge

A mon avis, pour ton vert, je pense que ce n'est qu'une valeur qui se trouvait là par hasard. cela aurait pu être n'importe la quelle.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
19 oct. 2005 à 20:46
J aurai une petite question a te poser :
la transparence Ac deplhi est elle gerer par rapport a la couleur la plus dominate ds l image?

Je veux dire par la que par exemple s il y a plus de vert ds une image par rapport aux autres couleurs alors le vert sera transparent ?
Parce que j ai fait plusieurs test et c est cela qu il m est sorti comme conclusion...
NB: en mettant juste ds le Timage transparent a true
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
19 oct. 2005 à 19:43
Slt,

Je n'avais pas fait attention que tu "stretchais" les bonus. Pour ça, j'utilise la fonction CopyRect. Mais contrairement à Draw, le CopyRect ne reconnais pas la transparence.
Je ne connaissais pas la fonction StretchDraw, j'vais essayer ça et voir ce que cela donne avec
la transparence.

Merci à toi.
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
19 oct. 2005 à 19:42
Slt,

Je n'avais pas fait attention que tu "stretchais" les bonus. Pour ça, j'utilise la fonction CopyRect. Mais contrairement à Draw, le CopyRect ne reconnais pas la transparence.
Je ne connaissais pas la fonction StretchDraw, j'vais essayer ça et voir ce que cela donne avec
la transparence.

Merci à toi.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
18 oct. 2005 à 21:09
j ai trouve il suffit d utiliser
bonus1.Canvas.StretchDraw
pr faire ce qu on veut
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
18 oct. 2005 à 21:06
Oui ca marche pas de prob g essayer ac un bonus ...
le seul inconvenient est qu ac la fonction Draw , il n y a pas moyen de faire respecter la fonction Strech donc je dois re dimensionner ou tt mes bitmap ou tt mes t images sauf si ta une sol

Merci
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
18 oct. 2005 à 20:55
Oh excuse c est moi qui est fait une faute qd tu m a ecris ca

Bonus1.Canvas.Draw(0, 0, Bonus[1, 1]);

je pensais a ca


form1.Canvas.Draw(0, 0, Bonus[1, 1]);

Et donc la pas moyen sans ce prendre la tete ...

Sinon c est clair que ca va marcher normalement

je vais faire ca tt de suite
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
18 oct. 2005 à 19:35
Slt,

Pour ta détection, j'ai respecté ton algorithme. Je sauve les sprites dans un tBitmap et je les balance dans ton tImage "Bonus1". Tu peux donc toujours utiliser le "top" et "Left" de "Bonus1" qui reste un tImage.

Bonus1.Canvas.Draw(0, 0, Bonus[1, 1]);
\-> mettre le tBitmap "Bonus[1, 1]" dans le tImage "Bonus1" aux coordonnées (0, 0)

J'avoue que je n'ai pas testé mais je ne vois pas ce qui pourrait coincer.

Pour rendre le PC moins performant, j'ai pensé à :
- vitesse de la raquette plus lente que la balle
- démarrage plus lent
- régler la vitesse par un random
C'est vrai que ce n'est pas évident de le ralentir tout en restant crédible.

Peut-être regarder un humain jouer et noter ses défauts pour les reprogrammer.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
17 oct. 2005 à 21:44
Oh les gars vis a vis de la note je m en fous pas mal des sales points mais dites au moins prq
ca serait cool comme ca j essayerai d ameliorer ...
C est comme ca que ca marche je pense , non ???

Merci
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
17 oct. 2005 à 21:09
Slt Eddithehead,
Tout d abbord je voudrais te dire que ta methode est assez interressante mais ds ce cas ci ne me convient pas car la methode de detection de collision utilise la place des images(donc: left top) et la largeur et hauteur de celles ci(...)

Donc il faudrait remettre des variables supplementaires a chacun des bonus pr savoir detecter les collisions (du - ac cette methode si tu en connait une autre je prends !!!) , ce qui serait possibles mais assez contraignant et pas fort interressant je pense .

Deuxiemement je n arrive pas a trouver une technique pr rendre "+ nul " le PC !!!
J ai essaye plusieurs trucs mais rien ne marche ...

Slt
nico
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
15 oct. 2005 à 21:41
Slt,

Pendant le déroulement du jeu, tu recharges tes bonus à chaque fois à partir du disque dur.
Même s'ils se stockent dans la mémoire cache, prend l'habitude de les charger une seul fois.
Tu devrais plutot faire quelque chose de ce genre (+ faire jouer le CPU avec la raquette2) :

Déclaration :
-----------
Var Bonus : Array [1..3, 1..4] Of TBitmap; // 3 bonus, 4 animations par bonus

...

Procedure TForm1.FormCreate(Sender: TObject);
Const NomBonus : Array [1..3, 1..4] Of String = (('bonus1a', 'bonus1b', 'bonus1c', 'bonus1d'),
('bonus2a', 'bonus2b', 'bonus2c', 'bonus2d'),
('bonus3a', 'bonus3b', 'bonus3c', 'bonus3d'));
Var CptBonus, CptAnim : Byte;
Begin
...
// Chargement des Sprites "Bonus"
For CptBonus := 1 To 3 Do
For CptAnim := 1 To 4 Do
Begin
Bonus[CptBonus, CptAnim] := TBitmap.Create;
Bonus[CptBonus, CptAnim].LoadFromFile(NomBonus[CptBonus,CptAnim]+'.bmp');
End;
...
End;

Procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction);
Var CptBonus, CptAnim : Byte;
Begin
For CptBonus := 1 To 3 Do
For CptAnim := 1 To 4 Do
Bonus[CptBonus, CptAnim].Free; // Très important, libérer la mémoire
End;

Procedure TForm1.DeplacementTimer(Sender: TObject);
Begin
...

// pour garder ton algorithme
If TextBonus1 = 10 Then Bonus1.Canvas.Draw(0, 0, Bonus[1, 1]);
If TextBonus1 = 20 Then Bonus1.Canvas.Draw(0, 0, Bonus[1, 2]);
If TextBonus1 = 30 Then Bonus1.Canvas.Draw(0, 0, Bonus[1, 3]);
If TextBonus1 = 40 Then Bonus1.Canvas.Draw(0, 0, Bonus[1, 4]);

...

// A la place de la procédure TForm1.FormKeyPress
// La raquette suit la balle
// A faire : trouver un algorithme pour pénaliser le CPU, sinon le ne va jamais perdre
Raquette2.Left := Balle.Left - (Raquette2.Width Div 2);
// Test de dépassement du bord gauche
If Raquette2.Left <= 0 Then Raquette2.Left := 0;
// Test de dépassement du bord droit
If Raquette2.Left+Raquette2.Width >= Width Then Raquette2.Left := Width - Raquette2.Width;

...
End;


Bon jeu ...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
13 oct. 2005 à 22:21
Je viens de me rendre compte d une erreur % au Bonus3
La vitesse n augmente pas vu que je la remet a chaque fois a 5(ou-5) qd elle touche le mur ...
+ si la vity:=-5 elle diminue(plus que je fait+1)

Enfin voila ...
Je corrigerais ca demain pas le tps today !

Ciao
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
13 oct. 2005 à 21:13
Bon ce prog c est vraiment pr passer ou meme TUER le tps donc ...
Les touches pr le Joueur2 sont Q(gauche) et D(droite)
La liste des Bonus devrait bientot augmenter ...
Ciao
Rejoignez-nous