Sujet 13, Quak e

Transcription

Sujet 13, Quak e
Julien Mairal
Sujet 13, Quake
Stéphane Lescuyer
21 juin 2004
1
Table des matières
1. Méthodes de travail
2. XBsp
3. Xquake
4. Le début d’une extension réseau.
2
1
Méthodes de travail
Différentes phases
étude des algorithmes et des structures
Programmation en parallèle de Xbsp et de Xquake
Deboguage commun
Programmation an parallèle des extensions
Deboguage commun
Rédaction du rapport, de la notice, et des transparents.
1.1
–
–
–
–
–
–
3
1.2
Les outils utilisés
– Une CVS
– Java et la librairie AWT
– LATEXet Dia pour le rapport et les transparents.
4
2
XBsp
5
2.1.1
2.1
L’édition des murs
Les arbres BSP
class Mur
Liste des murs
existants
Construction
Dessin
Dessin
class ListeMurs
– Quatre classes Mur, ListeMurs, Dessin, GestionSouris
class Dessin
Affichage Murs
Creation Mur
Edition Mur Courant
class GestionSouris
Clics souris
Mouvement Curseur
6
2.1.2
Insertion dans l’arbre
class XBsp
Arbre BSP courant
class XSegment
Intersection
Decoupage
Positionnement
class ArbreException
Insertion
class Bsp
– Six classes Dessin, XBsp, Mur, XSegment, Bsp, ArbreException
class Dessin
Creation Mur
class Mur
Liste des murs
existants
Intersection
7
2
3b
2
3f
1
Exemple d’insertion : le mur 3 dans le monde formé des murs 1 et 2
1
3
8
APRES
XSegment 3f
XSegment 3b
XSegment 2
XSegment 1
1.0f
0.66f
Mur 3
0.66f
0.0f
Mur 3
1.0f
0.0f
Mur 2
1.0f
0.0f
Mur 1
Les murs et les segments en mémoire après cette insertion
AVANT
Mur 3
Mur 2
Mur 2
Mur 1
Mur 1
9
2.1.3
L’optimisation
class ArbreException
Separation
Choix XSegment
Optimisation
class BspCompiler
class ListeSegs
Conversion ListeSegs
class ListeMurs
– Six classes : XBsp, Mur, BspCompiler, XSegment, ListeSegs,
ArbreException
class XBsp
ListeMurs courante
Decoupage
Intersection
class XSegment
Arbre BSP courant
class Mur
Liste des murs
existants
Intersection
Positionnement
– Optimisation en O(n2 )
10
2.1.4
L’affichage de l’arbre
Affichage Arbre
class DessinArbre
class Bsp
Dessin
Calcul du placement
et dessin des deux
sous-arbres
Dessin
class XSegment
– Cinq classes : XBsp, DessinArbre, GestionSourisArbre, Bsp,
XSegment,
class XBsp
Arbre BSP courant
Deplacement dans
le Canvas
class GestionSourisArbre
Glisser-Deplacer
– Algorithme de Reingold-Tilford en O(n)
11
2.2
–
–
–
–
Problèmes rencontrés
Problème d’affichage : flickering dans les Canvas
Problème de la pertinence des optimisations optimistes
La seule vraie méthode consisterait à tester tous les ordres
d’insertion possible et serait donc en O(n!), ce qui n’est pas
acceptable dès que n dépasse quelques unités.
Problème d’arrondis dans les calculs de produit scalaire pour
positionner les segments les uns par rapport aux autres
Problème des murs qui sont concourants et qui donnent lieu à des
segments minuscules voire nuls
Pour régler ces problèmes, introduction de l’exception
ArbreException
12
1
3b
2
3f
On teste donc avec l’autre extremite
Ici on ne peut rien dire, le produit scalaire est
trop proche de 0.0
Pas de probleme, on voit que ce segment
est du cote de la normale
13
1
3b
2
4
3f
ArbreException est levee :
le mur n’est pas insere
14
Cas problematique typique
3
Xquake
15
3.1.1
3.1
L’affichage d’un mur
L’affichage
mur
droite d’horizon
Calcul de la hauteur sur l’écran d’un "piquet" visible :
ouverture visuelle verticale : 30 degrés
écran
distance focale
16
zone 1
mur
zone 0
ouverture visuelle horizontale : 40 degrés
Calcul des coordonnées horizontales
zone 2
zone 3
écran
B
17
A
projeté de A sur l’écran
projeté de B sur l’écran
projeté de B sur le cône visible
3.2
2
2f
2b
L’algorithme du peintre
1
3
18
4
3
3
2b
J
2
1
2f
1
3.3
La gestion des collisions
Joueur
B
vectjb
(futurX, futurY)
La traversée d’un mur.
vectmur
3.3.1
A
vectja
19
3.3.2
2
2f
2b
3
O(log(n)) murs en moyenne à tester
1
3
20
2b
J
1
2f
3.4.1
3.4
Les classes principales
Structure du programme
– 20 classes
– Xquake : (Frame) choix des paramètres
– Visumonde : (Frame) accueil de l’application principale
– Monde : (Canvas) accueil des graphismes.
– BSPmurmonde et Murmonde : Les murs et les arbres BSP créés
par XBsp doivent être convertis pour être utilisables.
– Joueur : gestion des paramètres du joueur.
21
3.4.2
Les classes I/O
– Des classes "Listener" : GestionSourisMonde,
GestionKlavierMonde, GestionFocus
– Des threads qui gèrent les événements : GestionKlavierThread,
GestionSourisThread
– Un thread d’affichage Threadaffichage : le monde continue
d’évoluer entre deux affichages.
22
3.5
L’aspect ludique, les sprites
Fig. 1 – Les différents sprites du jeu
23
3.6
Le but du jeu : manger tous les pingouins
24
3.7
2b
La structure idéale
Joueur
J
3
BSPTREE
1
25
2f
S2
listesprites
S1
S3
3.8
Les problèmes rencontrés
– La gestion du clavier.
– Des problèmes de scheduling : Selon les machines la vitesse du
joueur peut parfois être inférieure à celle des sprites. Peut-être
faudrait-il calibrer les temps de latence des threads à chaque
lancement de l’applicaton ?
– Pas de problème de flottants cependant, comme nous aurions pu
nous y attendre.
26
4
4.1
Le début d’une extension réseau.
XquakeClient, XquakeServer, XquakeClientUI
– Cinq classes : XQuakeServer, ThreadedClientManager,
XQuakeClient, ThreadedClientListener, XQuakeClientUI
27
class XQuakeServer
TCM
TCM
TCM
TCM
Nouveau TCM
Message de connexion au serveur
28
class XQuakeClient
TSL
TSL
TSL
TSL
class XQuakeClientUI
4.2
L’adaptation de Xquake
– La classe SpriteJoueur : un tout début d’implémentation.
– Le client doit gérer les collisions de son propre joueur uniquement
et donner le chemin du joueur dans l’arbre BSP au serveur.
– le client doit demander au serveur les positions des sprites ainsi
que leurs "chemins" dans l’arbre BSP.
– le serveur gère les collisions des pingouins, leurs déplacements ainsi
que leurs "chemins" dans l’arbre.
– le serveur gère le "gobage des pingouins".
29
Conclusion
30