ich versuche grad ein kleines spiel zu programmieren, aber es tritt irgendwo ein fehler auf den ich nicht verstehe. hier mein quellcode, das spiel ist aber noch nicht fertig,
da sind noch einige sachen zu korigieren und hinzuzufügen. es geht mir
lediglich um die zeilen 67-82.
wenn ich das spiel starte dann ist mein katapult plötzlich weg und das versteh ich nicht, denn wenn ich die paint methode (zeile 67 -82) durch die paint methode ersetze die im zweiten hier eingefügten javaquellcode ist, sowie die zeile 131 dem neuen methodenkopf anpasse, dann ist das katapult da wo es sein sollte, woran liegt das?
da sind noch einige sachen zu korigieren und hinzuzufügen. es geht mir
lediglich um die zeilen 67-82.
wenn ich das spiel starte dann ist mein katapult plötzlich weg und das versteh ich nicht, denn wenn ich die paint methode (zeile 67 -82) durch die paint methode ersetze die im zweiten hier eingefügten javaquellcode ist, sowie die zeile 131 dem neuen methodenkopf anpasse, dann ist das katapult da wo es sein sollte, woran liegt das?
Java:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
class MyFrame extends JFrame
{
VersuchePanel versuchsPanel = new VersuchePanel();
KatapultCanvas katapultArea = new KatapultCanvas();
MyFrame()
{
super("Ballistischer Wurf"); //Fenstername
setSize(1000, 600); //Fenstergröße
setResizable(false); //Größenänderung des Fensters nicht möglich
getContentPane().setLayout(new BorderLayout()); //Layout wird gesetzt
getContentPane().add(versuchsPanel, BorderLayout.NORTH); //Fügt das VersuchePanel in den ContentPane im oberen Bereich ein
getContentPane().add(katapultArea, BorderLayout.CENTER);
getContentPane().add(new SteuerPanel(versuchsPanel, katapultArea), BorderLayout.SOUTH);
setVisible(true); //Fenster soll angezeigt werden
setDefaultCloseOperation(EXIT_ON_CLOSE); //Fenster soll geschlossen und Programm beender werden beim drücken des Kreuzes
}
}
class VersuchePanel extends JPanel
{
int versucheAnzahl = 5;
JLabel kraft = new JLabel("Versuche: " + versucheAnzahl);
VersuchePanel()
{
add(kraft);
}
public void set(int versucheAnzahl)
{
this.versucheAnzahl = versucheAnzahl;
repaint();
}
public int get()
{
return versucheAnzahl;
}
}
class KatapultCanvas extends Canvas
{
KatapultCanvas()
{
super();
setBackground(Color.black);
}
public void paint(Graphics g, int x, int eingegebeneKraft, int eingegebenerWinkel)
{
int posX = 50;
int posY = getSize().height/2;
Image img = getToolkit().getImage("katapult.gif");
g.drawImage(img,posX, posY, this);
x = 0;
int y = (int)((-10*(Math.pow(x, 2)/100))/(2*Math.pow(eingegebeneKraft, 2)*Math.pow(Math.cos(eingegebenerWinkel * Math.PI/180), 2))+Math.tan(eingegebenerWinkel * Math.PI/180)*x);
g.setColor(Color.LIGHT_GRAY);
g.fillOval(posX+40+x, getHeight()-(posY-14+y), 20, 20);
g.setColor(Color.WHITE);
g.fillOval(900, new Random().nextInt(480), 30, 30);
}
}
class SteuerPanel extends JPanel implements ActionListener, Runnable
{
JButton start = new JButton("Start");
JTextField kraftEingabe = new JTextField("50");
JLabel kraft = new JLabel("Kraft:");
JTextField winkelEingabe = new JTextField("45");
JLabel winkel = new JLabel("Winkel:");
int eingegebeneKraft = 50;
int eingegebenerWinkel = 45;
VersuchePanel versuchsPanel;
KatapultCanvas katapultArea;
SteuerPanel(VersuchePanel versuchsPanel, KatapultCanvas katapultArea)
{
this.versuchsPanel = versuchsPanel;
this.katapultArea = katapultArea;
setLayout(new GridLayout(1, 5));
add(kraft);
add(kraftEingabe);
add(winkel);
add(winkelEingabe);
add(start);
kraftEingabe.addActionListener(this);
kraftEingabe.setActionCommand("Newton");
kraftEingabe.selectAll();
winkelEingabe.addActionListener(this);
winkelEingabe.setActionCommand("Grad");
winkelEingabe.selectAll();
start.addActionListener(this);
start.setActionCommand("StartButton");
}
public void run()
{
for(int x = 1; x <= 825; x++)
{
try
{
Thread.sleep(50);
}
catch(InterruptedException ie) {}
katapultArea.paint(getGraphics(), x, eingegebeneKraft, eingegebenerWinkel);
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("StartButton"))
{
start.setEnabled(false);
kraftEingabe.setEditable(false);
winkelEingabe.setEditable(false);
versuchsPanel.set(versuchsPanel.get() - 1);
new Thread(this).start();
}
else
{
String benutzerEingabe = ((JTextField)e.getSource()).getText();
boolean fehler = false;
do
{
try
{
if(e.getActionCommand().equals("Newton"))
eingegebeneKraft = Integer.parseInt(benutzerEingabe);
else if(e.getActionCommand().equals("Grad"))
eingegebenerWinkel = Integer.parseInt(benutzerEingabe);
fehler = false;
}
catch(NumberFormatException n)
{
fehler = true;
}
if(fehler)
{
benutzerEingabe = ((JTextField)e.getSource()).getText();
}
}
while(fehler);
}
}
}
public class MainBallistischerWurf
{
public static void main(String[] args)
{
new MyFrame();
}
}
Java:
public void paint(Graphics g)
{
int posX = 50;
int posY = getSize().height/2;
Image img = getToolkit().getImage("katapult.gif");
g.drawImage(img,posX, posY, this);
int eingegebeneKraft = 50;
int eingegebenerWinkel = 45;
int x = 0;
int y = (int)((-10*(Math.pow(x, 2)/100))/(2*Math.pow(eingegebeneKraft, 2)*Math.pow(Math.cos(eingegebenerWinkel * Math.PI/180), 2))+Math.tan(eingegebenerWinkel * Math.PI/180)*x);
g.setColor(Color.LIGHT_GRAY);
g.fillOval(posX+40+x, getHeight()-(posY-14+y), 20, 20);
g.setColor(Color.WHITE);
g.fillOval(900, new Random().nextInt(480), 30, 30);
}