Hüpfball

Status
Nicht offen für weitere Antworten.

javaloser

Mitglied
Hallo,

ich brauche ein Javaprogramm, in dem ein Ball oben anfängt dann runterfällt auf einen Balken und dann austitscht. Das heißt er geht immer wieder runter und rauf und wird dann nach und nach langsamer. Bis er dann irgendwann auf dem Balken zum Stillstand kommt.

Vielen Dank im Vorraus
Lisa
 

Spin

Top Contributor
3D,2D ?

Und Applet , Frame ?
Swing, awt?

Also schick mal code, und wir können zusammen drüber schauen.

Würde dem Ball position geben , dann ne bewegung nach unten , und wieder hoch ;)
Bischen Formatieren des Balls, und repainten ()^^
 

hdi

Top Contributor
Ich hab mal was gemacht. Jeder ist selber Schuld wenn er einfach Code kopiert, dann lernt man's halt nie. Aber als Stubs in die richtige Richtung ist folgender Code vllt lesenswert. Natürlich ist hier von einer realistischen Physik weit und breit keine Spur ;) Aber es zeigt zumindest einen Ball der automatisch gesteuert wird.

edit: Und selbst das geht sicherlich viel geschickter als ich es mache. Sobald Mathe in einem Problem vorkommt neige ich dazu es umständlich zu lösen.. bin da nicht so gut. Leute wie javimka steuern das wahrscheinlich in einer Zeile :D

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BallDemo extends JFrame {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				new BallDemo().setVisible(true);
			}
		});
	}

	private Game game;
	private MyPanel panel;

	public BallDemo() {
		super("BallDemo");
		setResizable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		JButton start = new JButton("Drop a ball!");
		start.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (game != null) {
					game.end();
				}
				game = new Game();
				game.start();
			}
		});
		panel = new MyPanel(500, 500);
		setLayout(new BorderLayout());
		add(start, BorderLayout.NORTH);
		add(panel);
		pack();
		setLocationRelativeTo(null);
	}

	class MyPanel extends JPanel {

		int w, h;

		public MyPanel(int w, int h) {
			this.w = w;
			this.h = h;
			setPreferredSize(new Dimension(w, h));
		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (game != null) {
				g.setColor(Color.RED);
				g.fillOval(game.x, game.y, game.size, game.size);
			}
		}
	}

	class Game extends Thread {

		boolean alive;
		int size = 25;
		int x = panel.w / 2 - size / 2;
		int y = 0;
		int factor = 5;
		int dir = 1;

		@Override
		public void run() {
			alive = true;
			while (alive) {
				panel.repaint();
				y += dir * factor;
				if (dir == 1 && y >= panel.h - size) {
					dir *= -1;
					factor--;
				} else if (dir == -1 && y <= panel.h - (factor * 50)) {
					dir *= -1;
					factor--;
				}
				if (factor == 0) {
					end();
				}
				try {
					sleep(10);
				} catch (InterruptedException e) {
				}
			}
		}

		void end() {
			alive = false;
		}
	}
}
 
Zuletzt bearbeitet:

javimka

Top Contributor
Vielen Dank für die Blumen :D
Du hast das ja so schön gelöst, da wäre jede Kürzung schade :)
Javaloser (Lisa :lol:) hätte sicher nicht auf solch eine Hilfe hoffen dürfen.
 

javaloser

Mitglied
Hi,

ich finde, dass das echt unfair ist was ihr hier schriebt. Das ist ein Forum bei dem man seine Fragen posten kann und dann kommen solche Antworten. Wir haben uns jetzt mal hingesetz und haben schonmal einen Ansatz :

public class Ball
{
private Rechteck Boden;
private Kreis ball;


public Ball()
{
Boden = new Rechteck(50,243,92,20,"rot");
Boden.sichtbarMachen();


ball = new Kreis();

ball.sichtbarMachen();
ball.horizontalBewegen(60);
}


public void test()
{
int i = 92;
int g = 1;
int h = 10;
while(i <= 244){
ball.vertikalBewegen(g);
i = i + g;
g = g + 1;
ball.vertikalBewegen(h);
h = h - 1;


}

}
}


