PONG3D : GLSCENE

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 26 févr. 2006 à 20:31
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011 - 27 juil. 2008 à 23:07
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/36252-pong3d-glscene

nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011
27 juil. 2008 à 23:07
les composants ou peut on les trouver ?
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
8 mars 2006 à 21:26
bon regarder l Historique des mises à jour et Explication finale ,

merci a ce site

( et surtout aux gens presents sur se site , c'est grace a vous qu'il est si genial :) )
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
7 mars 2006 à 22:39
brouillard , gestion du ciel(a completer) et encore beaucoup d'idees mais tjs manque de temps ...

Ciao
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
7 mars 2006 à 22:24
Bon ca y est j'ai remis a jours , donc j'ai ajoute une procedure pause ou on peut mettre par exemple un fichier 3d ou on verrai l'object s'animer mais bon comme je n'ai pas de createur 3d j'ai juste fait une rotation de la camera autour de la balle .
Alors j'ai fait (beaucoup dire ca !!! J'ai juste utilise Glfire ...) une sorte d'explosion qd on touche les murs

Corriger qq conneries

Bon c'est maintenant que je l'ai poste que je vient de penser qu'il n'y a tjs pas un systeme de score max ou qqun peut gagner donc ca sera encore remis a jour ...

ciao
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
3 mars 2006 à 19:05
oui oui just !
c'est reglé mais je changerais le zip apres une + grosse MAJ
Alors la balle est assez grande? et la camera ,ca va?
Ciao
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
3 mars 2006 à 07:09
salut!


n'oublis pas de virer cela du cadencer :

// -------------------------------------------------------------------------------
// Infos !!! ds 1 label pr etre precis .... !
// -------------------------------------------------------------------------------
label1.Caption:='Score du Joueur 1 ' + inttostr(ScoreJ1);
label2.Caption:='Score du Joueur 2 ' + inttostr(ScoreJ2);
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
28 févr. 2006 à 22:20
bon ca y est j'ai modif un peu le code , la cam ne bouge plus qu'en on est a un seul joueur , j'ai grossit de 2 * la balle et change les textures du ciel (qui est devenu sphérique par la meme occasion ! ) .

Bon j'ai plein d'autres idees , genre une intro de debut ,etc ...
Mais le prob c'est que j'ai pas le temps !
Dur d'avoir une vie sociale !!!
Allez Ciao

Je regarderai peut etre a ca tard ce soir ...
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
28 févr. 2006 à 18:27
attend, y'a un truc qui ne vas pas la ...
la camera!

