Problème de dialogue entre deux classes

ecodhrin Messages postés 22 Date d'inscription jeudi 17 février 2011 Statut Membre Dernière intervention 6 mai 2011 - 10 avril 2011 à 15:03
ecodhrin Messages postés 22 Date d'inscription jeudi 17 février 2011 Statut Membre Dernière intervention 6 mai 2011 - 30 avril 2011 à 20:14
Bonjour,

Je suis en train de coder une bataille-navale. J'ai une visual class IHM et une classe IA qui gère le jeu.
Mon problème est que je n'arrive pas à appeler une méthode de la classe IA depuis la classe IHM. J'ai essayé avec extends, super, implements, ... sans succès. J'ai surement mal placé / utilisé ces mots donc je demande de l'aide.

Voilà les deux méthodes :

(Dans la classe IHM)
public void placerBateau()
{
log.append("Placer le torpilleur (2 cases)\n");
int x1 = grille2.getSelectedRow();
int y1 = grille2.getSelectedColumn();
verifier(x1,y1);
}

(qui fait appelle à cette méthode dans la classe IA)
public boolean verifier(int a,int b)
{
if (a==0 || b==0)
{
return false;
}
else
{
return true;
}
}

Je n'arrive donc pas à faire dialoguer ces deux classes. Pourriez-vous m'aider s'il vous plait ?

Cordialement

Ecodhrin.

24 réponses

ecodhrin Messages postés 22 Date d'inscription jeudi 17 février 2011 Statut Membre Dernière intervention 6 mai 2011
27 avril 2011 à 22:38
J'ai fais une méthode mais qui ne marche pas : place des fois les bateaux hors grille ou place un bateau sur un autre. Il se peut aussi que le programme se fige (surement boucle sans fin).

Je me prend la tête dessus depuis plusieurs heures mais je n'arrive pas a voir où j'ai oublié (ou trop mis) des conditions.

Je vous met le code pour voir si vous arrivez à y voir plus clair que moi ^^

nota : grille 3 est une JTable 11x11

public static void placerIA()
{
int a = 0;
int b = 0;
int c = 0;
boolean verif = false;
boolean x1 = false;
boolean x2 = false;
boolean x3 = false;
boolean x4 = false;

do
{
do
{
a = (int)(Math.random()*(IHM.grille3.getRowCount()-1)+1);
b = (int)(Math.random()*(IHM.grille3.getRowCount()-1)+1);
}while(IHM.grille3.getValueAt(a, b)== "x");

for(int i = a+1; ia-longueur+1 ; i--)
{
if(i>0)
{
if(IHM.grille3.getValueAt(i, b) == "x")
{
x1 = true;
}
}
}
for(int i = b+1; ib-longueur+1 ; i--)
{
if(i>0)
{
if(IHM.grille3.getValueAt(a, i) == "x")
{
x4 = true;
}
}
}
}while(   (x1 && x2 && x3 && x4)				    									//point en (a;b) avec bateaux suivant N, E, S, O
||(x2 && x3 && a==1 && b==1)				    								//point en (1;1) avec bateaux suivant E, S
||(x3 && x4 && a==1 && b==IHM.grille3.getColumnCount())							//point en (1;n) avec bateaux suivant O, S
||(x1 && x4 && a==IHM.grille3.getRowCount() && b==IHM.grille3.getColumnCount()) //point en (n;n) avec bateaux suivant O, N
||(x1 && x3 && a==IHM.grille3.getRowCount() && b==1)							//point en (n;1) avec bateaux suivant E, N
||(x2 && x3 && x4 && a==1)														//point en (1;b) avec bateaux suivant O, E, S
||(x1 && x3 && x4 && b==IHM.grille3.getColumnCount())							//point en (a;n) avec bateaux suivant N, S, O
||(x1 && x2 && x4 && a==IHM.grille3.getRowCount())								//point en (n:b) avec bateaux suivant N, O, E
||(x1 && x2 && x3 && b==1)														//point en (a;1) avec bateaux suivant N, E, S
);

IHM.placerBateau(IHM.grille3 , "o", a, b);

c = (int)(Math.random()*4+1);

do
{
if(c==1)
{
for(int k = a-1 ; k > a-longueur ; k--)
{
IHM.placerBateau(IHM.grille3, "x", k, b);							
}
verif = true;
}

if(c==2)
{
for(int k = b+1 ; k < b+longueur ; k++)
{
IHM.placerBateau(IHM.grille3, "x", a, k);
}
verif = true;
}

if(c==3)
{
for(int k = a+1 ; k < a+longueur ; k++)
{
IHM.placerBateau(IHM.grille3, "x", k, b);
}
verif = true;
}

if(c==4)
{
for(int k = b-1 ; k > b-longueur ; k--)
{
IHM.placerBateau(IHM.grille3, "x", a, k);
}
verif = true;
}
}while(!verif);
}
0
Utilisateur anonyme
28 avril 2011 à 21:51
Je manque cruellement de temps pour éplucher tout ton code

