"Eingrenzen von Aktionsraum"

Status
Nicht offen für weitere Antworten.
Z

-Zoe-

Gast
Hallöchen allerseits!

Ich habe da eine, für die meisten wohl ganz einfach zu beantwortenden, Fragen: Ich habe ein Übungsprogramm für die Schule erstellt, habe allerdings ein kleines Problem. Also das Programm besteht aus einem Ball, der einfach zwischen den Linien langgeführt werden soll. Wenn er auf eine Linie kommt oder an einen der Außenränder, sollte sich das Programm am besten wieder schließen oder irgendeine andere Reaktion von sich geben. Welche, ist letztendlich egal. Für mich und meinen Wissenstand wäre es wohl angebracht, wenn man sich auf die einfachste Lösung vorläufig einigen könnte. Leider hatten wir noch nicht besonders viele Methoden und Funktionen etc., sodass ich auch keinerlei Anhaltspunkte dazu ausprobieren könnte.

Zu erwähnen ist noch, dass wir die Zeichenfunktion so umständlich machen sollen. Ich weiß, es geht auch kürzer... doch das ist momentan ja auch nicht so wichtig.


Das Programm:

Code:
import java.applet.Applet; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Button; 
import java.awt.Rectangle; 
import java.awt.Font; 


public class Ballspiel extends Applet { 
        
        
        public int posx = 8, posy = 8, dm = 30, 
                           posx1 = 10, posy1 = 10, vor = 10; 
        
        
        Color Farbe1 = new Color(255, 0, 230); 

        
        private Button button_r = null; 
        private Button button_u = null; 
        private Button button_l = null; 
        private Button button_o = null; 
        
        
        public void init() { 
        this.setLayout(null); 
        this.setSize(new Dimension(759, 370)); 
        this.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); 
        this.setForeground(Color.cyan); 
        this.setMinimumSize(new Dimension(780, 370)); 
        this.setBackground(new Color(0, 255, 121)); 
        this.add(getButton_r(), null); 
        this.add(getButton_u(), null); 
        this.add(getButton_l(), null); 
        this.add(getButton_o(), null); 
        } 
        
        public void paint (Graphics g) { 
                
                g.setColor(Farbe1); 
                g.fillOval(posx, posy-3, dm, dm); 
                
                g.setColor(Color.black); 
                g.drawLine(posx1-10, posy1+30, posx1+550, posy1+30);         //Linie 1 
                g.drawLine(posx1-10, posy1+31, posx1+550, posy1+31);         //Linie 1 
                
                g.drawLine(posx1+600, posy1+70, posx1+40, posy1+70);        //Linie 2 
                g.drawLine(posx1+600, posy1+71, posx1+40, posy1+71);        //Linie 2 
                
                g.drawLine(posx1-10, posy1+110, posx1+550, posy1+110);         //Linie 3 
                g.drawLine(posx1-10, posy1+111, posx1+550, posy1+111);         //Linie 3 
                
                g.drawLine(posx1+600, posy1+150, posx1+40, posy1+150);        //Linie 4 
                g.drawLine(posx1+600, posy1+151, posx1+40, posy1+151);        //Linie 4 
                
                g.drawLine(posx1-10, posy1+190, posx1+550, posy1+190);         //Linie 5 
                g.drawLine(posx1-10, posy1+191, posx1+550, posy1+191);         //Linie 5 
                
                g.drawLine(posx1+600, posy1+230, posx1+40, posy1+230);        //Linie 6 
                g.drawLine(posx1+600, posy1+231, posx1+40, posy1+231);        //Linie 6 
                
                g.drawLine(posx1-10, posy1+270, posx1+550, posy1+270);         //Linie 7 
                g.drawLine(posx1-10, posy1+271, posx1+550, posy1+271);         //Linie 7 
                
                g.drawLine(posx1+600, posy1+310, posx1+40, posy1+310);        //Linie 8 
                g.drawLine(posx1+600, posy1+311, posx1+40, posy1+311);        //Linie 8 
                
                g.drawLine(posx1-10, posy1+350, posx1+550, posy1+350);         //Linie 9 
                g.drawLine(posx1-10, posy1+351, posx1+550, posy1+351);         //Linie 9 
                
                g.setColor(Color.black); 
                g.drawLine(posx1-10, posy1-10, posx1-10, posy1+390);          //Grenze links 
                g.drawLine(posx1+601, posy1-10, posx1+601, posy1+390);          //Grenze rechts 
                g.drawLine(posx1-10, posy1+390, posx1+601, posy1+390);          //Grenze unten 
                g.drawLine(posx1-10, posy1-10, posx1+601, posy1-10);          //Grenze oben 
                
        } 

        
        private Button getButton_r() { 
                if (button_r == null) { 
                        button_r = new Button(); 
                        button_r.setLabel("rechts"); 
                        button_r.setForeground(Color.white); 
                        button_r.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); 
                        button_r.setBounds(new Rectangle(655, 150, 85, 30)); 
                        button_r.setBackground(new Color(255, 51, 51)); 
                        button_r.addActionListener(new java.awt.event.ActionListener() { 
                                public void actionPerformed(java.awt.event.ActionEvent e) { 
                                
                                        System.out.println("rechts"); 
                                        posx = posx + vor; 
                                                                                
                                Ballspiel.this.repaint(); 
                                } 
                        }); 
                } 
                return button_r; 
        } 

        
        private Button getButton_u() { 
                if (button_u == null) { 
                        button_u = new Button(); 
                        button_u.setLabel("unten"); 
                        button_u.setForeground(Color.white); 
                        button_u.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); 
                        button_u.setBounds(new Rectangle(655, 244, 85, 30)); 
                        button_u.setBackground(new Color(255, 51, 51)); 
                        button_u.addActionListener(new java.awt.event.ActionListener() { 
                                public void actionPerformed(java.awt.event.ActionEvent e) { 
                                
                                        System.out.println("unten"); 
                                        posy = posy + vor; 
                                                                                
                                Ballspiel.this.repaint(); 
                                } 
                        }); 
                } 
                return button_u; 
        } 


        private Button getButton_l() { 
                if (button_l == null) { 
                        button_l = new Button(); 
                        button_l.setLabel("links"); 
                        button_l.setForeground(Color.white); 
                        button_l.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); 
                        button_l.setBounds(new Rectangle(655, 197, 85, 30)); 
                        button_l.setBackground(new Color(255, 51, 51)); 
                        button_l.addActionListener(new java.awt.event.ActionListener() { 
                                public void actionPerformed(java.awt.event.ActionEvent e) { 
                                        System.out.println("links"); 
                                        
                                        posx = posx - vor; 
                                                                                
                                Ballspiel.this.repaint(); 
                                } 
                        }); 
                } 
                return button_l; 
        } 

        
        private Button getButton_o() { 
                if (button_o == null) { 
                        button_o = new Button(); 
                        button_o.setLabel("oben"); 
                        button_o.setForeground(Color.white); 
                        button_o.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); 
                        button_o.setBounds(new Rectangle(655, 103, 85, 30)); 
                        button_o.setBackground(new Color(255, 51, 51)); 
                        button_o.addActionListener(new java.awt.event.ActionListener() { 
                                public void actionPerformed(java.awt.event.ActionEvent e) { 
                                        System.out.println("oben"); 
                                        
                                        posy = posy - vor; 
                                        
                                Ballspiel.this.repaint(); 
                                }        
                        }); 
                } 
                return button_o; 
        } 

        
        

}

