Erste Schritte Verkettung von Anweisungen

Saggerrr

Mitglied
Hallo, ich versuche gerade das selbstprogrammierte Spiel eines Kollegen mittels einer Javakonsole ein kleines Auto durch einen Parkours bringen. Leider bin ich in Java eine echte Niete und hab zudem nur begrenzt Befehle verfügbar. Mein Plan ist es irgendwie eine Switchcase oder Schleife zu bauen, mit der ich das Auto programmieren kann. Ich möchte am Liebsten einfach nur eine Kette von variablen geben, damit das Auto so fährt wie ich es möchte, sprich a,b,b,a,a,b damit das Auto bei "a" geradeaus fährt und bei "b" nach links dreht. Die Befehle um das Auto zu bewegen sind drive(); und turnLeft();
Kann mir da mal einer helfen?
Die Lösung bitte ausführlich, da ich da null Ahnung von habe, danke. :)
 
Zuletzt bearbeitet:
X

Xyz1

Gast
Gehts um ein Labyrinth? Hatte ich dazu einmal ein Video erstellt, ist aber gerad nicht auffindbar. Was ist das Ziel des Spiels?
 

Saggerrr

Mitglied
Ja man soll durch einen Parkours fahren und zwischendurch auch mal nen Umweg fahren um noch Benzin aufzusammeln. Wäre schön wenn du das Video findest
 

Blender3D

Top Contributor
Beispielprogram bestehend aus:
Dem Interface PlayField
und den Klassen
[MyPlayField] das Playfield implementiert. ( Ermöglicht viele Arten ein Spielfeld zu erstellen )
[Car] das ein Playfield braucht. ( "Lebewesen in der Umgebung" )
[Game] die die Klassen MyPlayField, Car, JTextfield, JButton zusammenführt.
[start] (Verwende ich in meinen Java Programmen immer als Startklasse laut Konvention sollte die mit einem Großbuchstaben beginnen )
[start] erzeugt einen JFrame ( Fenster) in das ein [Game] eingefügt wird.
Das Miniprogramm erhebt nicht den Anspruch auf Perfektion und ist nicht die beste Lösung ein Spiel zu implementieren ( Besser ist es alle Grafiken in ein Image zu zeichnen .... )
Es soll Dir helfen Dich langsam in die Materie einzuarbeiten.

Code:
import java.awt.Graphics;
import java.awt.Point;

/**
* Use an interface to allow you to implement different kinds of playing fields.
*
* @see MyPlayField for example
*
* @author vekto
*
*/
public interface PlayField {

    /**
     * draws playing field.
     */
    public void draw(Graphics g);

    /**
     * @return number of fields horizontal.
     */
    public int getNumFieldsHorizontal();

    /**
     * @return number of fields vertical.
     */
    public int getNumFieldsVertical();

    /**
     * @return size of one field.
     */
    public int getSizeOneField();

    /**
     * @return position to go.
     */
    public Point getAimPosition();

    /**
     * @return starting position.
     */
    public Point getStartPosition();

    /**
     * @return height in pixel
     */
    public int getHeight();

    /**
     * @return width in pixel
     */
    public int getWidth();

    /**
     * checks for an obstacle at position x,y
     *
     * @param x
     * @param y
     * @return boolean
     */
    public boolean isFree(int x, int y);
}

Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

public class MyPlayField implements PlayField {
    private int numFieldsVertical = 14;
    private int numFieldsHorizontal = 15;
    private Point startPosition = new Point(1, 3);
    private Point aimPosition = new Point(11, 9);
    private String[] obstacles = { "***************", "*             *", "*   ***** **  *", "*   *         *",
            "*   *   *  *  *", "*   *   *  *  *", "*          *  *", "*   ********  *", "*   *         *",
            "*             *", "*             *", "*             *", "*             *", "***************"

    };
    private Color colorObstacle = Color.BLACK;
    private Color aimColor = Color.yellow;

    @Override
    public void draw(Graphics g) {
        g.setColor(colorObstacle);
        int size = getSizeOneField();
        for (int y = 0; y < numFieldsVertical; y++) {
            for (int x = 0; x < numFieldsHorizontal; x++) {
                if (!isFree(x, y))
                    g.fillRect(x * size, y * size, size, size);
                if (x == aimPosition.x && y == aimPosition.y) {
                    g.setColor(aimColor);
                    g.fillRect(x * size, y * size, size, size);
                    g.setColor(colorObstacle);                   
                }
            }
        }
    }

    @Override
    public int getNumFieldsHorizontal() {
        return numFieldsHorizontal;
    }

    @Override
    public int getNumFieldsVertical() {
        return numFieldsVertical;
    }

    @Override
    public int getSizeOneField() {
        return 25;
    }

