Minesweeper în Java
Acest tutorial oferă o prezentare generală concisă a ceea ce trebuie să faceț i pentru a obț ine un mic joc grafic de Minesweeper.
rulează pe Overo-ul tău. Dacă nu ai făcut-o, te rog să parcurgi tutorialulialsEclipsa pe
Gumstix pentru utilizatorii noi ș i HelloWorld în Java.
Acest lucru nu explică jocul MineSweeper, ci ne lasă doar să utilizăm codul pentru a vedea un
exemplu de posibilităț i grafice utilizând un Overo COM.
Creează un nou proiect în Eclipse
Fiș ier -> Proiect Nou -> Proiect Java
Creează o clasă Principală
Copiaț i ș i lipiț i următorul cod în acea clasă:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainClass {
public static void main(String args[]) {
JFrame f = new JFrame("Exemplu JColorChooser");
[Link](JFrame.EXIT_ON_CLOSE);
final JButton buton = new JButton("Alege pentru a schimba fundalul");
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
Color initialBackground = [Link]();
Culoare fundal = [Link](null,
Exemplu JColorChooser
dacă (fundal != null) {
[Link](background);
}
}
};
[Link](actionListener);
[Link]ă(buton, [Link]);
[Link](300, 200);
[Link](true);
}
}
Create a classMineSweeper(Capital S!)
Copiaț i ș i lipiț i următorul cod în acea clasă:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MineSweeper extends JPanel implements AWTEventListener,
ActionListener {
public static enum Stare {
Clicked, Marked, Initial, WrongMarked
}
public static enum GameState {
NotStarted, Playing, Finished
}
numărul maxim de bombe este 10;
int privat RÂNDURI = 9, COLOANE = 9, TOTAL = RÂNDURI *
COLUMNS;
private JPanel pnlPrincipal = new JPanel(new GridLayout(ROWS,
COLUMNS));
private JLabel lblBombCount = new JLabel(MAX_BOMB_COUNT +
"");
private JLabel lblTimer = new JLabel("0");
privat boolean isColorCheatOn = false;
buton privat btnReset = new JButton("Reset");
private void startThread() {
Thread th = new Thread(new Runnable() {
public void run() {
while (state == [Link]ând) {
[Link](([Link]([Link]()) + 1) +
"");
[Link]();
încercă {
[Link](1000);
} catch (InterruptedException e) {
[Link]();
}
}
}
});
[Link]();
}
starea privată a jocului = [Link]început;
public MineSweeper() {
setLayout(new BorderLayout());
adaugă(pnlMain, [Link]);
createButtons();
adaugaPanoulDeControl();
[Link]().addAWTEventListener(this,
AWTEvent.KEY_EVENT_MASK);
}
private void arataDespre() {
<html>Autor : Justin Cowles
Cowperthwaite <br>Version : 1.0</html>", "About",
JOptionPane.INFORMARE_MESAJ);
}
private void reporneș teJocul() {
state = [Link];
[Link]("0");
[Link]();
creeazăButonuri();
[Link]();
[Link]("" + MAX_BOMB_COUNT);
[Link]();
}
private void adaugaPanoulDeControl() {
JPanel pnlTimer = new JPanel(new FlowLayout([Link]));
[Link]ă(lblTimer);
JPanel pnl = new JPanel(new FlowLayout([Link]));
<HTML>Apăsaț i <B>F2</B> pentru a reseta
jocul curent</HTML>
[Link]ă(lblBombCount);
[Link]ă(btnReset);
JPanel pnlN = new JPanel(new GridLayout(1, 3));
[Link](lblBombCount);
[Link]ă(pnl);
[Link]ă(pnlTimer);
adauga(pnlN, [Link]);
[Link](this);
}
private void createButtons() {
List<Point> lstBombsLocation = new ArrayList<Point>();
for (int rand = 0; rand < RÂNDURI; rand++) {
pentru (int col = 0; col < COLUMNS; col++) {
JButton btn = getButton(lstBombsLocation, TOTAL, new
Punct(lin, col)
@Override
public String toString() {
returnează (int) getX() + ", " + (int) getY();
}
@Override
public boolean equals(Object obj) {
return ((Punct) obj).getX() == getX() && ((Punct)
obj).getY() == getY();
}
});
[Link]ă(btn);
}
}
în timp ce ([Link]() < MAX_BOMB_COUNT) {
actualizeazăBomds(lstBombsLocation, [Link]());
}
pentru (Component c : [Link]()) {
updateBombCount((GameButton) c, [Link]());
}
// [Link]("Numărul total de bombe: " +
[Link]());
}
private void updateBomds(List<Point> lstBombsLocation, Component[]
components) {
// int currentPosition = new Double(((locaț ia.x) * COLUMNS ) +
// [Link]()).intValue();
Random r = new Random();
pentru (Component c : componente) {
Punct locaț ie = ((GameButton) c).obț inePoziț ia();
int pozitiaCurenta = nou Double(((locatia.x) * COLOANE) +
[Link]()).intValue();
int bombLocation = [Link](TOTAL);
dacă (locaț ia bombei == poziț ia curentă) {
((GameButton) c).setBomb(true);
[Link](((GameButton) c).getPosition());
întoarce-te;
}
}
}
private GameButton getButton(List<Point> lstBombsLocation, int
totalLocations, Point location) {
GameButton btn = new GameButton(locatie);
[Link](new Insets(0, 0, 0, 0));
[Link](false);
dacă ([Link]() < MAX_BOMB_COUNT) {
dacă (esteBombă()) {
[Link](true);
[Link](location);
}
}
[Link](nou MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evenimentMouse) {
dacă (starea != [Link]ând) {
state = [Link];
startThread();
}
dacă (((GameButton) [Link]()).isEnabled() ==
fals) {
întoarce;
}
dacă ([Link]() == MouseEvent.BUTTON1) {
dacă (((GameButton) [Link]()).getState() ==
[Link]) {
((ButonJoc)
[Link]()).setState([Link]);
[Link](([Link]([Link]()) + 1) + "");
((GameButton) [Link]()).actualizeazaUI();
returna;
}
(ButonJoc)
[Link]()).setState([Link]);
dacă (((GameButton) [Link]()).esteBombă()) {
blastBombs();
return;
} altfel {
dacă (((GameButton) [Link]()).getBombCount()
== 0) {
actualizareZerouriÎmprejur(((GameButton)
[Link]()).getPosition());
}
}
dacă (!verificăStareaJocului()) {
((GameButton) [Link]()).setEnabled(false);
}
} else if ([Link]() == MouseEvent.BUTTON3) {
dacă (((GameButton) [Link]()).getState() ==
[Link]) {
((ButonJoc)
[Link]()).setState([Link]);
[Link](([Link]([Link]()) + 1) + "");
} altfel {
(ButonDeJoc)
[Link]()).setState([Link]);
[Link](([Link]([Link]()) - 1) + "");
}
}
((GameButton) [Link]()).updateUI();
}
});
return btn;
}
private boolean checkGameState() {
boolean esteVictorie = false;
for (Component c : [Link]()) {
GameButton b = (GameButton) c;
dacă ([Link]() != [Link]) {
dacă ([Link]()) {
isWin = true;
} altfel {
returnează fals;
}
}
}
dacă (esteVictorie) {
state = [Link];
pentru (Component c : [Link]()) {
GameButton b = (GameButton) c;
dacă ([Link]ă()) {
[Link]([Link]);
}
[Link](false);
}
[Link](this, "Ai câș tigat jocul :D",
Felicitări
}
return isWin;
}
private void updateSurroundingZeros(Point currentPoint) {
Punct[] puncte = obț ineSurroundings(punctCurent);
pentru (Punct p : puncte) {
GameButton b = getButtonAt([Link](), p);
if (b != null && [Link]() == 0 && [Link]() !=
[Link] && [Link]() != [Link] && [Link]() == false) {
[Link]([Link]);
updateSurroundingZeros([Link]());
[Link]();
}
dacă (b != null && [Link]() > 0 && [Link]() !=
[Link] && [Link]() != [Link] && [Link]() == false) {
[Link](false);
[Link]([Link]);
[Link]();
}
}
}
private void explosionBombelor() {
int blastCount = 0;
pentru (Componenta c : [Link]()) {
((GameButton) c).setEnabled(false);
((GameButton) c).transferFocus();
if (((GameButton) c).isBomb() && ((GameButton) c).getState() !=
[Link])
((GameButton) c).setState([Link]);
((GameButton) c).actualizeazăUI();
blastCount++;
}
dacă (((GameButton) c).esteBombă() == fals && ((GameButton)
c).getState() == [Link]) {
((GameButton) c).setState([Link]);
}
}
[Link]("" + blastCount);
[Link]();
state = [Link];
[Link](this, "You loose the game :(", "Game
Peste
pentru (Component c : [Link]()) {
GameButton b = (GameButton) c;
[Link](false);
}
}
private boolean esteBombă() {
Random r = new Random();
return [Link](ROWS) == 1;
}
public static void main(String[] args) {
JFrame fr = new JFrame("MineSweeper");
[Link](new BorderLayout());
[Link]ă(nou MineSweeper());
[Link](false);
[Link](250, 350);
[Link](null);
[Link](JFrame.EXIT_ON_CLOSE);
[Link](true);
}
clasa GameButton extinde JButton {
private boolean isBomb = false;
punct privat poziț ie = null;
private int bombCount = 0;
private State state = [Link];
public void setState(State state) {
această.stare = stare;
dacă (getBombCount() == 0 && !isBomb) {
setEnabled(false);
}
}
public State getState() {
returnaț i starea;
}
public int getBombCount() {
return bombCount;
}
public void setBombCount(int bombCount) {
[Link] = bombCount;
}
public GameButton(Point pozitie) {
setezPozitia(pozitie);
setText([Link]());
}
public Point getPosition() {
returnează poziț ia;
}
public void setPosition(Point position) {
[Link] = pozitie;
}
public boolean esteBombă() {
return esteBombă;
}
public void setBomb(boolean esteBombă) {
[Link] = isBomb;
}
@Override
public String getText() {
dacă (stare == [Link]ț ială) {
return "";
}
dacă (starea == [Link]) {
ö
}
dacă (starea == [Link]ă) {
dacă (esteBombă) {
<html><font size='16'><b>*</b></font></html>
} altfel {
dacă (getBombCount() > 0)
return getBombCount() + "";
altfel
return "";
}
}
dacă (starea == [Link]) {
return "X";
}
return [Link]();
}
@Override
public Color getBackground() {
dacă (esteActivatCuloareTriș or && esteBombă) {
return [Link];
}
if (state == [Link]) {
dacă (esteBombă) {
return [Link];
}
if (getBombCount() > 0) {
return [Link];
}
}
dacă (esteActiv()) {
return [Link]();
} else {
return [Link]();
}
}
}
private Point[] getSurroundings(Point cPoint) {
int cX = (int) [Link]();
int cY = (int) [Link]();
Point[] points = { new Point(cX - 1, cY - 1), new Point(cX - 1,
cY), noul punct(cX - 1, cY + 1), noul punct(cX, cY - 1), noul punct(cX, cY + 1),
new Point(cX + 1, cY - 1), new
Punct(cX + 1, cY), nou punct(cX + 1, cY + 1) };
returnaț i punctele;
}
private void updateBombCount(GameButton btn, Component[] components)
{
Punct[] puncte = obtineMediul([Link]());
pentru (Punct p : puncte) {
GameButton b = getButtonAt(components, p);
dacă (b != null && [Link]()) {
[Link]([Link]() + 1);
}
}
[Link]([Link]() + "");
}
private GameButton getButtonAt(Component[] components, Point
poziț ie) {
pentru (Component btn : componente) {
dacă ((((GameButton) btn).getPosition().equals(position))) {
return (GameButton) btn;
}
}
return null;
}
public void eventDispatched(AWTEvent event) {
dacă ([Link](event) && ((KeyEvent)
(eveniment)).getID() == KeyEvent.KEY_RELEASED) {
dacă (((KeyEvent) (eveniment)).getKeyCode() == KeyEvent.VK_F1) {
afiseazaDespre();
}
dacă (((KeyEvent) (eveniment)).getKeyCode() == KeyEvent.VK_F2) {
resetareJoc();
}
dacă (((KeyEvent) (eveniment)).getKeyCode() == KeyEvent.VK_F3) {
isColorCheatOn = !isColorCheatOn;
dacă (starea == [Link]ând) {
[Link]();
}
}
if (((KeyEvent) (event)).getKeyCode() == KeyEvent.VK_F12) {
pentru (Componenta c : [Link]()) {
GameButton b = (GameButton) c;
dacă ([Link]() == fals) {
[Link]([Link]);
} altfel {
[Link]([Link]);
}
[Link](false);
}
checkGameState();
}
}
}
public void actionPerformed(ActionEvent actionEvent) {
dacă ([Link]() == btnReset) {
repornesteJocul();
}
}
}