Drehen eines Pfeils im Flug

Steamer

Mitglied
Guten Tag,
ich habe seit einigen Wochen in der Schule informatik und wir beschäftigen uns mit Java,genauer,mit dem Programm BlueJ.

Dazu benutzen wir das Buch "Informatik mit Java-Eine Einführung mit BlueJ Band I" von Bernard Schriek.
Falls es jemand zuhause hat,ich bin bei Kapitel 5.7,für die anderen,es geht in großen und ganzen darum darum,ein zuvor programmiertes Dartspiel so zu verändern,dass es einen kleinen "2-Spieler-Modus" beinhaltet,der mit der Tastatur bedient wird.
Der Pfeil soll damit,nachdem er "abgeschossen" wurde im Flug mit den Tasten "l" und "r" in die jeweilige Richtung (links,rechts) um fünf Grad gedreeht werden und danach weiterfliegen.
Ich kann meinen Lehrer aufgrund einer Verhinderung in nächster Zeit nicht fragen,deshalb tu ich´s mal hier.

Ein kleiner Ausschnitt:
Java:
// Flug des Pfeils
do   
        {
            meinStift.radiere();
            meinStift.zeichneKreis(3);
            meinStift.bewegeUm(-50);
            meinStift.hoch();
            meinStift.bewegeUm(0.1);
            meinStift.normal();
            meinStift.runter();
            meinStift.bewegeUm(50);
            meinStift.zeichneKreis(3);
        } while (meinStift.hPosition()<540); 
// Drehung in Flug
        do
        {

            switch (dieTastatur.zeichen())
            {
                case 'r': case 'R': 
                meinStift.radiere();
                meinStift.zeichneKreis(3);
                meinStift.bewegeUm(-50);
                meinStift.normal();
                meinStift.dreheUm(5);
                meinStift.bewegeUm(50);
                meinStift.zeichneKreis(3);
                break;

                case 'l': case 'L': 
                meinStift.radiere();
                meinStift.zeichneKreis(3);
                meinStift.bewegeUm(-50);
                meinStift.normal();
                meinStift.dreheUm(-5);
                meinStift.bewegeUm(50);
                meinStift.zeichneKreis(3);
                break;
                
                default: 
                meinStift.radiere();
                meinStift.zeichneKreis(3);
                meinStift.bewegeUm(-50);
                meinStift.hoch();
                meinStift.bewegeUm(0.1);
                meinStift.normal();
                meinStift.runter();
                meinStift.bewegeUm(50);
                meinStift.zeichneKreis(3);
                break;
            }

        }while (dieTastatur.wurdeGedrueckt());

Mein Problem ist,dass sich der Pfeil im Flug nicht dreht,sondern einfach weiterfliegt.
Der Pfeil soll beim Drehen NICHT weiterfliegen.

MfG
Steamer
 

XHelp

Top Contributor
Mach dir ein paar Sysouts rein, um zu sehen was wo wann ausgeführt wird.
Generell sieht die Logik etwas komisch aus. Du musst ja den Pfeil drehen, wenn man eine Taste drückt und nicht den Benutzer fragen, ob er jetzt eine Taste drücken will...
 
G

gman

Gast
Hi,

ich nehme an das das Programm beendet ist, wenn die erste Schleife durchlaufen hat. Somit wird die zweite
Schleife gar nicht wie gewünscht ausgeführt, bzw. hat nicht den gewünschten Effekt.

Kommentier mal die erste do-while-Schleife aus und pass die Bedingung der zweiten do-while-Schleife an.
Ich kenne den Rest von deinem Code nicht, daher kann ich dir nicht genau sagen wie.
 

Steamer

Mitglied
Java:
import sum.kern.*;
/**
 * @author Marcel Frankreiter
 * @version 01.10.2010
 */
public class Dart7
{
    // Objekte
    Bildschirm derBildschirm;
    Stift meinStift;
    Buntstift meinBuntstift;
    Tastatur dieTastatur;
    Maus dieMaus;

    // Konstruktor
    public Dart7()
    {

        derBildschirm = new Bildschirm(600,300);
        meinStift = new Stift();
        meinBuntstift = new Buntstift();
        dieTastatur = new Tastatur();
        dieMaus = new Maus();
        this.fuehreAus();

    }

    // Dienste
    public void fuehreAus()
    {
        // Aktionsteil
        //Dartscheibe zeichen
        meinStift.bewegeBis(540,150);
        meinStift.zeichneKreis(10);
        meinStift.zeichneKreis(20);
        meinStift.zeichneKreis(30);
        meinStift.zeichneKreis(40);
        //Pfeil zeichnen
        meinStift.hoch();
        meinStift.bewegeBis(20,30);
        meinStift.dreheBis(13.6598);
        meinStift.runter();
        meinStift.bewegeUm(50);
        meinStift.zeichneKreis(3);

        //Pfeil fällt
        do
        if (meinStift.vPosition()<350)
        {
            meinStift.radiere();
            meinStift.zeichneKreis(3);
            meinStift.bewegeUm(-50);
            meinStift.dreheBis(270);
            meinStift.bewegeUm(0.4);
            meinStift.dreheBis(13.6598);
            meinStift.normal();
            meinStift.bewegeUm(50);
            meinStift.zeichneKreis(3);
        }
        else
        {
            meinStift.hoch();
            meinStift.bewegeBis(20,30);
            meinStift.runter();

        }while (!dieMaus.istGedrueckt());

        do
        if (dieMaus.istGedrueckt())
        {
            meinStift.radiere();
            meinStift.zeichneKreis(3);
            meinStift.bewegeUm(-50);
            meinStift.dreheUm(-0.05);
            meinStift.normal();
            meinStift.bewegeUm(50);
            meinStift.zeichneKreis(3);
        }
        else
        {
        } while (dieMaus.istGedrueckt());

        //Pfeil fliegt
        do
        {
            meinStift.radiere();
            meinStift.zeichneKreis(3);
            meinStift.bewegeUm(-50);
            meinStift.hoch();
            meinStift.bewegeUm(0.1);
            meinStift.normal();
            meinStift.runter();
            meinStift.bewegeUm(50);
            meinStift.zeichneKreis(3);
        } while (meinStift.hPosition()<540);
        // Pfeil dreht sich während des Fluges bei Benutzung einer jeweiligen Taste
        do
        {

            switch (dieTastatur.zeichen())
            {
                case 'r': case 'R': 
                meinStift.radiere();
                meinStift.zeichneKreis(3);
                meinStift.bewegeUm(-50);
                meinStift.normal();
                meinStift.dreheUm(5);
                meinStift.bewegeUm(50);
                meinStift.zeichneKreis(3);
                break;

                case 'l': case 'L': 
                meinStift.radiere();
                meinStift.zeichneKreis(3);
                meinStift.bewegeUm(-50);
                meinStift.normal();
                meinStift.dreheUm(-5);
                meinStift.bewegeUm(50);
                meinStift.zeichneKreis(3);
                break;
                
                default: 
                meinStift.radiere();
                meinStift.zeichneKreis(3);
                meinStift.bewegeUm(-50);
                meinStift.hoch();
                meinStift.bewegeUm(0.1);
                meinStift.normal();
                meinStift.runter();
                meinStift.bewegeUm(50);
                meinStift.zeichneKreis(3);
                break;
            }

        }while (dieTastatur.wurdeGedrueckt());

        if (meinStift.vPosition() > 110 && meinStift.vPosition() < 190)
        {
            meinStift.hoch();
            meinStift.bewegeBis(265,75);
            meinStift.runter();
            meinStift.schreibeText("Getroffen");
        }
        else
        {
            meinStift.hoch();
            meinStift.bewegeBis(265,75);
            meinStift.runter();
            meinStift.schreibeText("Daneben");
        }

        meinStift.hoch();
        meinStift.bewegeBis(540,150);
        meinStift.zeichneKreis(10);
        meinStift.zeichneKreis(20);
        meinStift.zeichneKreis(30);
        meinStift.zeichneKreis(40);

        // Aufraeumen
        meinStift.gibFrei();
        dieTastatur.gibFrei();
        dieMaus.gibFrei();
        meinBuntstift.gibFrei();
        derBildschirm.gibFrei();
    }
}

Das ist mein bisheriger kompletter Code.

EDIT:
@XHelp:
Icfh habe mir schon gedacht,dass es an der while-Bedingung liegt,allerdings weiß ich gerade keine bessere Lösung und kann meinen Lehrer,der übrigens auch der Autor des Buches perönlich ist,die nächsten Wochen nicht fragen.

@gman:
Das Programm ist nach der dritten do-Schleife beendet.
Nach beendigung kommt allerdings der SuM-Fehler "Die Tastatur wurde nicht geprüft."
Das wiederum versteh ich nicht ganz,ich benutze Java jetzt ca. 8 Wochen,90 Minuten pro Woche in der Schule und alles was ich bisher gemacht habe,lief mehr oder weniger Problemlos und da,wo ich wirklich nicht weiterkomme und Hilfe brauche,ist mein Lehrer weg,ironie des Lebens irgendwie...
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Wie gesagt, baue Debug-Ausgaben rein, dann wirst du sehen wo etwas schief läuft.
Und
Code:
fuehreAus
solltest du nicht unbedingt im Konstruktor ausführen.
 

Steamer

Mitglied
Wieso nicht?
Ich habe es bisher immer benutzt,denn manuell dauerts immer etwas länger.
Und ob ich das Programm jetzt automatisch starten lasse,oder manuell ausführe,ist doch eigentlich egal,oder?
 
G

Gast2

Gast
Der Konstruktor ist (wie der Name schon sagt ;) ) dafür da dir ein Objekt zu bauen.
Das sollte man auch so schnell wie möglich erledigen und nach möglichkeit keine oder nur wenige Schleifen dort ausführen.
 

Erebos

Mitglied
Ich würde die ganze Sache anders angehen in dem ich mir Pfeile und co. einzelnt erstelle.
Ich bin noch nicht ganz so weit aber ich denke es ist vom Prinziep schon mal um einiges einfacher.
Java:
import sum.kern.*;
/**
 * @author Erebos
 * @version 5.2
 */
public class Superdart
{
    // Objekte
    Bildschirm derBildschirm;
    Buntstift meinStift;
    // Konstruktor
    public Superdart()
    {
        derBildschirm = new Bildschirm();
        meinStift = new Buntstift();
        Dartspiel();
    }
public void zeichnePfeil()
{
meinStift.normal();    
meinStift.runter();
    meinStift.bewegeUm(50);
    meinStift.zeichneKreis(2.5);
    meinStift.bewegeUm(-50);
    
    
}
public void radierePfeil()
{
    meinStift.radiere();
    meinStift.runter();
    meinStift.bewegeUm(50);
    meinStift.zeichneKreis(2.5);
    meinStift.bewegeUm(-50);
 
}
public void zeichneZielscheibe()
{
meinStift.bewegeBis(500,200);
        meinStift.runter();
        meinStift.zeichneKreis(5);
        meinStift.zeichneKreis(15);
        meinStift.zeichneKreis(30);
        meinStift.zeichneKreis(50);
        meinStift.hoch();
}
    public void Dartspiel()
    {
        // Aktionsteil mit kleiner Werbung
        derBildschirm.nachVorn();
        meinStift.bewegeBis(500, 20);
        meinStift.runter();
        meinStift.schreibeText("Daneben :-( Platz für ihre Werbung");
        meinStift.hoch();
        zeichneZielscheibe();
        meinStift.bewegeBis(300,400);
        meinStift.dreheUm(45);
       //// meinStift.dreheUm(45);
        do
        {
            zeichnePfeil();
            radierePfeil();
            meinStift.bewegeUm(0.01);
            
            
        }while(meinStift.hPosition()<500);
        zeichneZielscheibe();
    
        meinStift.gibFrei();
        derBildschirm.gibFrei();
    
    }
}

Der Pfeil trifft nicht ganz, da ich dieses von unten schräg kommen gerade erst ausprobiert habe.
 
G

Gast2

Gast
Code:
public void Dartspiel()
<- Methoden schreibt man klein.
Auch bei dir gilt dass lange Berechnungen/Animationen nicht im Kontruktor ausgeführt werden sollten. Rufe deine Methode dartspiel() auf der Instanz auf die du erstellt hast.

PS:
Meinst du der TO sucht nach über nem halben Jahr immernoch ne lösung? ;)
 

Erebos

Mitglied
Also, ob er immer noch eine Lösung sucht ist fraglich, aber mann muss das Theard ja nicht so unvollständig veraltern lassen. Außerdem interessiert mich dir lösung selbst.
Ich habe das mit den Formalitäten noch nicht ganz raus, da ich selbst noch nicht so viel erfahrung habe. Ich habe das direkt in den Konstruktor reingeschrieben, da es mich nervt, wenn ich die sachen immer einzelnt aufrufen muss.

mfg. Erebos
 

Steamer

Mitglied
Danke euch, habe die Lösung mittlerweile gehabt. ;)
Achja Leute, ichhatte damals gerade mit Java angefangen,also seit nicht so kritisch, mehr hatten wir da noch nicht gelernt ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Denkanstoß: Drehen eines Bildes (Matrix) Java Basics - Anfänger-Themen 5
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
N Bild drehen Java Basics - Anfänger-Themen 3
R Java ImageIcon drehen Java Basics - Anfänger-Themen 6
R Image drehen Java Basics - Anfänger-Themen 1
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
I String um 90 Grad drehen Java Basics - Anfänger-Themen 17
B Erste Schritte Drehen in Graphics2d Java Basics - Anfänger-Themen 2
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
P Vektor im R3 drehen? Java Basics - Anfänger-Themen 14
O BufferedImage drehen, falsch positioniert Java Basics - Anfänger-Themen 5
A Array drehen Java Basics - Anfänger-Themen 2
S Drehen RGB Würfel Java Basics - Anfänger-Themen 18
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
L Array drehen Java Basics - Anfänger-Themen 8
F Bild drehen Java Basics - Anfänger-Themen 9
A Javaspiel im Handy mit Drehen Java Basics - Anfänger-Themen 12
A Grafik2d Objekte drehen, Idee da, Problem in Umsetzung Java Basics - Anfänger-Themen 3
S JPG drehen, skalieren und speichern Java Basics - Anfänger-Themen 15
D Image drehen Java Basics - Anfänger-Themen 6
S Zeichnung drehen Java Basics - Anfänger-Themen 13
H Drehen von Label Java Basics - Anfänger-Themen 2
R 2dimensionales array um 90 grad drehen Java Basics - Anfänger-Themen 2
T Bild drehen + richtige größe berechnen Java Basics - Anfänger-Themen 4
J Kann man ein JFrame/JWindow 90/-90 drehen? Java Basics - Anfänger-Themen 9
B array drehen Java Basics - Anfänger-Themen 11
G Aufgabe rekursiv Zahlen drehen Java Basics - Anfänger-Themen 5
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
M Wie erreiche ich das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 2
M Wie erreiche ich es das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 0
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
A Java, verarbeitung eines xml-files Java Basics - Anfänger-Themen 2
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
C Überprüfen eines Programms auf Syntaxfehler Java Basics - Anfänger-Themen 3
S Wie kann ich den Bereich eines Integers begrenzen? Java Basics - Anfänger-Themen 2
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
B Downgrade eines bestehenden Projektes Java Basics - Anfänger-Themen 5
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Z Rückgabe eines Values in umgekehrte richtung Java Basics - Anfänger-Themen 5
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
M Benutzereingabe eines Codes verbessern Java Basics - Anfänger-Themen 3
B Modulo-Operator anhand eines Beispieles erklären Java Basics - Anfänger-Themen 7
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
A Teilen eines Arrays Java Basics - Anfänger-Themen 5
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
R Löschen und ausgeben eines Teilbaums Java Basics - Anfänger-Themen 3
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
M Hilfe bei Strukturierung eines Buchungssystems Java Basics - Anfänger-Themen 3
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben