La même erreur...
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
je t'ai dit que j'aurais dû déclarer plateau de type Piece[][] au lieu de Case[][]
j'ai du avoir ça à l'esprit quand j'ai écrit ça cette nuit (petite fatigue passagère)
en fait il faut manipuler les pièces dans les cases ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // c'est un roque,il faut aussi bouger la tour if ( deplacementX<0 ) { // deplacement vers la gauche plateau[coup.arrivee.getColonne()+1][coup.arrivee.getLigne()]= plateau[0][coup.arrivee.getLigne()]; plateau[0][coup.arrivee.getLigne()]=null; } else { // deplacement vers la droite plateau[coup.arrivee.getColonne()-1][coup.arrivee.getLigne()]= plateau[7][coup.arrivee.getLigne()]; plateau[7][coup.arrivee.getLigne()]=null; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // c'est un roque,il faut aussi bouger la tour if ( deplacementX<0 ) { // deplacement vers la gauche plateau[coup.arrivee.getColonne()+1][coup.arrivee.getLigne()].setPiece( plateau[0][coup.arrivee.getLigne()].getPiece()); plateau[0][coup.arrivee.getLigne()].setPiece(null); } else { // deplacement vers la droite plateau[coup.arrivee.getColonne()-1][coup.arrivee.getLigne()].setPiece( plateau[7][coup.arrivee.getLigne()].getPiece()); plateau[7][coup.arrivee.getLigne()].setPiece(null); }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Ah oui j'ai pas regardé la console d'eclispe :
en rouge les erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6private Piece decodePiece(byte code, Position position, int couleur, Case[][] plateau) throws IOException { Piece piece = plateau[position.getColonne()][position.getLigne()].getPiece(); byte codepiece = getCodePiece(piece); byte codecouleur = getCodeCouleur(couleur==1); if (codepiece==code && codecouleur==getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(piece.getCouleur()))) return piece; throw new IOException();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10public void decode(byte[] data, Case[][] plateau) throws IOException { // on vérifie le tableau data if ( data!=null && data.length>0 && data.length<8 ) { couleur=decodeToCouleur(data[0]); depart=new Position(decode(data[2]),decode(data[3])); arrivee=new Position(decode(data[4]),decode(data[5])); piecejouee=decodePiece(data[1],depart,data[0],plateau); pieceprise=decodePiece(data[6],arrivee,1-data[0],plateau); } else {
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15try { input=new BufferedInputStream(new FileInputStream(file));//on utilise un stream bufferisé pour ne pas a se soucier des octes // on parcourt le fichier, int read; while ( (read=input.read(data))!=-1 ) { if ( read<7 ) { // pas assez de données lu throw new IOException(); } Coup coup = new Coup(); coup.decode(data, plateau); coupsjoues.add(coup); // on joue virtuellement le coup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public void load() { JFileChooser filechooser = new JFileChooser(); filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY); filechooser.setFileFilter( new FileNameExtensionFilter( "Partie de Jeu d'echec", "rcl", "rcl")); int returnVal = filechooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { File file=filechooser.getSelectedFile(); try { PartieChargee partieChargee = Partie.load(file); // on met à jour l'interface graphique a partir de partieChargée Coup dernierCoupJoue=Partie.getDernierCoupJoue();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4public void actionPerformed(ActionEvent paramActionEvent) { load(); } });
Merci
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
java.io.IOException
at projet.Partie$Coup.decodePiece(Partie.java:144)
at projet.Partie$Coup.decode(Partie.java:131)
at projet.Partie.load(Partie.java:254)
at projet.FenetreJeu.load(FenetreJeu.java:512)
at projet.FenetreJeu$4.actionPerformed(FenetreJeu.java:219)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ah non excuses moi j'avais pas vu que tu m'avais mis ça :
donc l'erreur c'est que soit la pièce est mal décodée, soit la couleur est mal décodée (ou mal encodée d'ailleurs)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6private Piece decodePiece(byte code, Position position, int couleur, Case[][] plateau) throws IOException { Piece piece = plateau[position.getColonne()][position.getLigne()].getPiece(); byte codepiece = getCodePiece(piece); byte codecouleur = getCodeCouleur(couleur==1); if (codepiece==code && codecouleur==getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(piece.getCouleur()))) return piece; throw new IOException();
il y'a déjà un petit problème dans cette ligne : si la piece est null :
donc il faut faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (codepiece==code && (codepiece==0 || codecouleur==getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(piece.getCouleur())))) return piece;
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Pourtant j'ai tout :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 public static class Coup { private String couleur; private Piece piecejouee; private Position depart, arrivee; private Piece pieceprise; public String getCouleur() { return couleur; } public Piece getPieceJouee() { return piecejouee; } public Position getDepart() { return depart; } public Position getArrivee() { return arrivee; } public Piece getPiecePrise() { return pieceprise; } public byte[] encode(){ byte[] data=new byte[7];// on créé un tableau de 7 octets data[0]=getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(couleur));//couleur data[1]=getCodePiece(piecejouee); // code piece data[2]=getCode(depart.getColonne()); // colonne départ data[3]=getCode(depart.getLigne()); // ligne départ data[4]=getCode(arrivee.getColonne()); // colonne arrivée data[5]=getCode(arrivee.getLigne()); // ligne arrivée data[6]=getCodePiece(pieceprise); // code piece return data; } private byte getCodeCouleur(boolean blanc) { return (byte) (blanc?1:0); // 1 = blanc, 0 = noir } private byte getCode(int value) { return (byte) value; } private byte getCodePiece(Piece piecejouee) { if ( piecejouee instanceof Roi ) { return 'R'; } else if ( piecejouee instanceof Reine ) { return 'D'; } else if ( piecejouee instanceof Tour ) { return 'T'; } else if ( piecejouee instanceof Fou ) { return 'F'; } else if ( piecejouee instanceof Cavalier ) { return 'C'; } else if ( piecejouee instanceof Pion ) { return 'P'; } return 0; // pas de pièce } public void decode(byte[] data, Case[][] plateau) throws IOException { // on vérifie le tableau data if ( data!=null && data.length>0 && data.length<8 ) { couleur=decodeToCouleur(data[0]); depart=new Position(decode(data[2]),decode(data[3])); arrivee=new Position(decode(data[4]),decode(data[5])); piecejouee=decodePiece(data[1],depart,data[0],plateau); pieceprise=decodePiece(data[6],arrivee,1-data[0],plateau); } else { throw new IOException(); } } private Piece decodePiece(byte code, Position position, int couleur, Case[][] plateau) throws IOException { Piece piece = plateau[position.getColonne()][position.getLigne()].getPiece(); byte codepiece = getCodePiece(piece); byte codecouleur = getCodeCouleur(couleur==1); if (codepiece==code && (codepiece==0 || codecouleur==getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(piece.getCouleur())))) return piece; throw new IOException(); } private int decode(byte value) throws IOException { if ( value>=0 && value<8 ) { return value; } throw new IOException(); } private String decodeToCouleur(byte code) throws IOException { if ( code==1 ) return FenetreJeu.COULEUR_JOUEUR_BLANC; else if ( code==0 ) return FenetreJeu.COULEUR_JOUEUR_NOIR; else throw new IOException(); } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Si vous ne trouvez pas , ce n'est pas grave..
Si on termine l'échec et mat on y reviendra sinon tempis..
C'est déjà énorme où on en es arrivé en moins d'une semaine..
j'ai testé unitairement le codage et le décodage c'est bon
le problème doit être dans la simulation de jeu,
faut que je sorte là je me repencherai la dessus plus tard : renvoit moi éventuellement tout le code que tu as, que je reparte sur une base solide, et le fichier de sauvegarde que tu as fait et que tu n'arrives pas à recharger
pour l'echec et mat je t'ai donné déjà toute les règles, tu dois pouvoir commencer
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
ah oui j'oubliais j'ai oublié l'initialisation du plateau dans load(File) de Partie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7Case[][] plateau = new Case[8][8]; //initialisation des case for(int colonne=0;colonne<8;colonne++) { for(int ligne=0;ligne<8;ligne++) { plateau[colonne][ligne]=new Case(); } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Je viens de modifier et j'ai toujours les mêmes erreurs.
Je vous ai joint les fichiers.
Merci
bon j'ai corrigé le problème : c'était le jeu virtuel qui était mal initialisé
j'ai un peu nettoyer le code pour que ça soit plus simple parce qu'il y avait plein de petit bug, lorsqu'on recommençait une partie, ou qu'on chargeait plusieurs parties,
j'ai fait différent test de partie, je dis pas qu'il y a plus de bugs (c'est impossible à le savoir), j'ai pas tout retester, il faudrait tester une sauvegarde et un chargement de partie avec roque par exemple, avec echec au roi.
pour ce soir j'en ai un peu marre, je m'arrête là. je verrai plus tard pour la suite. je ferai plus de tests de sauvegarde/chargement, et je verrai pour le mat
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Du grand art...
Merci beaucoup !
Je vais continuer l'échec et mat .
Bonne soiréee
Merci
Il faudrait repérer la place du roi et regarder autour de lui s'il peux encore bougé non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public void marqueRoiEchec() { Couleur couleurAdverse=couleurControle.couleurAdverse(); Position positionRoiJoue = e.getPosition(Roi.class, couleurControle); for(int colonne=0; colonne<8;colonne++) { for(int ligne=0; ligne<8;ligne++) { if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){ Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue); if ((e.getCase(colonne,ligne).getPiece().estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){ tab[positionRoiJoue.getColonne()][positionRoiJoue.getLigne()].setCoupPossible(CoupPossible.echec); } } } }
J'ai peu être pas compris alors...
J'ai oublié de précisé , j'ai du apprendre a jouer pour faire ce projet![]()
oui, mais ce n'est pas tout
je t'ai déjà expliqué :
1) le roi est en echec et mat, si il est en echec, et que si il bouge il reste en echec
2) mais si on peut bouger une pièce de manière à ce que le roi ne soit plus en echec, il n'y a pas mat
c'est sur que ça aide de connaitre les règles de gestion qu'on doit implémenter
voilà un canevas pour t'aider :
commence par les faciles evidemment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public boolean marqueRoiEchec() { boolean mat=false; Couleur couleurAdverse=couleurControle.couleurAdverse(); Position positionRoiJoue = e.getPosition(Roi.class, couleurControle); List<Deplacement> menaceechec=new ArrayList<Deplacement>(); for(int colonne=0; colonne<8;colonne++) { for(int ligne=0; ligne<8;ligne++) { if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){ Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue); if ((e.getCase(colonne,ligne).getPiece().estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){ tab[positionRoiJoue.getColonne()][positionRoiJoue.getLigne()].setCoupPossible(CoupPossible.echec); menaceechec.add(simuleDeplacementEchec); } } } } if ( !menaceechec.isEmpty() ) { // le roi est en echec // si le roi peut bouger vers une case non menacée, il n'est pas mat // ... faire ce test ici (facile) if ( menaceechec.size()==1 ) { // une seule pièce menace le roi // si cette pièce peut être mangé par une pièce du joueur courant, alors il n'y a pas echec et mat // ... faire ce test (facile) // sinon si une pièce du joueur en echec peut bloquer la pièce qui menace le roi n'est pas amt // ... faire ce test (moins facile) } else { // si une pièce du joueur en echec peut se placer (ou prendre une pièce adverse) de manière à ce que le roi // ne soit plus en echec, il n'a pas mat // ... faire ce test (le plus complexe des tests à faire) } } return mat; }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
voici de quoi t'avancer un petit peu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public boolean marqueRoiEchec() { boolean mat=false; Couleur couleurAdverse=couleurControle.couleurAdverse(); Position positionRoiJoue = e.getPosition(Roi.class, couleurControle); List<Deplacement> menaceechec=chercheEchec(positionRoiJoue, couleurAdverse); if ( !menaceechec.isEmpty() ) { // le roi est en echec // il est possiblement mat mat=true; Roi roi=(Roi) e.getCase(positionRoiJoue).getPiece(); // si le roi peut bouger vers une case non menacée, il n'est pas mat for(int dx=-1; dx<=-1; dx++) { for(int dy=-1; dy<=-1; dy++) { Position nouvellePositionRoi=positionRoiJoue.position(dx, dy); if (nouvellePositionRoi.getColonne()<0 || nouvellePositionRoi.getColonne()>7 || nouvellePositionRoi.getLigne()<0 || nouvellePositionRoi.getLigne()>7 ) { // on est en dehors de l'echiquier, on ignore continue; } Deplacement simuleDeplacementRoi=new Deplacement(positionRoiJoue, nouvellePositionRoi); if ( roi.estValide(simuleDeplacementRoi) && e.cheminPossible(simuleDeplacementRoi) && !e.captureParUnPionPossible(simuleDeplacementRoi)) { List<Deplacement> menaceechecnouvelleposition=chercheEchec(nouvellePositionRoi, couleurAdverse); if ( menaceechecnouvelleposition.isEmpty() ) { // il y a au moins une case vers laquelle le roi peut se déplacer // il n'y a pas mat mat=false; break; // c'est pas la peine de continuer à chercher } } } } if ( mat ) { // on n'est pas encore sur que le roi n'est pas mat if ( menaceechec.size()==1 ) { // une seule pièce menace le roi // si cette pièce peut être mangé par une pièce du joueur courant, alors il n'y a pas echec et mat // ... faire ce test (facile) // sinon si une pièce du joueur en echec peut bloquer la pièce qui menace le roi n'est pas amt // ... faire ce test (moins facile) } else { // si une pièce du joueur en echec peut se placer (ou prendre une pièce adverse) de manière à ce que le roi // ne soit plus en echec, il n'a pas mat // ... faire ce test (le plus complexe des tests à faire) } } } return mat; } private List<Deplacement> chercheEchec(Position positionRoiJoue, Couleur couleurAdverse) { List<Deplacement> menaceechec=new ArrayList<Deplacement>(); for(int colonne=0; colonne<8;colonne++) { for(int ligne=0; ligne<8;ligne++) { if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){ Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue); if ((e.getCase(colonne,ligne).getPiece().estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){ tab[positionRoiJoue.getColonne()][positionRoiJoue.getLigne()].setCoupPossible(CoupPossible.echec); menaceechec.add(simuleDeplacementEchec); } } } } return menaceechec; }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Partager