    @Override
    public int getWidth() {
        return getNumFieldsHorizontal() * getSizeOneField();
    }

    @Override
    public int getHeight() {
        return getNumFieldsVertical() * getSizeOneField();
    }

    @Override
    public boolean isFree(int x, int y) {       
        return obstacles[y].charAt(x) == ' ';
    }

    @Override
    public Point getAimPosition() {
        return aimPosition;
    }

    @Override
    public Point getStartPosition() {
        return startPosition;
    }

}

Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class Car implements ActionListener {
    private Point position = new Point(); // position in pixel
    private Color color = Color.BLUE; // car color
    private PlayField playField; // playing field for the car
    private Component parent = null; // parent for repaint graphics

    // @see actionPerformed
    private Timer animator = null; // timer for ActionListener
    private String moveStr = null; // string for movement
    private int moveId = 0; // character id for movement string

    public enum Direction {
        UP, RIGHT, LEFT, DOWN, NOMOVE
    };

    public Car(Component parent, PlayField playField) {
        this.playField = playField;
        this.parent = parent;
        setPosition(playField.getStartPosition());
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (moveStr == null || moveStr.length() == 0 || moveId > moveStr.length() - 1) {
            stopMovement();
            return;
        }
        move(charToDirection(moveStr.charAt(moveId)));
        moveId++;
        parent.repaint();
    }

    // converts character to direction
    public Direction charToDirection(char c) {
        switch (c) {
        case 'l':
            return Direction.LEFT;
        case 'u':
            return Direction.UP;
        case 'r':
            return Direction.RIGHT;
        case 'd':
            return Direction.DOWN;
        default:
        }
        return Direction.NOMOVE;
    }

    // draws car
    public void draw(Graphics g) {
        Color old = g.getColor();
        g.setColor(color);
        int size = playField.getSizeOneField();
        g.fillRect(position.x, position.y, size, size);
        g.setColor(old);
    }

    // get car's coordinates
    public Point getPosition() {
        int size = playField.getSizeOneField();
        return new Point(position.x / size, position.y / size);
    }

    // moves into given direction if possible
    public boolean move(Direction dir) {
        Point testPos = getPosition();
        switch (dir) {
        case UP:
            testPos.y -= 1;
            break;
        case DOWN:
            testPos.y += 1;
            break;
        case LEFT:
            testPos.x -= 1;
            break;
        case RIGHT:
            testPos.x += 1;
            break;
        case NOMOVE:
            return false;
        }
        // test for obstacle
        if (!playField.isFree(testPos.x, testPos.y))
            return false;
        setPosition(testPos);
        return true;
    }

    // put car to coordinates
    public void setPosition(Point position) {
        int size = playField.getSizeOneField();
        this.position = new Point(position.x * size, position.y * size);
    }

    public void startMovement(String text) {
        moveStr = text; // save moving string
        moveId = 0; // reset moving character id
        stopMovement(); // ensure animator has stopped before restart
        animator = new Timer(500, this); // call actionPerformed every 500 milliseconds
        animator.start(); // @see actionPerformed
    }

    // stops timer
    private void stopMovement() {
        if (animator != null)
            animator.stop();
        animator = null;
    }

}
Code:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class Game extends JPanel implements ActionListener {
    private Car car = null;
    private MyPlayField playField = new MyPlayField();
    private JTextField txt = new JTextField();
    private JButton go = new JButton("go");

    public Game() {
        txt.setPreferredSize(new Dimension(100, 20));
        go.setPreferredSize(new Dimension(50, 20));
        go.addActionListener(this); // if go is clicked call actionPerformed
        add(txt); // add TextField for moving text
        add(go); // add JButton for starting movement
        car = new Car(this, playField);
        setPreferredSize(new Dimension(playField.getWidth(), playField.getHeight()));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        car.startMovement(txt.getText()); // start car movement with entered text
        txt.setText(""); // clear entered text
        txt.requestFocusInWindow(); // set focus to text input
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); // draw added components and the other stuff
        playField.draw(g); // draw playing field
        car.draw(g); // draw car
    }
}
Code:
import javax.swing.JFrame;
import Game;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Car directions [l r u d]");
        frame.getContentPane().add(new Game());
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
:rolleyes:
 

Blender3D

Top Contributor
Beispielprogram bestehend aus:
Dem Interface PlayField
und den Klassen
[MyPlayField] das Playfield implementiert. ( Ermöglicht viele Arten ein Spielfeld zu erstellen )
[Car] das ein Playfield braucht. ( "Lebewesen in der Umgebung" )
[Game] die die Klassen MyPlayField, Car, JTextfield, JButton zusammenführt.
[start] (Verwende ich in meinen Java Programmen immer als Startklasse laut Konvention sollte die mit einem Großbuchstaben beginnen )
[start] erzeugt einen JFrame ( Fenster) in das ein [Game] eingefügt wird.
Das Miniprogramm erhebt nicht den Anspruch auf Perfektion und ist nicht die beste Lösung ein Spiel zu implementieren ( Besser ist es alle Grafiken in ein Image zu zeichnen .... )
Es soll Dir helfen Dich langsam in die Materie einzuarbeiten.

