Collision

Sujets variés concernant le développement en PureBasic
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonjour Soldat !

Merci pour tous ces programmes. :)

J'ai fait les tests avec mon ordinateur :

AMD 3GHz
512 Mo
affichage FX5200

pour 10000 balles (c'est pas cher ... :wink: )
En suprimant l'affichage du debbuger:

Premier prog:

test1=6.703 s
test2=5.672 s

deuxième prog:

test1=6.359 s
test2=5.781 s


Extra :lol:

Je n'ai pas essayé en utilisant des tableaux pour voir la différence.

Pour Crystal Noir:

et ben puisque c comme ca je boude na !
Non ! ne t'en va pas. :lol:

J'ai bien récupéré ton code sur le site mais j'ai un petit problème avec. J'utilise la dernière version de Pure 3.92 et lorsque je compile j'ai le message suivant:
Erreur syntaxe ligne 4 dans include procédures.pb

ligne 4 : Bullet()x = x
je pense qu'il devrait y avoir bullet()\x=x

mais même là il me répète la même chose :(

Alors je ne vois pas 8O

Mais dans l'ensemble, jai étudié les listings et c'est super. Je vois que les listes chaînées non plus de secrets pour toi. Ni pour le soldat inconnu d'ailleur.

Merci pour tous ces progs. :lol:

Il ne me reste plus qu'a avoir des idées pour mettre tout ça en pratique. :roll: :idea:

A+

André
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

oui tout à fait en fait il manque le \ car le forum me les as squizzé

Par contre si tu pouvais me dire le message d'erreur que tu as exactement. De toute facon je vais le corriger.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

test1=6.703 s
test2=5.672 s

deuxième prog:

test1=6.359 s
test2=5.781 s
Les valeurs sont dans le même ordre que sur mon programme ?

moi j'ai ceci avec mon dernier code sur le 500 de mes parents (avec 10000 balles)
- Méthode 1 : 5978
- Méthode 2 : 11106
- Par contre, avec un tableau, on va beaucoup plus vite qu'avec une liste chainée, avec 10000 balles, j'obtients 1332ms

Image


et ça fait une très grosse différence par rapport à toi entre les 2 méthodes avec les listes chainée

et entre 5978 (sur mon 500) et 6359 (sur ton 3000), je trouve que ton PC est un poil à la ramasse ;) :lol:

Tu as PB à jour ?





Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.92
; 
; Explication du programme :
; Faire un test entre chaque valeur d'une liste chainée
; cette exemple s'appuie sur des balles en position X Y, le test qui n'est pas représenté ici est une collision

Structure InfoBalle
  x.l
  y.l
  ; etc ....
EndStructure

NewList Balle.InfoBalle()

NbBalles = 4

; On ajoute #NbBalles balles
For n = 1 To NbBalles
  AddElement(Balle())
  Balle()\x = n
  Balle()\y = n
Next

PosListeBalle1 = -1
ResetList(Balle())
; Boucle 1
While NextElement(Balle()) ; On passe à l'élément suivant
  PosListeBalle1 + 1 ; On compte pour connaître le numéro de l'élément
  *BalleTemp.InfoBalle = @Balle() ; On récupère l'élément courant de la boucle 1
  
  PosListeBalle2 = -1
  ResetList(Balle())
   ; Boucle 2
  While NextElement(Balle()) ; On passe à l'élément suivant
    PosListeBalle2 + 1 ; On compte pour connaître le numéro de l'élément
    
    ; On compare la balle à la position PosListeBalle1 dans la boucle 1 avec celle à la position PosListeBalle2 dans la boucle 2
    If PosListeBalle1 <> PosListeBalle2 ; Ce test sert à éviter d'avoir le test sur la même balle
      Debug Str(*BalleTemp\x) + ", " + Str(*BalleTemp\y) + " / " + Str(Balle()\x) + ", " + Str(Balle()\y) 
    EndIf
    
  Wend
  ChangeCurrentElement(Balle(), *BalleTemp) ; On remet l'élément courant de la boucle 1
Wend



;- Test de rapidité

ClearList(Balle())
NbBalles = 10000

; On ajoute NbBalles balles
For n = 1 To NbBalles
  AddElement(Balle())
  Balle()\x = n
  Balle()\y = n
Next

Temps1 = GetTickCount_()

PosListeBalle1 = -1
ResetList(Balle())
While NextElement(Balle())
  PosListeBalle1 + 1
  *BalleTemp.InfoBalle = @Balle()
  
  PosListeBalle2 = -1
  ResetList(Balle())
  While NextElement(Balle())
    PosListeBalle2 + 1
    If PosListeBalle1 <> PosListeBalle2
      Debug Str(*BalleTemp\x) + ", " + Str(*BalleTemp\y) + " / " + Str(Balle()\x) + ", " + Str(Balle()\y) 
    EndIf
  Wend
  ChangeCurrentElement(Balle(), *BalleTemp)
Wend

Temps2 = GetTickCount_()

ResetList(Balle())
While NextElement(Balle())
  PosListeBalle = ListIndex(Balle())
  *BalleTemp.InfoBalle = @Balle()
  
  ResetList(Balle())
  While NextElement(Balle())
    If PosListeBalle <> ListIndex(Balle())
      Debug Str(*BalleTemp\x) + ", " + Str(*BalleTemp\y) + " / " + Str(Balle()\x) + ", " + Str(Balle()\y) 
    EndIf
  Wend
  SelectElement(Balle(), PosListeBalle)
Wend

Temps3 = GetTickCount_()

; On teste avec un tableau
; d'abord, on recopie les données dans un tableau pour travailler sur le même échantillon
Dim TableauBalle.InfoBalle(NbBalles - 1)
ResetList(Balle())
For n = 0 To NbBalles - 1
  NextElement(Balle())
  TableauBalle(n)\x = Balle()\x
  TableauBalle(n)\y = Balle()\y
Next

Temps4 = GetTickCount_()

For n = 0 To NbBalles - 1
  For nn = 0 To NbBalles - 1
    If n <> nn
      Debug Str(TableauBalle(n)\x) + ", " + Str(TableauBalle(n)\y) + " / " + Str(TableauBalle(nn)\x) + ", " + Str(TableauBalle(nn)\y) 
    EndIf
  Next
Next

Temps5 = GetTickCount_()

MessageRequester("Rapidité", "Méthode 1 = " + Str(Temps2 - Temps1) + Chr(10) + "Méthode 2 = " + Str(Temps3 - Temps2) + Chr(10) + "Méthode 3 (Tableau) = " + Str(Temps5 - Temps4), 0)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonjour Crystal Noir.

Je te donne le message d'erreur complet. Dans mon précédent post je l'avais un peu tronqué. :oops:

Ligne 121:Error in the included file 'C\procedures.pb
ligne 4:Syntax Error

Bon je part pour Marseille dans une heure. Je verrai ça Dimanche soir si tu as corrigé sinon je ferai un cherché remplacé sur toutes les expressions de la structure.

A+ et encore merci

André.
cookie
Messages : 71
Inscription : mar. 27/janv./2004 21:08
Contact :

Message par cookie »

@soldat inconnu: d'accord avec toi
méthode 1: 954
méthode 2: 1718
méthode 3(tableau): 297

(j'ai un athlon 2600+)
Cookie
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

C'est corrigé mais je l'ai pas ici, je te met ca en ligne dès lundi :p
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonsoir Soldat !

Bon je rentre de Marseille et je viens de voir vos réponses.
et ça fait une très grosse différence par rapport à toi entre les 2 méthodes avec les listes chainée

et entre 5978 (sur mon 500) et 6359 (sur ton 3000), je trouve que ton PC est un poil à la ramasse

Tu as PB à jour ?
Ben...J'ai la 3.92 enfin je croyais car il m'a fallu tout désinstaller et réinstaller la 3.91 puis la mise à jour pour que ça fonctionne correctement.
Sauf pour SmartUpdater qui me donne toujours ce message :

SmartUpdater tool not found in the Pure basic directory.

Pourtant il est bien à sa place :(

Enfin pour le reste je te donne les résultats:

Méthode 1: 813
Méthode 2: 1515
Méthode 3: 281

Ya pas à dire c'est autre chose :lol:

Bon d'accord c'est plus rapide avec les tableaux, mais c'est aussi moins souple d'emploi. Je pense qu'il faut les réserver à des application assez simple.

Merci pour ces test et surtout pour les annotations du listing. C'est super et très clair. :lol:


Pour Crystal Noir:
C'est corrigé mais je l'ai pas ici, je te met ca en ligne dès lundi :p

Merci :lol:

A+
Répondre