Java Projekt 4 Gewinnt (BlueJ)

  • Java Projekt 4 Gewinnt (BlueJ)

    Hallo,

    ich programmiere als Projekt 4Gewinnt und habe bis jetzt zuerst das Spielfeld mit den JButtons erstellt,
    weiß aber nicht weiter. Ich will dass wenn ich die verschiedenen JButtons (unten links) anklicke
    dass sich je nachdem welchen ich anklicke die oberste Lampe im Feld füllt (Farbe erstmal egal),
    also wenn ich Jbutton 1 anklicke (unten links), dann soll sich die erste lampe oben links im spielfeld färben,
    wenn Jbutton 2 dann die nächste Lampe (nach rechts) usw.

    Ich weiß dass ich dafür einen ActionListener brauche, weiß aber noch nicht wie man diesen ausführt.
    Kann mir einer sagen wie der Code dafür heißen muss?

    Hier die Klassen und Screenshot:



    Klasse "SPIEL":

    Quellcode

    1. public class SPIEL
    2. { public LAMPE[][] spielfeld;
    3. int groesse;
    4. public SPIEL()
    5. {
    6. groesse=20;
    7. spielfeld = new LAMPE[7][6];
    8. for (int i = 0; i<7; i++)
    9. for (int k = 0; k<6; k++)
    10. spielfeld[i][k] = new LAMPE(150+2*groesse*i,120+2*groesse*k, groesse);
    11. }
    12. public void zeichne()
    13. {
    14. for (int i = 0; i<7;i++)
    15. for (int k = 0; k<6;k++)
    16. spielfeld[i][k].zeichne();
    17. for (int i = 0; i<6;i++);
    18. }
    19. public void loeschen()
    20. {
    21. for (int i = 0; i<7; i++)
    22. for (int k = 0; k<6; k++);
    23. }
    24. }
    Alles anzeigen




    Klasse "LAMPE":

    Quellcode

    1. public class LAMPE
    2. { private int px,py;
    3. protected int radius, farbe;
    4. public LAMPE(int startx, int starty,int radiusneu)
    5. {
    6. px = startx;
    7. py = starty;
    8. farbe = 7;
    9. radius = radiusneu;
    10. }
    11. public void zeichne()
    12. {
    13. ZEICHENFENSTER.gibFenster().zeichneRechteck(px, py, 2*radius, 2*radius);
    14. ZEICHENFENSTER.gibFenster().fuelleKreis(px+radius, py+radius, radius, farbe);
    15. }
    16. public int farbeholen()
    17. {
    18. return farbe;
    19. }
    20. public int holradius()
    21. {
    22. return radius;
    23. }
    24. }
    Alles anzeigen




    Klasse "MASTER":

    Java-Quellcode

    1. import javax.swing.*;
    2. import java.awt.event.*;
    3. import java.util.Random;
    4. public class MASTER
    5. {
    6. private SPIEL s;
    7. private JButton start, auswerten, Feld1, Feld2, Feld3, Feld4, Feld5, Feld6, Feld7;
    8. private JLabel anzeige;
    9. private int fx,fy, fzeile, black, white;
    10. public MASTER()
    11. {
    12. s = new SPIEL();
    13. start = new JButton("START");
    14. auswerten = new JButton("AUSWERTEN");
    15. Feld1 = new JButton("|");
    16. Feld2 = new JButton("|");
    17. Feld3 = new JButton("|");
    18. Feld4 = new JButton("|");
    19. Feld5 = new JButton("|");
    20. Feld6 = new JButton("|");
    21. Feld7 = new JButton("|");
    22. s.zeichne();
    23. fx =0;
    24. fy =0;
    25. start.addActionListener(new ActionListener()
    26. {
    27. public void actionPerformed(ActionEvent st)
    28. {
    29. loeschen();
    30. spielen();
    31. }
    32. }
    33. );
    34. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(start,"rechts");
    35. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(auswerten,"rechts");
    36. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld1,"unten");
    37. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld2,"unten");
    38. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld3,"unten");
    39. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld4,"unten");
    40. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld5,"unten");
    41. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld6,"unten");
    42. ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Feld7,"unten");
    43. }
    44. public void spielen()
    45. {
    46. Feld1.addActionListener(new ActionListener()
    47. {
    48. public void actionPerformed(ActionEvent bl)
    49. {
    50. if (fy<7)
    51. {
    52. if (fx<6)
    53. fx++;
    54. else
    55. {
    56. fx=0;
    57. fy++;
    58. }
    59. s.zeichne();
    60. }
    61. else;
    62. }
    63. }
    64. );
    65. Feld2.addActionListener(new ActionListener()
    66. {
    67. public void actionPerformed(ActionEvent gr)
    68. {
    69. if (fy<7)
    70. {
    71. if (fx<6)
    72. fx++;
    73. else
    74. {
    75. fx=0;
    76. fy++;
    77. }
    78. s.zeichne();
    79. }
    80. else;
    81. }
    82. }
    83. );
    84. Feld3.addActionListener(new ActionListener()
    85. {
    86. public void actionPerformed(ActionEvent ro)
    87. {
    88. if (fy<7)
    89. {
    90. if (fx<6)
    91. fx++;
    92. else
    93. {
    94. fx=0;
    95. fy++;
    96. }
    97. s.zeichne();
    98. }
    99. else;
    100. }
    101. }
    102. );
    103. Feld4.addActionListener(new ActionListener()
    104. {
    105. public void actionPerformed(ActionEvent ma)
    106. {
    107. if (fy<7)
    108. {
    109. if (fx<6)
    110. fx++;
    111. else
    112. {
    113. fx=0;
    114. fy++;
    115. }
    116. s.zeichne();
    117. }
    118. else;
    119. }
    120. }
    121. );
    122. Feld5.addActionListener(new ActionListener()
    123. {
    124. public void actionPerformed(ActionEvent ge)
    125. {
    126. if (fy<7)
    127. {
    128. if (fx<6)
    129. fx++;
    130. else
    131. {
    132. fx=0;
    133. fy++;
    134. }
    135. s.zeichne();
    136. }
    137. else;
    138. }
    139. }
    140. );
    141. }
    142. public void loeschen()
    143. {
    144. for (int i=0;i<4;i++)
    145. s.loeschen();
    146. fx=0;
    147. fy=0;
    148. s.zeichne();
    149. }
    150. }
    Alles anzeigen





    hier mal ein Screenshot:

  • Also zum Anfang würde ich dir erstmal empfehlen, für die Buttons ein Array herzunehmen; das bietet sich aus mehreren Gründen an, wie du vllt (später) merken wirst.
    Vorschlag:

    in die Klasse MASTER müsste dann folgende Änderung eingebaut werden:

    Quellcode

    1. private final JButton[] fields = new JButton[7];
    2. public MASTER() {
    3. .......
    4. for(int i = 0; i < fields.length; ++i) {
    5. fields[i] = new JButton("|");
    6. //button der GUI hinzufügen, keine Ahnung wo du das machst
    7. fields[i].addActionListener(this); //lass zB MASTER ActionListener implementieren
    8. }
    9. ....
    10. }
    11. @Override
    12. public void actionPerformed(final ActionEvent e) {
    13. int index = 0;
    14. for(int i = 0; i < fields.length; ++i) {
    15. if(e.getSource() == fields[i]) {
    16. index = i;
    17. break;
    18. }
    19. }
    20. //jetzt hast du den index des gedrückten Buttons
    21. //nun fehlt hier in der Klasse eine Referenz auf deine LAMPEn
    22. //spendiere dort eine Methode mark() zB um sie einzufärben
    23. }
    Alles anzeigen


    Wenn du das hast, kann ich dir sagen, wie es weiter geht.
    War das einigermassen verständlich ?? Kann deine Kenntnisse nicht einschätzen.