Hoffe das hilft euch jetzt was weiter :)
 

hdi

Top Contributor
Was sollen wir damit? Du hast nicht gesagt was du jetzt erwartest. Funtkioniert der Code denn nicht? Es gibt einen Unterschied zwischen helfen und Musterlösungen posten. Ich hab euch sogar eine Art Musterlösung gegeben, alles was ihr daran ändern müsst ist der Bereich in dem die Ballgeschwindigkeit und -richtung angepasst wird, damit es realistischer aussieht.
Aber das hat nicht mal was mit Java zu tun, sondern mit Mathe oder Physik. Also was erwartest du von uns? Nimm meinen Code und überarbeite ihn nach deinen Wünschen. Solltest du etwas in meinem Code nicht verstehen, kannst du gerne nachfragen. Es ist ja gut wenn du es selber schreiben willst, aber keiner kann etwas mit einem Code-Fetzen anfangen ohne eine konkrete Frage dazu.

Hoffe das hilft euch jetzt was weiter
Wir brauchen keine Hilfe, womit sollte uns das weiterhelfen?
 

javaloser

Mitglied
Ähm, das ist ein Programm, das in BlueJ geschrieben wurde. Unser Problem ist jetzt das der Ball zwar noch unten bis auf den Balken geht aber nicht wieder nach oben usw. Welche Schleife müsste ich einbauen und wie kann ich die Geschwindigkeit ändern ?
 

faetzminator

Gesperrter Benutzer
So was:
Java:
while (geschwindigkeit > 0) {
    geschwindigkeit -= 5;
    // dein Code
}
 

javimka

Top Contributor
Wie du die Richtung des Balls umkehren kannst, steht eigentlich schon alles in hdis Code. Zeilen 85-91.
 

javaloser

Mitglied
Hier der fertige Quelltext :

public class Ball

{

private Rechteck Boden;
private Kreis ball;


public Ball()

{
Boden = new Rechteck(50,243,92,20,"rot"); // ein Rechteck wird erstellt, hier wird es als Boden bezeichnet
Boden.sichtbarMachen();

ball = new Kreis(); // ein Kreis wird erstellt, hier wird er als Ball bezeichnet

ball.sichtbarMachen();
ball.horizontalBewegen(60);
}


public void test()

{
int i = 153; // i = Höhe ist am Anfang = 153
int g = 0; // g = Geschwindigkeit ist am Anfang = 0


while ( i > 5)

{

while (i - g > 0)

{
ball.vertikalBewegen(g);
i = i - g;
g = g + 1;
}
ball.vertikalBewegen(i);
i = 0;
g = -g;

// fallen ende

while (g <= 0)

{
ball.vertikalBewegen(g);
i = i - g;
g = g + 2;

}

g = 0; // Geschwindigkeit soll zum Ende hin 0 entsprechen
}
ball.vertikalBewegen(i); // Ball geht noch einmal hinunter
}
}

Hab es mit einer Freundin zusammen erarbeitet !
 

Leroy42

Top Contributor
Ich bräuchte auch ein Programm, das mir die Sterne vom Himmel holt. Vielen Dank im vorraus ^^

Na, das ist doch immerhin etwas! :D

Ich grübel' mal in der ersten TV-Werbeunterbrechung heute abend nach.
Versprechen kann ich aber nichts :noe:.

Im Übrigen: Sollten die Sterne auch gleichzeitig verkleinert werden damit sie in dein Wohnzimmer passen?

( Nicht daß dabei noch nebenbei schwarze Löcher entstehen... ???:L )
 

Painii

Bekanntes Mitglied
Die Sterne sind garnichtmehr da oben die hab ich alle abgehangen und meinem Schatz geschenkt... das habt ihr bis jetzt nur noch nicht gesehen weil das Licht so langsam ist.
 
Status
Nicht offen für weitere Antworten.

Oben