impossible de voir comment on doit se deplacer.
on ne sait pas ou se trouve le joueur 1 et le joueur 2
on ne vois pas la balle (c'est quoi ce point rouge ??)

tu n'est pas obliger d'utiliser du BMP pour les texture, tu peu mettre du JPG ce qui serat plus leger.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
28 févr. 2006 à 15:53
avec cette version , tt ce fait ac des mouvements fluides car elle bouge de 0,1 en 0,1 et encore dans la version que j'ai mis sur le site ca n'a rien a voir car je met un chiffre bcp plus petit mais bon ... je changerais ca qd j'aurais le tps .
Mais regarde le jeu et dis moi si tu vois des "bonds " de la raquette ?

Merci

Et Merci de tt tes conseils et explications

Ciao
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 févr. 2006 à 23:16
alors non pour l'ia, car ta raquette fait des "bonds" de position en position sans faire de mouvement fluide. (elle triche en gros)
donc utilise ma methode (je l'utilise dans mon GLPong fait aussi avec GLScene et ça marche super bien)

pour le compteur FPS et affichage des score, oui ça apporte beaucoup!
non seulement les performance sont meilleurs et de plus l'affichage est plus controlable.
pour la lisibilitée c'est du kif kif.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
27 févr. 2006 à 01:52
if J1.Checked=true then
begin

// La raquette suit la balle
if balle.DistanceTo(raquette2)<100 then
begin

with raquette2.Position do
begin
if X>balle.Position.X then x:=x-0.1;
if Xballe.Position.Y then y:=y-0.1;
if Y<balle.Position.Y then y:=y+0.1;
end;

ou le 0.1 doit changer par rapport a la dificulte :)
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
27 févr. 2006 à 01:47
euh ... serieusement est ce que ecrire ca
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption :format('Pong 3d FPS %.2f',[GLScene.FramesPerSecond]);
glscene.ResetPerformanceMonitor;
label1.Caption := format('Score du Joueur 1 %d',[ScoreJ1]);
label2.Caption := format('Score du Joueur 2 %d',[ScoreJ2]);
end;
apporte vraiment qqch de plus fort parce que moi je trouve que ca n'apporte rien en lisibilité


Pour l'intelligence artificille on peut faire un truc du genre

if balle.distanceto(raquette2) < UnNombre alors
debut
if raquette.pos.x>balle...x then raquette.pos.x:=raquette.pos.x-UnChiffre
if raquette.pos.x<balle...x then raquette.pos.x:=raquette.pos.x+UnChiffre

idem pour la pos en Y

Et le chiffre creer l'handicap pour la raquette , non ???
Bon j'pense que ca peut marcher comme ca
et ou Unnombre doit etre determiner pourdonner le tps de reaction a l'adversaire

fin
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
27 févr. 2006 à 01:38
Bon no problemo , je me plonge dans tt ca et si jamais g un blem j'espere que tu seras encore la pour y repondre en tps reel !

Ciao
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 févr. 2006 à 01:06
modif pour les variables :

TTriPoint = record
X,Y,Z : single;
end;

TQuadSpeed = record
Vb, Vx,Vy,Vz : single;
end;

var
Form1 : TForm1;
Vitesse : TQuadSpeed;
AxPos, AxMin, AxMax : TTriPoint;
ScoreJ1, ScoreJ2 : integer;
MoveLeftLock : boolean = true;
MoveRightLock : boolean = true;
MoveUpLock : boolean = true;
MoveDownLock : boolean = true;

___________________________________

modif pour le compteur de FPS :

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption :format('Pong 3d FPS %.2f',[GLScene.FramesPerSecond]);
glscene.ResetPerformanceMonitor;
label1.Caption := format('Score du Joueur 1 %d',[ScoreJ1]);
label2.Caption := format('Score du Joueur 2 %d',[ScoreJ2]);
end;

___________________________________

modif de la boucle :

procedure TForm1.BoucleProgress(Sender: TObject; const deltaTime,newTime: Double);
begin
GestionCollision.CheckCollisions;

if D1.Checked then Vitesse.Vb := 0.01;
if D2.Checked then Vitesse.Vb := 0.02;
if D3.Checked then Vitesse.Vb := 0.03;
if D4.Checked then Vitesse.Vb := 0.05;

with Cam1.Position do begin
if AxPos.Z < 0 then SetPoint(AxPos.X,25,-80);
if AxPos.Z > 0 then SetPoint(AxPos.X,25,80);
end;

with Balle.Position do begin
X := X + Vitesse.Vx;
Y := Y + Vitesse.Vy;
Z := Z + Vitesse.Vz;
end;

with Raquette1.Position do begin
if (IsKeyDown(VK_RIGHT)) and (MoveRightLock) then X := X - 0.1;
if (IsKeyDown(VK_LEFT)) and (MoveDownLock) then X := X + 0.1;
if X < -47.5 then X:= -47.5;
if X > 47.5 then X:= 47.5;

if (IsKeyDown(VK_DOWN)) and (MoveUpLock) then Y := Y - 0.1;
if (IsKeyDown(VK_UP)) and (MoveUpLock) then Y := Y + 0.1;
if Y < 2.5 then Y := 2.5;
if Y > 47.5 then Y := 47.5;
end;

with Raquette2.Position do begin
if (IsKeyDown(83)) and (MoveRightLock) then X := X - 0.1;
if (IsKeyDown(70)) and (MoveDownLock) then X := X + 0.1;
if X < -47.5 then X := -47.5;
if X > 47.5 then X := 47.5;

if (IsKeyDown(68)) and (MoveUpLock) then Y := Y - 0.1;
if (IsKeyDown(69)) and (MoveUpLock) then Y := Y + 0.1;
if Y < 2.5 then Y := 2.5;
if Y > 47.5 then Y := 47.5;
end;

If not (AxPos.X < AxMax.X) then begin
Vitesse.Vx := -Vitesse.Vb;
Mur1.Material.Texture.ImageGamma := 2;
end;
Mur1.Material.Texture.ImageGamma := 1;

If not (AxPos.X > AxMin.X) then begin
Vitesse.Vx := Vitesse.Vb;
Mur2.Material.Texture.ImageGamma := 2;
end;
Mur2.Material.Texture.ImageGamma := 1;

if AxPos.Z < (AxMin.Z - 25) then begin
balle.Position.X := 0;
balle.Position.Y := 0;
balle.Position.Z := 0;
inc(ScoreJ2);
end;

if AxPos.Z > (AxMax.Z + 25) then begin
balle.Position.X:=0;
balle.Position.Y:=0;
balle.Position.Z:=0;
inc(ScoreJ1);
end;

if AxPos.Y > AxMax.Y then Vitesse.Vy := -Vitesse.Vb;
if AxPos.Y < AxMin.Y then Vitesse.Vy := Vitesse.Vb;

if J1.Checked then begin
{gestion IA}
// if AxPos.Z > 25 then begin
// raquette2.Position.X := balle.Position.X ;
// raquette2.Position.Y := balle.Position.Y ;
// end;
If raquette2.Position.X <= AxMin.X Then raquette2.Position.X := AxMin.X;
If raquette2.Position.X >= AxMax.X Then raquette2.Position.X := AxMax.X - 5;
end;

AxPos.X := balle.Position.X;
AxPos.Y := balle.Position.Y;
AxPos.Z := balle.Position.Z;
end;

___________________________________

gestion de l'ia (a adapter et a mettre dans la boucle) :

// si la balle viens dans la direction de la raquette CPU
// et surtout quand elle arrive a la moitiée du terrain
if Ball.Direction.Z < [moitiée du terrain] then begin
// si la balle vas vers la gauche on deplace la raquette a gauche
if Ball.Position.X - RaqCPU.Position.X < 0 then RaqCPU.Direction.x := -1
else

// si la balle vas a droite on deplace la raquette a droite
if Ball.Position.X - RaqCPU.Position.X >= 0 then RaqCPU.Direction.x := 1;

// pour stopper la raquette quand elle se trouve sur la tajectoire de la balle
if not inrange(RaqCPU.Position.X, Ball.Position.X - 0.2, Ball.Position.X + 0.2) then
RaqCPU.Move(CPURaqSpeed);
end;

___________________________________

modif FormCreate :

procedure TForm1.FormCreate(Sender: TObject);
begin
menu.Items.AutoCheck:=true;
ScoreJ1 := 0;
ScoreJ2 := 0;
AxMax.X := Mur1.Position.x-1;
AxMin.X := Mur2.Position.x+1;
AxMax.Y := Plafond.Position.Y-1;
AxMin.Y := sol.Position.Y+1;
AxMax.Z := Raquette2.Position.Z-1;
AxMin.Z := Raquette1.Position.Z+1;
cam1.TargetObject := balle;
if D1.Checked then Vitesse.Vb := 0.01;
if D2.Checked then Vitesse.Vb := 0.02;
if D3.Checked then Vitesse.Vb := 0.03;
if D4.Checked then Vitesse.Vb := 0.05;
Vitesse.Vx := -0.005;
Vitesse.Vy := -vitesse.Vb;
Vitesse.Vz := vitesse.Vb;
with Raquette1.Material.Texture do begin
ImageGamma:=2;
Image.LoadFromFile('Raquette1.bmp');
Enabled:=true;
end;
with Raquette2.Material.Texture do begin
ImageGamma:=2;
Image.LoadFromFile('Raquette2.bmp');
Enabled:=true;
end;
with Ciel.Material.Texture do begin
ImageGamma:=2;
Image.LoadFromFile('sky2.bmp');
Enabled:=true;
end;
with mur1.Material.Texture do begin
Image.LoadFromFile('Wall28.bmp');
Enabled:=true;
end;
mur2.Material := mur1.Material;
with Sol.Material.Texture do begin
ImageGamma:=3;
Image.LoadFromFile('Wall28.bmp');
Enabled:=true;
end;
plafond.Material := sol.Material;
end;

___________________________________

voila reste a modifier le reste... bon courage pour adapter l'IA
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 févr. 2006 à 20:34
Bord** ! je l'ai peut etre ajoute dans le code mais pas a moi en tt cas ! lire Inteligence a l'intelignece et normalement a normalemnt !
Bon ce qui est des accents suis trop faineant desole !
Ciao
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 févr. 2006 à 20:31
l'intelignece artificielle est maintenant dispo mais recherche d'une procedure pour l'affaiblir car elle est normalemnt imbatable

Ciao
PS: Pour le son je vais encore attendre car Fmod et GlBass ne marche pas chez moi (bug !)
Rejoignez-nous