// Pacman par X5K MaStEr X5K et John
// A commencé le 10 septembre 2001
// Nous avons utilisé du code provenant de :
// Distorsion
// Par Karl Hornell, 10 juin 1996
// pour nous mettre en route. Merci Karl !
importer [Link].*;
import [Link].*;
import [Link];
importer [Link].*;
importer [Link];
importer [Link];
public final class Pacman extends [Link] implements Runnable {
Fil updateThread; // fil dans lequel le jeu s'exécute
long startTime; // utilisé pour suivre le timing et pour p
empêcher l'applet de s'exécuter trop rapidement
Graphiques gBuf; // utilisé pour des graphiques en double tampon
Image imgBuf; // également utilisé pour les graphiques en double tampon
static final int MAX_X = 400; // la largeur maximale que peut avoir l'écran de jeu
static final int MAX_Y = 400; // la hauteur maximale que peut atteindre l'écran de jeu
public void init()
{
// Faites en sorte que la fenêtre de l'applet ait la taille que nous souhaitons
redimensionner(MAX_X, MAX_Y);
// Charger les images que nous allons utiliser depuis le web
getMainGraphics();
// Appel de ramassage des ordures. Pas vraiment nécessaire.
[Link]();
// Faire un fond noir
setBackground([Link]);
// Configurer des graphiques en double tampon.
Cela nous permet de dessiner sans scintillement.
imgBuf = créerImage(MAX_X, MAX_Y);
gBuf = [Link]();
// essayer de saisir le focus du clavier.
demanderFocalisation();
}
public void getMainGraphics() // Load and process the most common graphics
{
MediaTracker tracker;
int i = 0;
tracker = new MediaTracker(this);
// ce code ne charge encore aucune graphique !
essayer
{
[Link]();
}
attraper (InterruptedException e)
{
}
public void run()
{
// C'est la méthode la plus importante. Elle boucle sur et
// encore une fois alors que le jeu est en cours. Cela fait les appels
// qui déplacent les choses puis les dessinent.
tant que (updateThread != null)
{
essayer
{
// ce code ralentit l'applet s'il est sur un vraiment
machine rapide
long sleepTime = [Link](startTime, [Link])
Millis(), 20);
[Link](sleepTime);
}
attraper (InterruptedException e)
{
}
startTime = [Link]() + 40;
// DESSINEZ DES CHOSES ICI :
// effacer ce que nous avons dessiné la dernière fois.
[Link](0, 0, MAX_X, MAX_Y);
// définir la couleur de dessin
[Link]([Link]);
// dessiner un rectangle pour l'instant.
[Link](10, 10, 50, 50);
// repaint() appellera paint(Graphics) qui appellera update(Gr
graphismes)
repeindre();
}
}
// Cette méthode est appelée lorsque l'applet est exécuté.
// It initiallizes the thread and gets things going.
public void start()
{
si (updateThread == null)
{
updateThread = new Thread(this, "Jeu");
[Link]();
startTime = [Link]();
}
}
// Cette méthode est appelée lorsque l'applet est arrêtée.
public void arrêter()
{
updateThread = null;
}
public boolean keyDown([Link] e, int key)
{
// Cette méthode gère les pressions de touche.
// For now all the statements are placeholders.
C'est agréable d'avoir une instruction d'impression ici.
// il peut être rapidement décommenté et la sortie
// utilisé pour obtenir les keycodes puisque je suis trop paresseux pour
// cherchez-les.
//[Link](clé);
si (key == 1006) // flèche droite
{
return false;
}
si (clé == 1007) // flèche gauche
{
retourne faux;
}
si (key == 1004) // flèche vers le haut
{
return false;
}
si (key == 1005) // flèche vers le bas
{
retourner faux;
}
si (clé == 32) // touche d'espace
{
retourner faux;
}
si (touche == 112) // touche 'P'
{
retourner faux;
}
retourner faux;
}
public boolean keyUp([Link] e, int key)
{
// Cette méthode est appelée lorsqu'une touche est relâchée.
pour l'instant, cela n'a que des espaces réservés.
si (key == 1006 key == 1007) // clé gauche ou droite relâchée
{
retourner faux;
}
si (touche == 1004 touche == 1005) // touche haut ou bas relâchée.
{
retourner faux;
}
si (touche == 32) // barre d'espace relâchée
{
retourner faux;
}
renvoyer faux;
}
// Pour assurer la compatibilité avec Java 1.1, demander le focus sur mouseDown
public boolean sourisEnfoncée([Link] e, int x, int y)
{
demanderConcentration();
retourner faux;
}
public void dessiner(Graphics g) // Dessiner le panneau de contrôle et autres
{
Puisqu'il n'y a pas de frontières ni quoi que ce soit
// statique pour dessiner mais nous n'avons besoin d'appeler que
// la méthode de mise à jour.
mettre à jour(g);
}
public void mettreÀJour(Graphics g)
{
// dessiner le tampon hors écran sur l'écran !
// Ce tampon a été dessiné par la méthode run()
// et par toutes les méthodes que run() pourrait avoir appelées.
[Link](imgBuf, 0, 0, this);