Code:
import java.awt.Graphics;
import java.awt.Point;

/**
* Use an interface to allow you to implement different kinds of playing fields.
*
* @see MyPlayField for example
*
* @author vekto
*
*/
public interface PlayField {

    /**
     * draws playing field.
     */
    public void draw(Graphics g);

    /**
     * @return number of fields horizontal.
     */
    public int getNumFieldsHorizontal();

    /**
     * @return number of fields vertical.
     */
    public int getNumFieldsVertical();

    /**
     * @return size of one field.
     */
    public int getSizeOneField();

    /**
     * @return position to go.
     */
    public Point getAimPosition();

    /**
     * @return starting position.
     */
    public Point getStartPosition();

    /**
     * @return height in pixel
     */
    public int getHeight();

    /**
     * @return width in pixel
     */
    public int getWidth();

    /**
     * checks for an obstacle at position x,y
     *
     * @param x
     * @param y
     * @return boolean
     */
    public boolean isFree(int x, int y);
}

Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

public class MyPlayField implements PlayField {
    private int numFieldsVertical = 14;
    private int numFieldsHorizontal = 15;
    private Point startPosition = new Point(1, 3);
    private Point aimPosition = new Point(11, 9);
    private String[] obstacles = { "***************", "*             *", "*   ***** **  *", "*   *         *",
            "*   *   *  *  *", "*   *   *  *  *", "*          *  *", "*   ********  *", "*   *         *",
            "*             *", "*             *", "*             *", "*             *", "***************"

    };
    private Color colorObstacle = Color.BLACK;
    private Color aimColor = Color.yellow;

    @Override
    public void draw(Graphics g) {
        g.setColor(colorObstacle);
        int size = getSizeOneField();
        for (int y = 0; y < numFieldsVertical; y++) {
            for (int x = 0; x < numFieldsHorizontal; x++) {
                if (!isFree(x, y))
                    g.fillRect(x * size, y * size, size, size);
                if (x == aimPosition.x && y == aimPosition.y) {
                    g.setColor(aimColor);
                    g.fillRect(x * size, y * size, size, size);
                    g.setColor(colorObstacle);                   
                }
            }
        }
    }

    @Override
    public int getNumFieldsHorizontal() {
        return numFieldsHorizontal;
    }

    @Override
    public int getNumFieldsVertical() {
        return numFieldsVertical;
    }

    @Override
    public int getSizeOneField() {
        return 25;
    }

    @Override
    public int getWidth() {
        return getNumFieldsHorizontal() * getSizeOneField();
    }

    @Override
    public int getHeight() {
        return getNumFieldsVertical() * getSizeOneField();
    }

    @Override
    public boolean isFree(int x, int y) {       
        return obstacles[y].charAt(x) == ' ';
    }

    @Override
    public Point getAimPosition() {
        return aimPosition;
    }