Si tu devrais avoir une boucle infinie, je la verrais bien dans ton dernier do while.
Car tu affectes une valeur à c et ensuite tu pars dans ta boucle. Imagine que c est supérieur à 4. Tu rentres dans ton do while avec verif à false et comme c est différent de 1, 2, 3 ou 4 tu boucles sans fin car verif est à true que dans tes if.
Je mettrais alors ta ligne c = (int)(Math.random()*4+1); au début de ton do while .

Pour la superposition des bateaux, je pense que ça vient de la grosse condition de ton premier do while.
A quoi te servent els conditions sur a ==1, b==1 ect ?


-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
0
ecodhrin Messages postés 22 Date d'inscription jeudi 17 février 2011 Statut Membre Dernière intervention 6 mai 2011
30 avril 2011 à 18:09
En fait toutes ces conditions étaient pour éviter que les bateaux placés aléatoirement se chevauchent ou sortent de l'écran.

Mais j'ai abandonné cette technique qui est trop compliquée à mon goût.

Je vais donc essayer de me servir du code du placement par le joueur pour faire cela.

Petite question au passage : comment puis-je faire pour donner un background à une cellule spécifique ?

J'ai vu sur différent forum qu'ils parlent de renderer et de component cell mais je ne comprend pas tout.

Quelqu'un pourrait m'expliquer clairement comment faire ?
0
ecodhrin Messages postés 22 Date d'inscription jeudi 17 février 2011 Statut Membre Dernière intervention 6 mai 2011
30 avril 2011 à 20:14
Et mise à jour : la méthode placerIA() qui permet de placer les bâteaux aléatoirement semble opérationnelle =)

public static void placerIA()
{
int a = 0;
int b = 0;
int c = 0;
int l1 = 0;
int c2 = 0;
int l3 = 0;
int c4 = 0;
int l = IHM.grille3.getRowCount();
int x = 0;
boolean x1 = false;
boolean x2 = false;
boolean x3 = false;
boolean x4 = false;
boolean verif = false;

do
{
do
{
a = (int)(Math.random()*(l-1)+1);
b = (int)(Math.random()*(l-1)+1);		
}while(IHM.grille3.getValueAt(a, b)=="x");

IHM.placerBateau(IHM.grille3, "x", a, b);

for(int i = a+1; ia-longueur+1 ; i--)
{
if(i>0)
{
if(IHM.grille3.getValueAt(i, b) == "x")
{
x2 = true;
}
}
}
if(a-longueur+1 > 0 && IHM.grille3.getValueAt(a-longueur+1, b)!="x" && !x2)
{
IHM.placerBateau(IHM.grille3, "o", a-longueur+1 , b);
l1 = a - longueur + 1;
}

for(int i = b+1; ib-longueur+1 ; i--)
{
if(i>0)
{
if(IHM.grille3.getValueAt(a, i) == "x")
{
x4 = true;
}
}
}
if(b-longueur+1 > 0 && IHM.grille3.getValueAt(a, b-longueur+1)!="x" && !x4)
{
IHM.placerBateau(IHM.grille3, "o", a , b-longueur+1);
c4 = b - longueur + 1;
}

for(int i=1 ; i a-longueur ; k--)
{
IHM.placerBateau(IHM.grille3, "x", k, b);							
}
x = 1;
}

if(c==2 && c2!=0)
{
for(int k = b+1 ; k < b+longueur ; k++)
{
IHM.placerBateau(IHM.grille3, "x", a, k);
}
x = 2;
}

if(c==3 && l3!=0)
{
for(int k = a+1 ; k < a+longueur ; k++)
{
IHM.placerBateau(IHM.grille3, "x", k, b);
}
x = 3;
}

if(c==4 && c4!=0)
{
for(int k = b-1 ; k > b-longueur ; k--)
{
IHM.placerBateau(IHM.grille3, "x", a, k);
}
x = 4;
}			
}while(x == 0);
if(a+longueur-1 < IHM.grille3.getRowCount() && x!=3 && IHM.grille3.getValueAt(a+longueur-1, b)!= "x")
{
IHM.placerBateau(IHM.grille3, "", a+longueur-1 , b);
}
if(a-longueur+1 > 0 && x!=1 && IHM.grille3.getValueAt(a-longueur+1, b)!= "x")
{
IHM.placerBateau(IHM.grille3, "", a-longueur+1 , b);
}
if(b+longueur-1 < IHM.grille3.getColumnCount() && x!=2 && IHM.grille3.getValueAt(a, b+longueur-1)!= "x")
{
IHM.placerBateau(IHM.grille3, "", a , b+longueur-1);
}
if(b-longueur+1 > 0 && x!=4 && IHM.grille3.getValueAt(a, b-longueur+1)!= "x")
{
IHM.placerBateau(IHM.grille3, "", a , b-longueur+1);
}
}
0
Rejoignez-nous