*Edit by Wildcard - Code-Tags repariert*
 

Verjigorm

Top Contributor
das ist mehr Mathe als Programmieren :)

für die "Aussenwände" des Applets:

Kollisionen:
linke wand: (mittelpunkt_x-r) <= 0 dann tue etwas bestimmtes
rechte wand: (mittelpunkt_x+r) >= 759 ...

für Oben und Unten genauso

und für die Linien schauste dir am besten mal Schneiden von Kreis und Gerade an :)


edit:
hier mal als beispiel für die linke Wand:
Code:
if ((posx-(dm/2)) <= 0)
{  
	System.out.println("Es geht nicht weiter links!");
}
else
	posx = posx - vor;
 
Z

-Zoe-

Gast
Okay... ähm... ich glaube ich habe es soweit verstanden. Schon mal vielen, vielen Dank für die Mühe! Allerdings habe ich noch nicht wirklich herausgefunden, wie es für die anderen Seiten geht... ??? :oops:
Weiß nicht, bin momentan wohl nicht gerade so auf Zack. Könntest du noch eiiiin Beispiel geben, bitte, bitte? Von mir aus auch oben oder unten. Das wäre ganz nützlich... :)
 
Z

-Zoe-

Gast
Hey... ich weiß, ist schon eine Weile her... leider habe ich immer noch nicht herausgefunden, wie das nun gemeint ist. Der Code wird zwar akzeptiert, allerdings bringt er nicht für rechts, oben und unten... wer könnte mir noch mal erklären, was ich wie eingeben muss?
 
Z

-Zoe-

Gast
Hier führt man immer Selbstgespräche... also noch mal von vorne. Ich habe ein Labyrinth, wo ein Ball per Button (links, rechts, oben, unten) durchgeführt werden soll. Dabei soll er die gezeichneten Linien nicht überschreiten.

Dies ist mein rechter Button nach dem Beispiel von Verjigorm:

Code:
private Button getButton_r() {
		if (button_r == null) {
			button_r = new Button();
			button_r.setLabel("rechts");
			button_r.setForeground(Color.white);
			button_r.setFont(new Font("Comic Sans MS", Font.BOLD, 14));
			button_r.setBounds(new Rectangle(655, 150, 85, 30));
			button_r.setBackground(new Color(255, 51, 51));
			button_r.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					 
					if ((posx+(dm/2)) >= 582) 
					{  
					   System.out.println("Es geht nicht weiter nach rechts!"); 
					} 
					
					else
					{	
					   posx = posx + vor; 

					System.out.println("rechts");
					}					
				Ballspiel.this.repaint();
				}
			});
		}
		return button_r;
	}


Und für unten machte ich diesen Versuch:

Code:
private Button getButton_u() {
		if (button_u == null) {
			button_u = new Button();
			button_u.setLabel("unten");
			button_u.setForeground(Color.white);
			button_u.setFont(new Font("Comic Sans MS", Font.BOLD, 14));
			button_u.setBounds(new Rectangle(655, 244, 85, 30));
			button_u.setBackground(new Color(255, 51, 51));
			button_u.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
				
					if ((posy+(dm/2)) >= 380) 
					{  
					   System.out.println("Es geht nicht weiter nach unten!"); 
					} 
					
					else if ((posy+(dm/2)) == 35)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					
					else if ((posy+(dm/2)) == 80)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 120)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 160)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 200)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 240)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 280)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 320)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else if ((posy+(dm/2)) == 360)
					{
						System.out.println("Es geht nicht weiter nach unten!");
					}
					
					else
					{
						System.out.println("unten");
						posy = posy + vor;
					}
					
					
				Ballspiel.this.repaint();
				}
			});
		}
		return button_u;
	}

Dabei meine ich in der if-Bedingung, dass der Ball einfach nicht die Außengrenze überschreiten soll. Funktioniert auch. Bei dem else if versuchte ich die restlichen, mittleren Linien zu integrieren. Nur wird das was ich geschrieben habe nicht angenommen. Was muss ich ändern?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben