Java Projekt 4 Gewinnt (BlueJ)

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • 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":

    Source Code

    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. }
    Display All




    Klasse "LAMPE":

    Source Code

    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. }
    Display All




    Klasse "MASTER":

    Java Source Code

    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. }
    Display All





    hier mal ein Screenshot:

    [Blocked Image: http://s14.directupload.net/images/120321/ckrlljkp.jpg]
  • 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:

    Source Code

    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. }
    Display All


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