    @Override
    public Point getStartPosition() {
        return startPosition;
    }

}

Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class Car implements ActionListener {
    private Point position = new Point(); // position in pixel
    private Color color = Color.BLUE; // car color
    private PlayField playField; // playing field for the car
    private Component parent = null; // parent for repaint graphics

    // @see actionPerformed
    private Timer animator = null; // timer for ActionListener
    private String moveStr = null; // string for movement
    private int moveId = 0; // character id for movement string

    public enum Direction {
        UP, RIGHT, LEFT, DOWN, NOMOVE
    };

    public Car(Component parent, PlayField playField) {
        this.playField = playField;
        this.parent = parent;
        setPosition(playField.getStartPosition());
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (moveStr == null || moveStr.length() == 0 || moveId > moveStr.length() - 1) {
            stopMovement();
            return;
        }
        move(charToDirection(moveStr.charAt(moveId)));
        moveId++;
        parent.repaint();
    }

    // converts character to direction
    public Direction charToDirection(char c) {
        switch (c) {
        case 'l':
            return Direction.LEFT;
        case 'u':
            return Direction.UP;
        case 'r':
            return Direction.RIGHT;
        case 'd':
            return Direction.DOWN;
        default:
        }
        return Direction.NOMOVE;
    }

    // draws car
    public void draw(Graphics g) {
        Color old = g.getColor();
        g.setColor(color);
        int size = playField.getSizeOneField();
        g.fillRect(position.x, position.y, size, size);
        g.setColor(old);
    }

    // get car's coordinates
    public Point getPosition() {
        int size = playField.getSizeOneField();
        return new Point(position.x / size, position.y / size);
    }

    // moves into given direction if possible
    public boolean move(Direction dir) {
        Point testPos = getPosition();
        switch (dir) {
        case UP:
            testPos.y -= 1;
            break;
        case DOWN:
            testPos.y += 1;
            break;
        case LEFT:
            testPos.x -= 1;
            break;
        case RIGHT:
            testPos.x += 1;
            break;
        case NOMOVE:
            return false;
        }
        // test for obstacle
        if (!playField.isFree(testPos.x, testPos.y))
            return false;
        setPosition(testPos);
        return true;
    }

    // put car to coordinates
    public void setPosition(Point position) {
        int size = playField.getSizeOneField();
        this.position = new Point(position.x * size, position.y * size);
    }

    public void startMovement(String text) {
        moveStr = text; // save moving string
        moveId = 0; // reset moving character id
        stopMovement(); // ensure animator has stopped before restart
        animator = new Timer(500, this); // call actionPerformed every 500 milliseconds
        animator.start(); // @see actionPerformed
    }

    // stops timer
    private void stopMovement() {
        if (animator != null)
            animator.stop();
        animator = null;
    }

}
Code:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class Game extends JPanel implements ActionListener {
    private Car car = null;
    private MyPlayField playField = new MyPlayField();
    private JTextField txt = new JTextField();
    private JButton go = new JButton("go");

    public Game() {
        txt.setPreferredSize(new Dimension(100, 20));
        go.setPreferredSize(new Dimension(50, 20));
        go.addActionListener(this); // if go is clicked call actionPerformed
        add(txt); // add TextField for moving text
        add(go); // add JButton for starting movement
        car = new Car(this, playField);
        setPreferredSize(new Dimension(playField.getWidth(), playField.getHeight()));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        car.startMovement(txt.getText()); // start car movement with entered text
        txt.setText(""); // clear entered text
        txt.requestFocusInWindow(); // set focus to text input
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); // draw added components and the other stuff
        playField.draw(g); // draw playing field
        car.draw(g); // draw car
    }
}
Code:
import javax.swing.JFrame;
import Game;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Car directions [l r u d]");
        frame.getContentPane().add(new Game());
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
:rolleyes:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
S Lineare listen verkettung Java Basics - Anfänger-Themen 7
Faromatik Verkettung von Klassen Java Basics - Anfänger-Themen 5
gamebreiti Problem mit Setter in Superklasse Verkettung der Kostruktoren??? Java Basics - Anfänger-Themen 7
S Unsortierte Listen - Frage zur "Verkettung" Java Basics - Anfänger-Themen 1
I Compiler-Fehler Problem bei Verkettung Java Basics - Anfänger-Themen 9
S Verkettung von Arrays Java Basics - Anfänger-Themen 10
C Problem bei der Verkettung von Aufrufen Java Basics - Anfänger-Themen 14
M Verkettung von Methoden? Java Basics - Anfänger-Themen 3
S Sind unten stehende Anweisungen kompilierbar? Java Basics - Anfänger-Themen 7
M Java Anweisungen Java Basics - Anfänger-Themen 4
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
D Können if Anweisungen aufeinander aufbauen? Java Basics - Anfänger-Themen 1
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
P Java Verketten von Stream - Bedeutung der Anweisungen? Java Basics - Anfänger-Themen 3
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
R else if anweisungen Java Basics - Anfänger-Themen 2
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
L Frage zu If-Anweisungen Java Basics - Anfänger-Themen 3
OnDemand Package Anweisungen Java Basics - Anfänger-Themen 3
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
B Anzahl if anweisungen nicht bekannt Java Basics - Anfänger-Themen 3
V Methoden Schleifeninvariante Assert Anweisungen Java Basics - Anfänger-Themen 6
P if Anweisungen komprimieren Java Basics - Anfänger-Themen 6
G JTextField() Anzeige - if-Anweisungen Java Basics - Anfänger-Themen 2
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
C OOP if Anweisungen Java Basics - Anfänger-Themen 24
E If - Anweisungen Java Basics - Anfänger-Themen 4
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
S Umsetzung von verschiedenen Anweisungen Java Basics - Anfänger-Themen 8
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
T Werden import Anweisungen nicht vererbt? Java Basics - Anfänger-Themen 3
M if-Anweisungen Java Basics - Anfänger-Themen 11
F Kann ein Problem bei Anweisungen nicht lösen Java Basics - Anfänger-Themen 4
J Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 13
B variable deklaration und wert speichern in 2 anweisungen? Java Basics - Anfänger-Themen 20
T Import-Anweisungen Java Basics - Anfänger-Themen 10
D Anweisungen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben