Projet de java avec interface graphique

Projet de java avec interface graphique à télécharger
Comment le lancer?
Une fois décompressé, il faut le compiler de préférence sous Windows : javac *.java ; puis lancer java Menu pour avoir le programme Interface/Java;
Ou bien java Pacseul pour n'avoir que le jeu Pacman sans l'interface. Car un des avantages du développement du mini-projet 2 en 1, est que l'interface est totalement indépendante du jeu lui-même, et que le lien entre les 2 se fait grâce au passage de paramètres la surcharge de constructeur et les liens Observer/Observable...
Pourquoi sous Windows? Parce qu'on a eu des pbs de focus notamment, résolus sous Windows mais toujours effectifs sur Sun.(Alors qu'il ne devrait pas y avoir de problème de portabilité)
Une fois le jeu complet lance:
Alors apparait notre menu principal de l'interface (source Menu.java), qui possède 4 fonctionnalités
*1 afficher la table des records
*2 afficher le menu de jeu simple
*3 afficher le menu des options
*4 quitter le jeu
…
Vous pourrez télécharger le fichier au format zip il contient le code sources les classes, les modules, les images et le support d’utilisation sous format PDF.
Aperçu du codage de certaines classes de l’application :
Classe « Fantome » :
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
import java.lang.*;
public class Fantome extends SpritePourPacman {
// herite de Sprite
// Toolkit tk;
// Image banque[]; // banque de sprite
// Image image; // image courante
// int longSprite,largSprite; // devrais depaendre de chaque image ....
// int XP,YP;
// int seqAnim[];
// int tempsEntreImage,TEI;
// int step=0; // ou on en est de l'animation
// Thread t;
//herite de SpritePourPacman
// int XC,YC;
// int direction; // 0=immobile 1=dte -1=gauche 2=haut -2=bas
// int directionD ; //direction Demandee
// int vitesse; // de 1 a 10
// int v; // temporaire
// Tablo tab;
// boolean bloque=false;
// etat 0 normal 1 peur 2 Oeil
String couleur;
Pacman pac;
Image imHaut;
Image imBas;
int seqMove[]={0,5 ,1,5 ,-1,-1};
public Fantome(int xc,int yc,String couleur,int vit,Tablo tab,Pacman p) {
super(xc,yc,0,0,40,40,vit,tab);
// remplacer \\ par separator (pour iounix)
// separator=\\ pour win separator=/ pour unix
String listeImage[]={"images\\ghost_"+couleur+"_lower_0.gif",//0
"images\\ghost_"+couleur+"_lower_1.gif",//1
"images\\ghost_"+couleur+"_east.gif",//2
"images\\ghost_"+couleur+"_west.gif",//3
"images\\ghost_"+couleur+"_north.gif",//4
"images\\ghost_"+couleur+"_south.gif",//5
"images\\ghost_eyes_east.gif",//6
"images\\ghost_eyes_west.gif",//7
"images\\ghost_eyes_north.gif",//8
"images\\ghost_eyes_south.gif",//9
"images\\ghost_scared.gif"};//10
System.out.println("Loading Fantome dataz ....");
banque=loadImage(listeImage,tab.c);
seqAnim=seqMove;
//3 vitesses pour fantome (correspondant a 3 etats)
//normal, peur, yeux (variable de 1 a 12)
int vitessedebase = 6;
vitesse0 = vitessedebase;
vitesse1 = vitessedebase - 4;
vitesse2 = vitessedebase + 6;
etat(0); // etat normal
pac=p;
this.couleur=couleur;
}
public Fantome(int xc,int yc,String couleur,int vit,Tablo tab,Pacman p,int fantvitesse) {
//un peu de surcharge de constructeur
super(xc,yc,0,0,40,40,vit,tab);
// remplacer \\ par separator (pour iounix)
String listeImage[]={"images\\ghost_"+couleur+"_lower_0.gif",//0
"images\\ghost_"+couleur+"_lower_1.gif",//1
"images\\ghost_"+couleur+"_east.gif",//2
"images\\ghost_"+couleur+"_west.gif",//3
"images\\ghost_"+couleur+"_north.gif",//4
"images\\ghost_"+couleur+"_south.gif",//5
"images\\ghost_eyes_east.gif",//6
"images\\ghost_eyes_west.gif",//7
"images\\ghost_eyes_north.gif",//8
"images\\ghost_eyes_south.gif",//9
"images\\ghost_scared.gif"};//10
System.out.println("Loading Fantome dataz ....");
banque=loadImage(listeImage,tab.c);
seqAnim=seqMove;
//3 vitesses pour fantome (correspondant a 3 etats)
//normal, peur, yeux (variable de 1 a 12)
// int vitessedebase = 6;
int vitessedebase = fantvitesse;
vitesse0 = vitessedebase;
vitesse1 = vitessedebase - 4;
vitesse2 = vitessedebase + 6;
etat(0); // etat normal
pac=p;
this.couleur=couleur;
}
private int abs(int a){ // pfffff j'la trouve pas ca me gave
if (a<0) return -a;
else return a;
} // pop pop c fait
// redefinie pour le Fantome pour chasser le Pacmass
public void surUneCase() {
// changement de dir
if (etat == 2) { // etat = oeil >> on retourne a la base
int diffX,diffY;
diffX=XP-tab.XBase;
diffY=YP-tab.YBase;
if (abs(diffX) > abs(diffY))
if (diffX > 0)
directionD=-1; // on va vers lui
else
directionD=1;
else
if (diffY > 0)
directionD=2;
else
directionD=-2;
if (direction == directionD) // on va ds la direction demandee
if (onPeutAllerVers(direction))
allerVers(direction);
else { // on va qd meme pas se bloquer ds un mur
pafLeMur(diffX,diffY);
}
else // on voudrais change de direction
if (onPeutAllerVers(directionD)) { // on peut changer
allerVers(directionD);
direction=directionD;
}
else // on ne peut pas changer
if (onPeutAllerVers(direction))
allerVers(direction);
else { // on va pas se bloquer ds un mur II
pafLeMur(diffX,diffY);
}
}
else { // on va pas a la base
int diffX,diffY;
diffX=XP-pac.XP;
diffY=YP-pac.YP;
if (abs(diffX) > abs(diffY))
if (diffX > 0)
if (etat==0) // si on veut manger le pacman
directionD=-1; // on va vers lui
else // sinon
directionD=1; // on s'en eloigne
else
if (etat==0) directionD=1;
else directionD=-1;
else
if (diffY > 0)
if (etat==0) directionD=2;
else directionD=-2;
else
if (etat==0) directionD=-2;
else directionD=2;
if (direction == directionD) // on va ds la direction demandee
if (onPeutAllerVers(direction))
allerVers(direction);
else { // on va qd meme pas se bloquer ds un mur
pafLeMur(diffX,diffY);
}
else // on voudrais change de direction
if (onPeutAllerVers(directionD)) { // on peut changer
allerVers(directionD);
direction=directionD;
}
else // on ne peut pas changer
if (onPeutAllerVers(direction))
allerVers(direction);
else { // on va pas se bloquer ds un mur II
pafLeMur(diffX,diffY);
}
}
}
public void pafLeMur(int diffX,int diffY){
int directionC; // direction de correction
if (etat == 2) { // oeil
switch (direction) {
// case 0: System.out.println("bouh") ;break;
case 1: // on allais vers la dte ...
if (diffY>0) {
// pour bien corriger faudrais aller vers le haut
directionC=2;
// si on veut manger il faudrais aller vers le haut (2)
// mais si on veut fuir il faudrais aller vers le bas (-2)
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
else {
directionC=-2;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
break;
case -1:
if (diffY>0) {
directionC=2 ;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}else{
directionC=-2 ;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
break;
case 2:
if (diffX>0) {
directionC=-1 ;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
} else {
directionC=1 ;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
break;
case -2:
if (diffX>0) {
directionC=-1 ;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
} else {
directionC=1 ;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
}
}
else {
switch (direction) {
case 0: System.out.println("bouh") ;break;
case 1: // on allais vers la dte ...
if (diffY>0) {
// pour bien corriger faudrais aller vers le haut
if (etat==0) directionC=2 ; else directionC=-2;
// si on veut manger il faudrais aller vers le haut (2)
// mais si on veut fuir il faudrais aller vers le bas (-2)
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
else {
if (etat==0) directionC=-2 ; else directionC=2;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
break;
case -1:
if (diffY>0) {
if (etat==0) directionC=2 ; else directionC=-2;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}else{
if (etat==0) directionC=-2 ; else directionC=2;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
break;
case 2:
if (diffX>0) {
if (etat==0) directionC=-1 ; else directionC=1;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
} else {
if (etat==0) directionC=1 ; else directionC=-1;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
break;
case -2:
if (diffX>0) {
if (etat==0) directionC=-1 ; else directionC=1;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
} else {
if (etat==0) directionC=1 ; else directionC=-1;
if (onPeutAllerVers(directionC)) //ok
direction=directionC ;
else
direction=-directionC ; // tant pi ... demi tour
}
}
}
}
public boolean anim(int seq[]){
TEI++;
if (step == seq.length) // on a finit
return true; // on a finit la seq
else
if (TEI >= tempsEntreImage) {
if (seq[step] == -1) // on boucle
step=0;
imBas=banque[seq[step++]];
tempsEntreImage=seq[step++];
TEI=0;
}
return false; // on a pas finit la seq
}
public void allerVers(int d) {
v++;
switch (d) {
// case 0: if (! bloque) seqAnim=seqDte ; break;
case 1: // on va vers la dte
if (v+vitesse >= 10) {
XP=XP+1; if (XP%20 == 0) XC++ ; v=0;
}
switch (etat){
case 0: imHaut=banque[2]; break; // normal
case 1: imHaut=banque[10] ; break; // peur
case 2: imHaut=banque[6] ; break; // oeil
}
break;
case -1: // on va vers la gauche
if (v+vitesse >= 10) {
XP=XP-1; if (XP%20 == 0) XC-- ; v=0;
}
switch (etat){
case 0: imHaut=banque[3]; break; // normal
case 1: imHaut=banque[10] ; break; // peur
case 2: imHaut=banque[7] ; break; // oeil
}
break;
case 2: // on va vers le haut
if (v+vitesse >= 10) {
YP=YP-1; if (YP%20 == 0) YC-- ; v=0;
}
switch (etat){
case 0: imHaut=banque[4]; break; // normal
case 1: imHaut=banque[10] ; break; // peur
case 2: imHaut=banque[8] ; break; // oeil
}
break;
case -2: // on va vers le bas
if (v+vitesse >= 10) {
YP=YP+1; if (YP%20 == 0) YC++ ; v=0;
}
switch (etat){
case 0: imHaut=banque[5]; break; // normal
case 1: imHaut=banque[10] ; break; // peur
case 2: imHaut=banque[9] ; break; // oeil
}
}
}
public void dessineToi(Graphics g,ImageObserver io){
anim(seqAnim);
// effaceToi(g);
if (etat == 0) { // normal
g.drawImage(imHaut,XP-20,YP-20,io);
g.drawImage(imBas,XP-20,YP-5,io);
}
if ((etat == 1) || (etat == 2)) {
g.drawImage(imHaut,XP-20,YP-20,io);
}
}
public void jeSuisMange() {
etat(2);
}
public void peur(){
etat(1);
}
public void reinit(int x,int y){
placeToiSurLaCase(x,y);
bloque=false;
etat(0);
}
}