Willkommen
myGully
Links
Forum
06.12.11, 11:26
#1
Newbie
Registriert seit: Dec 2009
Beiträge: 73
Bedankt: 16
BlueJ Problem - Roboter Objekt verkleiner/vergrößern ?
Hallo Leute,
Wir arbeiten in der Schule mit dem Programm BlueJ und müssen nun ein Roboter-Applet
erstellen, um den Roboter mit Buttons zu steuern.
Er soll Vor, Zurück, linksdrehen und rechtsdrehen können.
Mein Problem liegt jetzt darin, den Roboter kleiner bzw. größer werden zu lassen, wenn er sich nach hinten bzw. nach vorne bewegt.
Da er aus vielen verschiedenen Rechtecken besteht, müsste ich jedes einzelne Rechteck
bei jedem Methodenaufruf vergrößern und verschieben lassen.
Ist es irgendwie möglich den gesamten Roboter kleiner werden zu lassen?
Hier der Quelltext:
Klasse Robot:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Robot
{
int blickrichtung;
int xkoordinate, ykoordinate;
public Robot()
{
blickrichtung = 1; //1=rechts 2=hinten 3=links 4=vorne
xkoordinate = 100;
ykoordinate = 100;
}
public void linksdrehen()
{
blickrichtung = blickrichtung + 1;
if (blickrichtung > 4)
blickrichtung = 1;
}
public void rechtsdrehen()
{
blickrichtung = blickrichtung - 1;
if (blickrichtung < 1)
blickrichtung = 4;
}
public void vor()
{
if (blickrichtung == 1)
xkoordinate = xkoordinate +30;
else
if (blickrichtung == 2)
ykoordinate = ykoordinate -30;
else
if (blickrichtung == 3)
xkoordinate = xkoordinate -30;
else
if (blickrichtung == 4)
ykoordinate = ykoordinate +30;
else
if (blickrichtung > 4)
blickrichtung = 1;
}
public void zurueck()
{
if (blickrichtung == 1)
xkoordinate = xkoordinate -30;
else
if (blickrichtung == 2)
ykoordinate = ykoordinate +30;
else
if (blickrichtung == 3)
xkoordinate = xkoordinate +30;
else
if (blickrichtung == 4)
ykoordinate = ykoordinate -30;
else
if (blickrichtung > 4)
blickrichtung = 1;
}
public void anzeigen(Graphics g)
{ if ((blickrichtung == 2) || (blickrichtung == 4))
{
g.setColor(Color.gray);
g.fillRect(xkoordinate,ykoordinate,40,40); //Kopf
g.fillRect(xkoordinate-40,ykoordinate+45,20,40); //Hand
g.fillRect(xkoordinate+60,ykoordinate+45,20,40); //Hand
g.fillRect(xkoordinate-20,ykoordinate+120,80,40);
g.setColor(Color.black);
g.drawRect(xkoordinate,ykoordinate,40,40);
g.drawRect(xkoordinate-40,ykoordinate+45,20,40);
g.drawRect(xkoordinate+60,ykoordinate+45,20,40);
g.drawRect(xkoordinate-20,ykoordinate+120,40,40);
g.drawRect(xkoordinate+20,ykoordinate+120,40,40);
g.drawRect(xkoordinate-20,ykoordinate+40,80,80);
g.fillRect(xkoordinate-20,ykoordinate+40,80,80);
if (blickrichtung == 4)
{
g.fillOval(xkoordinate+10,ykoordinate+10,4,4);
g.fillOval(xkoordinate+30,ykoordinate+10,4,4);
}
}
if ((blickrichtung == 1) || (blickrichtung == 3))
{
g.setColor(Color.black);
g.fillRect(xkoordinate-4,ykoordinate+40,28,80);
g.drawRect(xkoordinate-4,ykoordinate+40,28,80);
g.drawRect(xkoordinate,ykoordinate,20,40);
g.drawRect(xkoordinate,ykoordinate+45,20,40);
g.drawRect(xkoordinate,ykoordinate,20,40);
g.drawRect(xkoordinate,ykoordinate+120,20,40);
g.setColor(Color.gray);
g.fillRect(xkoordinate,ykoordinate,20,40);
g.fillRect(xkoordinate,ykoordinate+45,20,40);
g.fillRect(xkoordinate,ykoordinate,20,40);
g.fillRect(xkoordinate,ykoordinate+120,20,40);
}
}
}
Applet Roboter:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Roboter extends JApplet
implements ActionListener
{ private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private Robot robo;
public void init()
{
robo = new Robot();
btn1 = new Button ("Vor");
Container contentPane = getContentPane();
contentPane.setLayout(null);
contentPane.add(btn1);
btn1.setBounds(180,230,150,30);
btn1.addActionListener(this);
btn2 = new Button ("Links um");
contentPane.add(btn2);
btn2.setBounds(180,280,150,30);
btn2.addActionListener(this);
btn3 = new Button ("Rechts um");
contentPane.add(btn3);
btn3.setBounds(180,330,150,30);
btn3.addActionListener(this);
btn4 = new Button ("Zurück");
contentPane.add(btn4);
btn4.setBounds(180,380,150,30);
btn4.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == btn1)
{
robo.vor();
paint(getGraphics());
}
else
if(evt.getSource() == btn2)
{
robo.linksdrehen();
paint(getGraphics());
}
else
if(evt.getSource() == btn3)
{
robo.rechtsdrehen();
paint(getGraphics());
}
else
if(evt.getSource() == btn4)
{
robo.zurueck();
paint(getGraphics());
}
}
public void paint(Graphics g)
{
g.setColor(Color.white);
g.fillRect(0,0,2000,2000);
robo.anzeigen(g);
}
}
06.12.11, 14:08
#2
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
Habe das selbe Programm auch mal geschrieben, wir haben es damals mit einer "Entfernungsvariable" gemacht, relativ aufwendig, aber das Programm ist insgesamt nicht so zeitsparend.
Man muss mit der Entfernungsvariable dann jeden Wert der Rechtecke multiplizieren.
07.12.11, 22:50
#3
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
^Stimmt, steht im S***** (zumindest dem das ich kenne und das genau das selbe aufgibt wie hier) aber so wie er es programmiert hat.
Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus .
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
().