Advertisement
Guest User

Untitled

a guest
May 21st, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. package GUI;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.MouseEvent;
  8. import java.awt.event.MouseListener;
  9.  
  10. import javax.swing.JPanel;
  11.  
  12. import minesweeper.Anzeige;
  13. import minesweeper.Spiel;
  14.  
  15. public final class MinePanel extends JPanel implements MouseListener, ActionListener {
  16.  
  17. private Spiel spiel;
  18.  
  19. public MinePanel(Spiel spiel) {
  20. addMouseListener(this);
  21. this.spiel = spiel;
  22.  
  23. }
  24.  
  25. @Override
  26. public void paint(Graphics gr) {
  27. super.paint(gr);
  28. hintergrundGraphic(gr);
  29.  
  30. }
  31.  
  32. private void hintergrundGraphic(Graphics gr) {
  33. hintergrundFarbe(gr);
  34. zeichneRaster(gr);
  35. }
  36.  
  37. private void hintergrundFarbe(Graphics gr) {
  38. gr.setColor(Color.GRAY);
  39. gr.fillRect(0, 0, getWidth(), getHeight());
  40.  
  41. if (spiel.getZustand() != Spiel.AKTIVESSPIEL) {
  42. endScreen(gr);
  43. }
  44. }
  45.  
  46. private void endScreen(Graphics gr) {
  47. if (spiel.getZustand() == Spiel.GEWONNEN) {
  48. // Win-Screen
  49. gr.setColor(Color.GREEN);
  50. gr.fillRect(0, 0, getWidth(), getHeight()); // Start X, Start Y, Ende X, Ende Y
  51. gr.setColor(Color.BLACK);
  52.  
  53. // gr.drawString("Du hast alle Minen gefunden!", getWidth() / 2, getHeight() /
  54. // 2);
  55. // Raster+Minen über dem Win-Screen zeichnen
  56.  
  57. } else {
  58. gr.setColor(Color.RED);
  59. gr.fillRect(0, 0, getWidth(), getHeight());
  60. gr.setColor(Color.BLACK);
  61. // gr.drawString("Du hast dich in die Luft gesprengt...", getWidth() / 2,
  62. // getHeight() / 2);
  63. // Raster+Minen über dem Lose-Screen
  64.  
  65. }
  66. }
  67.  
  68. // Methode für die Zeichnung und das Highlighten der Kästchen
  69. private void zeichneRaster(Graphics gr) {
  70.  
  71. gr.setColor(Color.BLACK);
  72.  
  73. for (double i = 0; i < getWidth(); i += getWidth() / (double) Anzeige.BREITE) {
  74. gr.drawLine((int) i, 0, (int) i, getHeight());
  75. }
  76. for (double i = 0; i < getHeight(); i += getHeight() / (double) Anzeige.HOEHE) {
  77. gr.drawLine(0, (int) i, getWidth(), (int) i);
  78. }
  79.  
  80. // Highlight für Kästchen im Raster, solange das Spiel läuft
  81. if (spiel.getZustand() == Spiel.AKTIVESSPIEL) {
  82. for (int x = 0; x < Anzeige.BREITE; x++) {
  83. for (int y = 0; y < Anzeige.HOEHE; y++) {
  84. if (spiel.anzeige.get(x, y) != Anzeige.LEER) {
  85. gr.setColor(Color.LIGHT_GRAY);
  86. // System.out.println("Highlight");
  87. highlight(gr, x, y);
  88. }
  89. if (spiel.anzeige.get(x, y) == Anzeige.MARKIERUNG) {
  90. gr.setColor(Color.MAGENTA);
  91. highlight(gr, x, y);
  92.  
  93. }
  94. if (spiel.anzeige.get(x, y) == Anzeige.MINE) {
  95. gr.setColor(Color.RED);
  96. highlight(gr, x, y);
  97.  
  98. }
  99.  
  100. }
  101. }
  102. }
  103.  
  104. // Da das Feld LEER aus ' ' besteht, wird "nichts" im Panel angezeigt, bis
  105. // das Feld duch suche() mit einer Mine oder einer Nachbaranzahl gefüllt wird
  106. gr.setColor(Color.BLACK);
  107. for (int x = 0; x < Anzeige.BREITE; x++) {
  108. for (int y = 0; y < Anzeige.HOEHE; y++) {
  109. // dekl. und initialisierung des zu druckenden Zeichens,
  110. // welches in an der Minenposition im Array gespeichert ist
  111. String str = "" + spiel.anzeige.get(x, y);
  112. if (str == "0") {
  113. str = "";
  114. }
  115. // Zeichen wird auf das Panel gezeichnet
  116. gr.drawString(str, (x * getWidth()) / Anzeige.BREITE + 18, (y * getHeight()) / Anzeige.HOEHE + 25);
  117.  
  118. }
  119. }
  120.  
  121. }
  122.  
  123. private void highlight(Graphics gr, int x, int y) {
  124. gr.fillRect(((x * getWidth()) / Anzeige.BREITE) + 1, ((y * getHeight()) / Anzeige.HOEHE) + 1,
  125. getWidth() / Anzeige.BREITE - 1, getHeight() / Anzeige.HOEHE - 1);
  126. }
  127.  
  128. @Override
  129. public void mouseClicked(MouseEvent event) {
  130. // Koordinate in lokal deklarieren, um den Speicher nur temporär zu belegen
  131. int posX;
  132. int posY;
  133. // Einzelner Klick wird als Kästchen-Koordinaten gespeichert
  134. posX = (int) ((event.getX() / (getWidth() / (Anzeige.BREITE))));
  135. posY = (int) ((event.getY() / (getHeight() / (Anzeige.HOEHE))));
  136.  
  137. // Felder sollen nur klickbar sein, wenn noch nicht gewonnen/verloren
  138. if (spiel.getZustand() == Spiel.AKTIVESSPIEL) {
  139.  
  140. // Wenn mit Maus1 geklickt wird und das Feld mit LEER gefüllt ist, dann wird
  141. // aufgedeckt
  142. // 2. If Bedingung stellt sicher, dass ein Feld nur einmal abgesucht werden kann
  143. if (event.getButton() == MouseEvent.BUTTON1) {
  144. if (spiel.anzeige.get(posX, posY) == Anzeige.LEER)
  145. spiel.suche(posX, posY);
  146.  
  147. }
  148. // bei anderem Mausklick wird eine Markierung hinzugefügt oder weggenommen
  149. else if((spiel.anzeige.get(posX, posY) == Anzeige.LEER) || (spiel.anzeige.get(posX, posY) == Anzeige.MARKIERUNG)){
  150. spiel.anzeige.markierungSetzten(posX, posY);
  151. }
  152. }
  153.  
  154. repaint();
  155.  
  156. }
  157.  
  158. // Wenn "Neustarten" geklickt wird, triggert Event
  159. @Override
  160. public void actionPerformed(ActionEvent e) {
  161.  
  162. System.out.println("Das Spiel wurde neu gestart");
  163. spiel = new Spiel();
  164. repaint();
  165.  
  166. }
  167.  
  168. @Override
  169. public void mouseEntered(MouseEvent event) {
  170. // TODO Auto-generated method stub
  171.  
  172. }
  173.  
  174. @Override
  175. public void mouseExited(MouseEvent event) {
  176. // TODO Auto-generated method stub
  177.  
  178. }
  179.  
  180. @Override
  181. public void mousePressed(MouseEvent event) {
  182. // TODO Auto-generated method stub
  183.  
  184. }
  185.  
  186. @Override
  187. public void mouseReleased(MouseEvent event) {
  188. // TODO Auto-generated method stub
  189.  
  190. }
  191.  
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement