DÉMINEUR COMPLET AVEC GESTION DES MEILLEURS TEMPS

Signaler
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
-
 attar -
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45051-demineur-complet-avec-gestion-des-meilleurs-temps

excellent programme .Bravo
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
9
Et voici un essai d'intégration dans Minesweeper:
public class GameGrid extends JPanel implements MouseListener, SquareButtonListener {
...
private boolean left;
private boolean right;
private boolean none;
private boolean leftRight;
private boolean leftNotright;
private boolean rightNotleft;
private MouseEvent evt;
private Thread buttonThread;
...
...
private void squareButton_leftrightClick(SquareButton square) {
System.out.println(square.getXSquare() + "," + square.getYSquare() + " leftRight");
}
...
public void mousePressed(MouseEvent e) {
if (buttonThread == null || !buttonThread.isAlive()) {
buttonThread = new Thread(new RunButton());
buttonThread.start();
}
setKey(e, true);

if (AppFrame.getInstance().getGameBoard().isInGame()) {
AppFrame.getInstance().getGameBoard().indicateMousePressed();
}
}

public void mouseReleased(MouseEvent e) {
if (leftNotright) {
leftAction(e);
}
setKey(e, false);

if (AppFrame.getInstance().getGameBoard().isInGame()) {
AppFrame.getInstance().getGameBoard().indicateMouseReleased();
}
}
...
public void leftAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_leftClick(square);
}
}

public void rightAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_rightClick(square);
}
}

public void leftRightAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_leftrightClick(square);
}
}

public void noneAction(MouseEvent evt) {
if (buttonThread != null && buttonThread.isAlive()) {
buttonThread.interrupt();
}
}

private void setKey(final MouseEvent e, final boolean b) {
evt = e;
if (SwingUtilities.isLeftMouseButton(e)) {
left = b;
}
if (SwingUtilities.isRightMouseButton(e)) {
right = b;
}
}

class RunButton implements Runnable {

public void run() {
while (true) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
break;
}
if (left && right && !leftRight) {
leftRight = true;
none = false;
leftNotright = false;
rightNotleft = false;
leftRightAction(evt);
} else if (!left && !right && !none) {
leftRight = false;
none = true;
leftNotright = false;
rightNotleft = false;
noneAction(evt);
} else if (left && !right && !leftNotright && !leftRight) {
none = false;
leftNotright = true;
rightNotleft = false;
} else if (!left && right && !rightNotleft && !leftRight) {
none = false;
leftNotright = false;
rightNotleft = true;
rightAction(evt);
}
}
}
}
}
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
9
Je viens d'optimiser un peu. Dans la première version, le Thread tournait tout le temps.
Maintenant, il est démarré seulement quand on enfonce un bouton de la souris.
Si aucun bouton n'est enfoncé, le Thread est interrompu.
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
9
J'avoue que ce n'est pas très facile. Mais avec un Thread ça devrait marcher. Voici mon premier essai d'implémentation:
http://www.java-forum.org/de/userfiles/user3690/LeftRightClickDemo.java
Afficher les 6 commentaires