# Problem bei BlueJ - Pfeil bleibt nicht in der Dartscheibe stecken



## CuBy (20. Nov 2011)

Hallo,
ich lerne gerade im Informatikunterricht den Umgang mit BlueJ. Jetzt haben wir die Aufgabe bekommen,
dass ein Pfeil von oben fallen soll bis die Maustaste gedrückt wird. Dann soll der Pfeil losfliegen und 
in der Dartscheibe stecken bleiben. Jedoch soll das Programm auch beendet werden wenn die Maus nicht gedrückt wurde un der Pfeil am unteren Bildschirmrand verschwunden ist.

Aktuell ist es bei mir so, dass der Pfeil zwar am unteren Bildschirmrand stopt, aber nicht in der Dartscheibe stecken bleibt.Er fällt stattdessen am festgelegten Punkt (h <500) weiter nach unten zum Bildschrimrand.

Ich habe wirklich schon viel herumprobiert und jetzt sind mir die Ideen ausgegangen ???:L


```
/**
 * @author 
 * @version
 */

import sum.kern.*;

public class MeinProgramm
{
    // Objekte
    Stift meinStift;
    Bildschirm derBildschirm;
    Maus dieMaus;
    
    public MeinProgramm()
    {
        derBildschirm = new Bildschirm(600,400);
        meinStift = new Stift();
        dieMaus = new Maus();
    }
    
    // Dienste
    public void fuehreAus()
    {
        // Dartscheibe zeichnen
        meinStift.bewegeBis(500,50);
        meinStift.zeichneKreis(10);
        meinStift.zeichneKreis(20);
        meinStift.zeichneKreis(30);     
        meinStift.zeichneKreis(40);
        
        // Pfeil zeichnen
        meinStift.bewegeBis(10,20);
        meinStift.dreheUm(7);
        meinStift.runter();
        meinStift.bewegeUm(50);
        meinStift.zeichneKreis(3);
        
        do{
            // Pfeil loeschen
            meinStift.radiere();
            meinStift.zeichneKreis(3);
            meinStift.bewegeUm(-50);
            meinStift.normal();
            
            // Pfeil faellt
            meinStift.hoch();
            meinStift.dreheBis(270);
            meinStift.bewegeUm(0.3);
            meinStift.dreheBis(7);
            
            // Pfeil zeichnen
            meinStift.runter();
            meinStift.bewegeUm(50);
            meinStift.zeichneKreis(3);
            
            if (dieMaus.istGedrueckt())
           {
               do{
                   // Pfeil loeschen
                   meinStift.radiere();
                   meinStift.zeichneKreis(3);
                   meinStift.bewegeUm(-50);
                   meinStift.normal();
               
                   // Pfeil fliegt
                   meinStift.hoch();
                   meinStift.bewegeUm(0.1);
               
                   // Pfeil zeichnen
                   meinStift.runter();
                   meinStift.bewegeUm(50);
                   meinStift.zeichneKreis(3);
                }while (meinStift.hPosition()<500);
           }
            
           }while (meinStift.vPosition()<400);
           
   
// Aufraeumen
        dieMaus.gibFrei();
        meinStift.gibFrei();
        derBildschirm.gibFrei();
    }
}
```


----------



## Marco13 (20. Nov 2011)

So ganz hab' ich's nicht kapiert... aber... was macht er bei

```
if (dieMaus.istGedrueckt())
   {
       do{
           ....
       }while (meinStift.hPosition()<500);
       
       break; // Äußere schleife Abbrechen 
   }
```
???


----------



## CuBy (20. Nov 2011)

An der Stelle hört er auf in Richtung Dartscheibe zu fliegen und sollte auch eigentlich "stecken" bleiben, sich also gar nicht mehr bewegen ... was ja leider nicht funktioniert


----------



## Marco13 (21. Nov 2011)

(Ich meinte, was pasiert wenn man dort das "break" einfügt ... gibt's die benötigten Klassen irgendwo...Oder sind die bei BlueJ dabei?)


----------



## CuBy (21. Nov 2011)

Ah, vielen dank, da lag der Fehler!  Ich kam einfach nicht drauf! 

Hier die funktionierende Version:

```
/**
 * @author 
 * @version
 */

import sum.kern.*;

public class MeinProgramm
{
    // Objekte
    Stift meinStift;
    Bildschirm derBildschirm;
    Maus dieMaus;
    
    public MeinProgramm()
    {
        derBildschirm = new Bildschirm(600,400);
        meinStift = new Stift();
        dieMaus = new Maus();
    }
    
    // Dienste
    public void fuehreAus()
    {
        // Scheibe zeichnen
        meinStift.bewegeBis(500,50);
        meinStift.zeichneKreis(10);
        meinStift.zeichneKreis(20);
        meinStift.zeichneKreis(30);     
        meinStift.zeichneKreis(40);
        
        // Pfeil zeichnen
        meinStift.bewegeBis(10,20);
        meinStift.dreheUm(7);
        meinStift.runter();
        meinStift.bewegeUm(50);
        meinStift.zeichneKreis(3);
        
        do{
            // Pfeil loeschen
            meinStift.radiere();
            meinStift.zeichneKreis(3);
            meinStift.bewegeUm(-50);
            meinStift.normal();
            
            // Pfeil faellt
            meinStift.hoch();
            meinStift.dreheBis(270);
            meinStift.bewegeUm(0.3);
            meinStift.dreheBis(7);
            
            // Pfeil zeichnen
            meinStift.runter();
            meinStift.bewegeUm(50);
            meinStift.zeichneKreis(3);
            
            if (dieMaus.istGedrueckt())
           {
               do{
                   // Pfeil loeschen
                   meinStift.radiere();
                   meinStift.zeichneKreis(3);
                   meinStift.bewegeUm(-50);
                   meinStift.normal();
               
                   // Pfeil fliegt
                   meinStift.hoch();
                   meinStift.bewegeUm(0.1);
               
                   // Pfeil zeichnen
                   meinStift.runter();
                   meinStift.bewegeUm(50);
                   meinStift.zeichneKreis(3);
                }while (meinStift.hPosition()<500);
                
                break;
           }
            
           }while (meinStift.vPosition()<400);
           
   
// Aufraeumen
        dieMaus.gibFrei();
        meinStift.gibFrei();
        derBildschirm.gibFrei();
    }
}
```


----------

