mercredi 27 mai 2015

Spielsteine zeichnen und entfernen

Hallo zusammen.

Ich habe ein Programm welches nacheinander eine bestimmte Anzahl an Spielsteinen zeichnet. Mit einem eigenen Thread werden die Spielsteine mit ihren Attributen (Position x, y, breite, ...) in eine Vector Liste gepackt. Jedes mal wenn ein Spielstein in die Liste gepackt wurde, wird das Frame mit repaint(); neu gezeichnet und danach ist 700ms Pause. So werden halt alle Spielsteine nacheinander aufgezeichnet. Jeder Spielstein hat 4 verschiedene Farben. Jetzt möchte ich prüfen, ob zwei nebeneinander liegende Steine an den Seiten die gleiche Farbe haben. Wenn nicht, soll der Stein wieder entfernt werden. Dafür lösche ich den Spielstein wieder aus der Liste und benutze wieder repaint();. Hier erstmal mein Code:

Java Code:

  1. public class AppFrame2 extends JFrame {
  2.  
  3. private static final long serialVersionUID = 1L;
  4. private Vector<Spielstein> spielsteine = new Vector<Spielstein>();
  5. private Vector<Spielstein> spielfeld = new Vector<Spielstein>();
  6.  
  7.  
  8. public AppFrame2() {
  9. super();
  10. setDefaultCloseOperation(EXIT_ON_CLOSE);
  11. MultiThread t1 = new MultiThread();
  12. ladeSpielsteine();
  13. t1.start();
  14. }
  15.  
  16. public void paint(Graphics g){
  17. for(Spielstein each: spielfeld){
  18. zeichneSpielstein(g, each);
  19. }
  20. }
  21.  
  22. public void zeichneSpielstein(Graphics stift, Spielstein s) {
  23. // Spielstein wird gezeichnet
  24. }
  25.  
  26. public void ladeSpielsteine(){
  27. // Spielsteine werden in die Variable "spielsteine" geladen
  28. }
  29.  
  30. public class MultiThread extends Thread {
  31. public void run(){
  32. // Spielfeld füllen
  33. int durchgang = 1;
  34. for(int i = 0; i < spielsteine.size(); i++){
  35. spielfeld.add(spielsteine.get(i));
  36. repaint();
  37. sleeep(700);
  38. if(durchgang > 1){
  39. if(spielsteine.get(i).getLinks() != spielfeld.get(spielfeld.size()-2).getRechts()){
  40. System.out.println("Fehler bei Durchgang: " + durchgang);
  41. spielfeld.remove(spielfeld.size()-1);
  42. repaint();
  43. sleeep(700);
  44. }
  45. }
  46. durchgang++;
  47. }
  48. }
  49.  
  50. public void sleeep(int dauer){
  51. try {
  52. Thread.sleep(dauer);
  53. } catch (InterruptedException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }
  57. }
  58. }
  59. }


Das mit dem entfernen aus der Liste klappt aber jetzt anscheinend nicht. Ich habe ja zusätzlich noch eine Ausgabe in der Konsole und das funktioniert auch, also er kommt auf jeden Fall in die if Anweisung rein. Aber der Spielstein wird nicht entfernt. Er macht einfach weiter mit den nächsten Steinen. Hat jemand eine Idee woran das liegen könnte? Falls noch mehr Code von mir benötigt wird, sagt es einfach, aber ich denke das wichtige hab ich drin.

Viele Grüße


Spielsteine zeichnen und entfernen

0 commentaires:

Enregistrer un commentaire