Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package GUI;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import javax.swing.JPanel;
- import minesweeper.Anzeige;
- import minesweeper.Spiel;
- public final class MinePanel extends JPanel implements MouseListener, ActionListener {
- private Spiel spiel;
- public MinePanel(Spiel spiel) {
- addMouseListener(this);
- this.spiel = spiel;
- }
- @Override
- public void paint(Graphics gr) {
- super.paint(gr);
- hintergrundGraphic(gr);
- }
- private void hintergrundGraphic(Graphics gr) {
- hintergrundFarbe(gr);
- zeichneRaster(gr);
- }
- private void hintergrundFarbe(Graphics gr) {
- gr.setColor(Color.GRAY);
- gr.fillRect(0, 0, getWidth(), getHeight());
- if (spiel.getZustand() != Spiel.AKTIVESSPIEL) {
- endScreen(gr);
- }
- }
- private void endScreen(Graphics gr) {
- if (spiel.getZustand() == Spiel.GEWONNEN) {
- // Win-Screen
- gr.setColor(Color.GREEN);
- gr.fillRect(0, 0, getWidth(), getHeight()); // Start X, Start Y, Ende X, Ende Y
- gr.setColor(Color.BLACK);
- // gr.drawString("Du hast alle Minen gefunden!", getWidth() / 2, getHeight() /
- // 2);
- // Raster+Minen über dem Win-Screen zeichnen
- } else {
- gr.setColor(Color.RED);
- gr.fillRect(0, 0, getWidth(), getHeight());
- gr.setColor(Color.BLACK);
- // gr.drawString("Du hast dich in die Luft gesprengt...", getWidth() / 2,
- // getHeight() / 2);
- // Raster+Minen über dem Lose-Screen
- }
- }
- // Methode für die Zeichnung und das Highlighten der Kästchen
- private void zeichneRaster(Graphics gr) {
- gr.setColor(Color.BLACK);
- for (double i = 0; i < getWidth(); i += getWidth() / (double) Anzeige.BREITE) {
- gr.drawLine((int) i, 0, (int) i, getHeight());
- }
- for (double i = 0; i < getHeight(); i += getHeight() / (double) Anzeige.HOEHE) {
- gr.drawLine(0, (int) i, getWidth(), (int) i);
- }
- // Highlight für Kästchen im Raster, solange das Spiel läuft
- if (spiel.getZustand() == Spiel.AKTIVESSPIEL) {
- for (int x = 0; x < Anzeige.BREITE; x++) {
- for (int y = 0; y < Anzeige.HOEHE; y++) {
- if (spiel.anzeige.get(x, y) != Anzeige.LEER) {
- gr.setColor(Color.LIGHT_GRAY);
- // System.out.println("Highlight");
- highlight(gr, x, y);
- }
- if (spiel.anzeige.get(x, y) == Anzeige.MARKIERUNG) {
- gr.setColor(Color.MAGENTA);
- highlight(gr, x, y);
- }
- if (spiel.anzeige.get(x, y) == Anzeige.MINE) {
- gr.setColor(Color.RED);
- highlight(gr, x, y);
- }
- }
- }
- }
- // Da das Feld LEER aus ' ' besteht, wird "nichts" im Panel angezeigt, bis
- // das Feld duch suche() mit einer Mine oder einer Nachbaranzahl gefüllt wird
- gr.setColor(Color.BLACK);
- for (int x = 0; x < Anzeige.BREITE; x++) {
- for (int y = 0; y < Anzeige.HOEHE; y++) {
- // dekl. und initialisierung des zu druckenden Zeichens,
- // welches in an der Minenposition im Array gespeichert ist
- String str = "" + spiel.anzeige.get(x, y);
- if (str == "0") {
- str = "";
- }
- // Zeichen wird auf das Panel gezeichnet
- gr.drawString(str, (x * getWidth()) / Anzeige.BREITE + 18, (y * getHeight()) / Anzeige.HOEHE + 25);
- }
- }
- }
- private void highlight(Graphics gr, int x, int y) {
- gr.fillRect(((x * getWidth()) / Anzeige.BREITE) + 1, ((y * getHeight()) / Anzeige.HOEHE) + 1,
- getWidth() / Anzeige.BREITE - 1, getHeight() / Anzeige.HOEHE - 1);
- }
- @Override
- public void mouseClicked(MouseEvent event) {
- // Koordinate in lokal deklarieren, um den Speicher nur temporär zu belegen
- int posX;
- int posY;
- // Einzelner Klick wird als Kästchen-Koordinaten gespeichert
- posX = (int) ((event.getX() / (getWidth() / (Anzeige.BREITE))));
- posY = (int) ((event.getY() / (getHeight() / (Anzeige.HOEHE))));
- // Felder sollen nur klickbar sein, wenn noch nicht gewonnen/verloren
- if (spiel.getZustand() == Spiel.AKTIVESSPIEL) {
- // Wenn mit Maus1 geklickt wird und das Feld mit LEER gefüllt ist, dann wird
- // aufgedeckt
- // 2. If Bedingung stellt sicher, dass ein Feld nur einmal abgesucht werden kann
- if (event.getButton() == MouseEvent.BUTTON1) {
- if (spiel.anzeige.get(posX, posY) == Anzeige.LEER)
- spiel.suche(posX, posY);
- }
- // bei anderem Mausklick wird eine Markierung hinzugefügt oder weggenommen
- else if((spiel.anzeige.get(posX, posY) == Anzeige.LEER) || (spiel.anzeige.get(posX, posY) == Anzeige.MARKIERUNG)){
- spiel.anzeige.markierungSetzten(posX, posY);
- }
- }
- repaint();
- }
- // Wenn "Neustarten" geklickt wird, triggert Event
- @Override
- public void actionPerformed(ActionEvent e) {
- System.out.println("Das Spiel wurde neu gestart");
- spiel = new Spiel();
- repaint();
- }
- @Override
- public void mouseEntered(MouseEvent event) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseExited(MouseEvent event) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mousePressed(MouseEvent event) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseReleased(MouseEvent event) {
- // TODO Auto-generated method stub
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement