Programmvorschläge für Schulprojekt

Disorder257

Mitglied
Hallo liebe Java-Gemeinde,

ich bin zurzeit auf der Suche nach einem Programm das ich für die Abschlussprüfung des Fachabiturs schreiben kann. Da ich derzeitig noch absolut unentschlossen bin, welche Art von Programm es werden soll, bitte ich euch eure Ideen zu schreiben was ich realisieren könnte.

Ich den vorherigen Jahren gab es eine große Zahl von kleinen Spielen wie zum Beispiel 4 Gewinnt, einen einarmigen Banditen, Black Jack oder auch Programme zum Berechnen von Funktionen 4ten Grades inklusive zeichnen.

Als Entwicklungswerkzeug würde ich JOE oder den Java Editor benutzen wollen.

Wie sieht es aus, habt Ihr eventuell eine Idee die im Rahmen meiner Fähigkeiten liegen könnte?(Ich programmiere seit etwa 2 Jahren in der Schule.)

Mit freundlichen Grüßen

Disorder257
 
G

Gast2

Gast
Spiele sind doch immer sehr beliebt.

Warum nicht z.B. ein Roboter durch einen Weg durch ein Labyrinth suchen lassen? Da kannst du auch gleich dich mit sowas wie verschiedenen Suchstrategien beschäftigen und visualisieren wie sich die Wegfindung ändert wenn du statt einem A* Algorithmus einen anderen wählst.

Wenn du vorhast Informatik oder so zu studieren wirst du dich freuen damit schon Bekanntschaft gemacht zu haben.

Aber als gut gemeinter Tip:
Ich würde dir als IDE sehr Eclipse oder Netbeans ans Herz legen. Das macht dir das Leben wirklich einfacher....
 

Disorder257

Mitglied
Hi,

der Vorschlag ist gar nicht schlecht.
Hilf mir vllt. ein wenig auf die Sprünge was ist ein A* Algorithmus?
Ich hab schon einmal versucht mich mit Eclipse auseinander zu setzen, was aber nicht unbedingt von Erfolg gekrönt war. Ich bin es gewohnt in der Schule alles zu Fuß zu programmieren.
 
G

Gast2

Gast
A* ist ein sehr bekannter Such-Algorithmus. Er bestimmt in einen Graphen den kürzesten Weg von einem Konten zu einem beliebigen anderen. Wird oft benutzt um halt Wegfindungsprobleme zu lösen und immer sehr beliebt in den ersten Semestern Informatik...

A*-Algorithmus ? Wikipedia

Eclipse ist sehr intuitiv zu bedienen und wenn du nicht klar kommst frag einfach hier nach, da wird dir mit Sicherheit geholfen. Aber größere Projecte zu Fuß in JOE oder in dem murkeligen Java Editor zu programmieren ist mutig. Da musst du schon eine gewisse Leidensbereitschaft haben. ;)
 

Disorder257

Mitglied
Okay, ich habe mir das mal angeschaut.
Der Algorithmus sucht mir also die kürzeste Strecke zum einem unbekannten Ziel.
Wege die nicht Funktionieren werden auf eine Liste geschrieben und somit für den weiteren Verlauf ausgeschlossen.

Also muss ich nur einen Startpunkt definieren?

Ich werde mich Zuhause noch einmal mit Eclipse usw. beschäftigen um mir nicht unnötig das Leben schwer zu machen.
 
Zuletzt bearbeitet:

Disorder257

Mitglied
Ich hatte mir das so vorgestellt:

Als erstes wollte ich eine Zeichenfläche erstellen und auf dieser Zeichenfläche mit drawString quasi das Labyrinth erstellen, wobei ich mit den String keine Strecken im eigentlichen Sinn erstelle sonder nur Punkte die hintereinander gehängt sind und somit einen Strich ergeben.
Damit habe ich dann ja die Punkte auf meinem Koordinatenkreuz die nicht durchdrungen werden können, oder sehe ich das falsch?

Und dann könne ich ja den Algorithmus benutzen.

Soweit die Theorie.

Jetzt konfrontiere mich mit den harten Fakten:D:D
 

muckelzwerg

Bekanntes Mitglied
Du kannst Dir mal überlegen, ob Du das Suchproblem ganz allgemein programmierst und den A* dann als einen von verschiedenen Suchalgorithmen verwendest.
Wenn Du bei Schnittstellen und Softwaretechnik ein bisschen aufpasst, kannst Du ziemlich flott ein Programm schreiben, dass die gleiche Suchaufgabe mit verschiedenen (auswählbaren) Suchverfahren löst. Im wesentlichen unterscheiden die sich alle nur in der Auswahl des nächsten zu versuchenden Knotens/Schrittes. Tiefensuche nimmt immer den "nächsten ersten", Breitensuche immer alle nächsten, dann alle übernächsten ..., Greedy wählt immer den direkt besten und der gute A* dann endlich den geschätzt Besten.

Die nächste Abstraktion, wäre das Aswechseln von Heuristiken, also den Schätzfunktionen. Die hängen dann schon etwas konkreter an der jeweilgen Aufgabe dran.

Noch eine Abstraktion mehr und Du kannst sogar das konkrete Problem abtrennen. Dann hättest Du ein Programm, das verschiedene Suchverfahren auf z.B. Pfadsuche, X-Damen Problem, 8-Puzzle, Sudoku, ... anwendet.
 
Zuletzt bearbeitet:
D

Dow Jones

Gast
Hallo Disorder,

gibt es irgendwelche Bedingungen die dein Projekt erfüllen muss um als Abschlussarbeit anerkannt zu werden? Alternativ zum A* Algo lässt sich sicherlich in jedem Bereich etwas passendes finden, z.B. ein Packer basierend auf der Burrows-Wheeler-Transformation oder ein Image-Resizer basierend auf Seam Carving. Ist beides nicht so trocken, (relativ) einfach zu implementieren, es macht Eindruck, es gibt dabei auch einen theoretischen Anteil den man - falls gefordert - behandeln kann, man kann die Projekte beliebig weit ausbauen falls sie den Ansprüchen nicht genügen, und man kann sie später auch selber verwenden. :)
 
G

Gast2

Gast
Ich hatte mir das so vorgestellt:

Als erstes wollte ich eine Zeichenfläche erstellen und auf dieser Zeichenfläche mit drawString quasi das Labyrinth erstellen, wobei ich mit den String keine Strecken im eigentlichen Sinn erstelle sonder nur Punkte die hintereinander gehängt sind und somit einen Strich ergeben.
Damit habe ich dann ja die Punkte auf meinem Koordinatenkreuz die nicht durchdrungen werden können, oder sehe ich das falsch?

Falscher Ansatz, nicht von der Visualisierung starten. z.B.:

Java:
		int[][] matrix = new int[][]{
			{99,99,99,99,99,99,99, 1,99},
			{99,99,99,99,99,99,99, 1,99},
			{99,99,99,99,99,99,99, 1,99},
			{99,99,99, 1, 1, 1, 1, 1,99},
			{99,99,99, 1,99,99, 3,99,99},
			{99,99,99, 1,99,99, 5,99,99},
			{99,99,99, 1, 9, 9, 3,99,99},
			{99,99,99, 1, 1, 1, 1,99,99},
			{99,99,99,99,99,99, 1,99,99}
		};
		
		findway(matrix[0][7], matrix[8][6]);

dabei steht die Zahl in jeder "Zelle" wie teuer es ist die "Zelle" zu betreten. Soll der Robotor den Weg gehen:
Code:
0,7 -> 1,7 -> 2,7 -> 3,7 -> 3,6 -> 3,5 -> 3,4 -> 3,3 -> 4,3 -> 5,3 -> 6,3 -> 7,3 -> 7,4 -> 7,5 -> 7,6 -> 8,6
oder
0,7 -> 1,7 -> 2,7 -> 3,7 -> 3,6 -> 4,6 -> 5,6 -> 6,6 -> 7,6 -> 8,6

Wie du so ein Graph/Grid/Matrix dann visualisierst ist zweitrangig.
 

Disorder257

Mitglied
Du kannst Dir mal überlegen, ob Du das Suchproblem ganz allgemein programmierst und den A* dann als einen von verschiedenen Suchalgorithmen verwendest.
Wenn Du bei Schnittstellen und Softwaretechnik ein bisschen aufpasst, kannst Du ziemlich flott ein Programm schreiben, dass die gleiche Suchaufgabe mit verschiedenen (auswählbaren) Suchverfahren löst. Im wesentlichen unterscheiden die sich alle nur in der Auswahl des nächsten zu versuchenden Knotens/Schrittes. Tiefensuche nimmt immer den "nächsten ersten", Breitensuche immer alle nächsten, dann alle übernächsten ..., Greedy wählt immer den direkt besten und der gute A* dann endlich den geschätzt Besten.

Die nächste Abstraktion, wäre das Aswechseln von Heuristiken, also den Schätzfunktionen. Die hängen dann schon etwas konkreter an der jeweilgen Aufgabe dran.

Noch eine Abstraktion mehr und Du kannst sogar das konkrete Problem abtrennen. Dann hättest Du ein Programm, das verschiedene Suchverfahren auf z.B. Pfadsuche, X-Damen Problem, 8-Puzzle, Sudoku, ... anwendet.

Also ich glaube bei sowas würde ich dann an meine Grenzen stoßen.

Hallo Disorder,

gibt es irgendwelche Bedingungen die dein Projekt erfüllen muss um als Abschlussarbeit anerkannt zu werden? Alternativ zum A* Algo lässt sich sicherlich in jedem Bereich etwas passendes finden, z.B. ein Packer basierend auf der Burrows-Wheeler-Transformation oder ein Image-Resizer basierend auf Seam Carving. Ist beides nicht so trocken, (relativ) einfach zu implementieren, es macht Eindruck, es gibt dabei auch einen theoretischen Anteil den man - falls gefordert - behandeln kann, man kann die Projekte beliebig weit ausbauen falls sie den Ansprüchen nicht genügen, und man kann sie später auch selber verwenden.

Die Projekte sind vom Inhalt her nicht begrenzt, es ist sogar erwünscht sich mit etwas auseinander zu setzen was nicht Inhalt des Programmierunterrichts war. Insofern habe ich da freie Hand.
Ich wäre natürlich für etwas was Eindruck macht, aber mein Lehrer ist ehemaliger Programmierer von IBM und der Hinsicht lässt der sich von optisch "hübschen" Programmen eher weniger beeindrucken.
Ich sollte allerdings darauf achten das es etwas ist was nicht 4000 mal im Internet vorhanden ist, da sehr gern recherchiert wird :p



@fassy

Stellen die Einsen in der Matrix also den möglichen Weg dar und es wird immer getestet wie der Wert in der Zellen ist? Die Tür öffnet sich wenn eine Zelle einen bestimmten Wert hat oder wie hab ich das zu verstehen?
 
G

Gast2

Gast
Nein, die Zahlen in der Matrix sagen wie "teuer" es ist die Zelle zu überqueren.

Stell dir ein Autorennen vor. Zellen mit 1 sind z.B. die Strasse, 3 = Wiese, 9 = Schotter, 99 Wasser.

Am schnellsten/billigsten geht es auf der Strasse, alles klar? ;)
 

Disorder257

Mitglied
Also ist es im Prinzip möglich über Schotter zu fahren aber es ist nicht der kürzeste Weg und würde somit nicht in Frage kommen. Okay :bae:

Gut das ihr alle so eine Geduld habt :D
 

diggaa1984

Top Contributor
der weg wäre schon kürzer (siehe matrix) aber er ist im kontext des autorennens, nicht der schnellste .. bsp schikane mit sandumrandung ^^ .. kannt gerne 30m weg sparen aber im sand schiebste mehr zeitverlust als beim regulären abfahren der schikane aufm asphalt
 

Disorder257

Mitglied
Okay ich denke ich habe es prinzipiell verstanden.
Wie kann ich denn jetzt vorgehen? Sollte ich als erstes eine Matrix erstellen und damit quasi das Spielfeld vordefinieren?
 

diggaa1984

Top Contributor
ein durchdachter plan was du nun genau umsetzen willst wäre das erste :)
ein spielfeld als matrix darzustellen, mag wohl die einfachste art sein am anfang. die frage ist wie gut du damit später arbeiten kannst
 

Disorder257

Mitglied
Gut ich werde mich am Freitag mal ein wenig mit meinem Lehrer zusammensetzten und da mal schauen wie ich da genau vorgehen kann.

Erstmal ein dickes Danke für die Denkanstöße.:oops:
 

Disorder257

Mitglied
Hallo zusammen,

ich habe mich nach Legitimation meines Lehrers mal an das Projekt gesetzt und schon einmal grob alles umgesetzt, was Ihr mir hier als Ansatz vorgeschlagen habt.

Wie sollte ich jetzt weiter vorgehen?
Was sollte noch gemacht werden bevor die Implementierung des Algorithmus vorgenommen wird?

Hier einmal der Quelltext:
Java:
import java.awt.*;
import java.awt.event.*;


public class roboter extends Frame {
  // Anfang Variablen
  int [][] matrix = new int[][]{
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99, 1, 1, 1, 1, 1, 1, 1,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1, 1, 1, 1,99,99},
  {99,99,99, 99,99,99,1,99,99},
  };
  // Ende Variablen

  public roboter(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    
    
    int frameWidth = 600;
    int frameHeight = 600;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    // Anfang Komponenten

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }



  public static void main(String[] args) {
    new roboter("Roboter");
    
    


    
  }
     public void paint(Graphics g)
   {
      g.setColor(Color.white);
      g.drawRect(20,40,495,495);
      for( int y = 40; y <= 500; y +=55 )
      {
           for( int x = 20; x <= 500; x +=55 )
           {
           if(matrix[(x-20)/55][(y-40)/55] == 1)
           {
             g.setColor(Color.gray);
           }
           else if(matrix[(x-20)/55][(y-40)/55] == 99)
           {
             g.setColor(new Color(0,150,0));
           }
           g.fillRect(x,y,55,55);
           }

      }


   }//Ende Methode paint
   

   
}

Und so sieht es aus:

 
G

Gast2

Gast
Zuersteinmal solltest du deine Klasse
Code:
roboter
in
Code:
Roboter
, bzw. noch besser
Code:
RoboterFrame
umbennen ;)
Danach solltest du ein gescheites Datenmodel erstellen. Das kann z.b. aus zwei Klassen
Code:
Roboter
und
Code:
Spielfeld
bestehen.
Damit hättest du dann schonmal deine Daten sauber vom View getrennt.
 

Ark

Top Contributor
Wie sollte ich jetzt weiter vorgehen?
Was sollte noch gemacht werden bevor die Implementierung des Algorithmus vorgenommen wird?
  1. GUI von Logik trennen. (Mist, EikeB war hier schneller. ^^) Das, was fassy sagte (nämlich gedanklich nicht mit der Visualisierung zu beginnen, sondern die Logik zu verstehen), ist auch ein guter Punkt, der bei jeder Entwicklung von Software beachtet werden sollte. Deine A*-Implementierung sollte auch dann funktionieren können, wenn nichts am Bildschirm angezeigt wird. Damit es gar nicht erst zu einer solchen (äußerst unerwünschten) Abhängigkeit kommt, sollte man das Darstellende vom Verarbeitenden trennen. In deinem Fall bedeutet das: Benenne deine bisherige Klasse roboter um in Roboteranzeige (oder so ähnlich), denn es ist bestenfalls eine Anzeige dessen, was der Roboter tut. Erzeuge dann eine neue Klasse Roboter, die NICHT von Frame erbt, und verschiebe die Matrix aus der alten Klasse in diese neue Klasse. Das ist zwar noch immer ziemlich weit entfernt von sauberem Entwurf, aber es ist WESENTLICH besser als der bisherige Code.
  2. Magic numbers durch benannte Konstanten ersetzen. Was bedeutet diese 55 in paint(Graphics), Zeile 61? Was bedeutet die 55 in Zeile 63? Bedeuten beide Zahlen das gleiche? Wenn ja: gib der 55 einen Namen! Wenn es sich also um die Seitenlänge eines Kästchens in der Anzeige handelt, dann mach eine [c]private final int SEITENLÄNGE = 55;[/c]. Damit ist erstens klar, was gemeint ist (hilft unheimlich beim Lesen!), und zweitens eine Änderung VIEL leichter (wenn man z.B. feststellt, dass 55 doch zu groß ist und 30 gereicht hätte). Genauso sollten auch die Zahlen in deiner Matrix Namen bekommen (von wegen WASSER, SCHOTTER etc.).
Es gibt noch viele andere Mängel, aber die sind, im Gegensatz zu den oben genannten, für dich (als Anfänger) noch nicht so relevant. ;)

Viel Spaß beim Weiterbasteln.

Ark

PS@Disorder257: Du bist ein echter Segen für dieses Forum. Endlich jemand, der, obwohl er neu hier ist, was tut und nicht nur haben will - und zusammenhängende Fragen stellen kann. :toll: (Das soll jetzt nur meinen persönlichen Eindruck widerspiegeln. In letzter Zeit hatte ich das Gefühl, dass das Forum zuhauf von zwitschernden help vampires heimgesucht würde. Vielleicht habe ich aber auch immer nur in die falschen Threads geguckt …)
 

Disorder257

Mitglied
Soooo, dann habe ich mal versucht deine Tipps zu beherzigen. Problem ist nur wie kann ich die Matrix in die Roboter.java auslagern, die im Ordner Komponenten ist?

Der Quelltext sieht im Moment so aus:

Java:
import java.awt.*;
import java.awt.event.*;
//import Komponenten.Roboter;


public class roboterFrame extends Frame {
  // Anfang Variablen
private final int Kantenlaenge =55;
private final int Grass =99;
private final int Straße =1;

  int [][] matrix = new int[][]{
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass},
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass},
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass},
  {Grass ,Straße,Straße,Straße,Straße,Straße,Straße,Straße,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Grass ,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Grass ,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Straße,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Straße,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Straße,Straße,Straße,Grass ,Grass},
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass ,Grass},
  };
  
  
  /*
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99, 1, 1, 1, 1, 1, 1, 1,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1, 1, 1, 1,99,99},
  {99,99,99, 99,99,99,1,99,99},
  */


  public roboterFrame (String title) {
    // Frame-Initialisierung
    super("Roboter");
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    
    
    int frameWidth = 600;
    int frameHeight = 600;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    // Anfang Komponenten

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }



  public static void main(String[] args) {
    new roboterFrame("Roboter");
    
    


    
  }
     public void paint(Graphics g)
   {
      g.setColor(Color.white);
      g.drawRect(20,40,495,495);
      for( int y = 40; y <= 500; y +=Kantenlaenge)
      {
           for( int x = 20; x <= 500; x +=Kantenlaenge )
           {
           if(matrix[(x-20)/Kantenlaenge][(y-40)/Kantenlaenge] == Straße)
           {
             g.setColor(Color.gray);
           }
           else if(matrix[(x-20)/Kantenlaenge][(y-40)/Kantenlaenge] == Grass)
           {
             g.setColor(new Color(0,150,0));
           }
           g.fillRect(x,y,Kantenlaenge,Kantenlaenge);
           }

      }


   }//Ende Methode paint
   

   
}

Und die Klasse Roboter die ausgelagert werden soll so:

Java:
import java.awt.*;
import java.awt.event.*;


public class Roboter
{
  // Variablen
  int [][] matrix = new int[][]{
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99, 1, 1, 1, 1, 1, 1, 1,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1, 1, 1, 1,99,99},
  {99,99,99, 99,99,99,1,99,99},
  };
}


Es muss ja die Matrix zurückgegeben werden.
Muss ich dazu Return oder so etwas ähnlich einfügen?
 

Disorder257

Mitglied
Habs doch hinbekommen:)

Nach ausgiebigem überlegen habe ich mir gedacht, dass ich das Labyrinth Problem auch mit der Linke-Hand-Regel lösen kann. Wenn man durch ein Labyrinth läuft und die linke Hand immer an der linken Mauer ist, findet man immer heraus.

Problem: Das ist nicht immer der kürzeste Weg

Ich hatte daran gedacht beide Methoden zu kombinieren, also zwischendurch auch noch abzufragen welche Wertigkeit das Feld hat. So kann ich auch noch den kürzesten weg finden.

Was haltet ihr davon?

Habe ich einen Denkfehler?
 

muckelzwerg

Bekanntes Mitglied
Ist nicht wirklich "sauber". ;)
Du solltest eigentlich recht leicht den A* unabhängig entwickeln können. Wir haben das damals mit den Javaklasen für Bäume (Treenodes ableiten) gemacht.
Wurzel ist die Startsituation. Also das Labyrinth mit dem "Hamster" in seinem Startfeld.
Dann ermittelst Du die möglichen Nachfolgesituationen. Das sind alle Bretter mit dem Hamster ein Feld weiter.
Die werden bewertet anhand der Funktionen des A*. Der optimale Nachfolger wird ausgewählt und im nächsten Schritt geprüft.
Im Wesentlichen hast Du eine Queue, in der Du die Knoten speicherst, die als nächstes betrachtet werden sollen.
Dann brauchst Du ein bisschen "Drumrum" für den Test, ob Du am Ziel bist etc.
Die Nachfolger der Knoten holst Du direkt aus den überschriebenen Funktionen vom Treenode o.Ä.
Wenn man das sauber durchzieht, kommt da auch sehr schönes Java bei raus. ;)
 

Disorder257

Mitglied
Ich hab mir den Wikipedia Eintrag zum A*Algortithmus angesehen und dieses Beispiel-Programm von einem gewissen Sebastian Kleinau Sebastian Kleinau | Document Details | A-Star Algorithmus

Der Wikipedia-Eintrag war von der Programmierung her einfach unverständlich zumal alles vermutlich in Delphi? programmiert ist.

Ich hab einfach keinen Ansatz wo ich anfangen könnte. Ich denke ein wenig pseudo-Text würde schon helfen:(

Aktueller Stand:
Java:
import java.awt.*;
import java.awt.event.*;



public class roboterFrame extends Frame {
  // Anfang Variablen

public int Kantenlaenge =55;
public int Grass =99;
public int Straße =1;
int x=20,y=40;


  int [][] matrix = new int[][]{
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass},
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass},
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass},
  {Grass ,Straße,Straße,Straße,Straße,Straße,Straße,Straße,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Grass ,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Grass ,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Straße,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Grass ,Grass ,Straße,Grass ,Grass},
  {Grass ,Grass ,Grass ,Straße,Straße,Straße,Straße,Grass ,Grass},
  {Grass ,Grass ,Grass ,Grass ,Grass ,Grass ,Straße,Grass ,Grass},
  };
  
  
  /*
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99,99,99,99,99,99,99, 1,99},
  {99, 1, 1, 1, 1, 1, 1, 1,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99,99,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1,99,99, 1,99,99},
  {99,99,99, 1, 1, 1, 1,99,99},
  {99,99,99, 99,99,99,1,99,99},
  */


  public roboterFrame (String title) {
    // Frame-Initialisierung
    super("Roboter");
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    
    
    int frameWidth = 600;
    int frameHeight = 600;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    // Anfang Komponenten

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }



  public static void main(String[] args) {
    new roboterFrame("roboterFrame");
    
    


    
  }
     public void paint(Graphics g)
   {
      g.setColor(Color.white);
      g.drawRect(20,40,495,495);
      for( int y = 40; y <= 500; y +=Kantenlaenge){
           for( int x = 20; x <= 500; x +=Kantenlaenge ){
                if(matrix[(x-20)/Kantenlaenge][(y-40)/Kantenlaenge] == Straße)
                {
                g.setColor(Color.gray);
                }
                else if(matrix[(x-20)/Kantenlaenge][(y-40)/Kantenlaenge] == Grass)
                {
                g.setColor(new Color(0,150,0));
                }
                g.fillRect(x,y,Kantenlaenge,Kantenlaenge);
           }

      }
      //Startpunkt
      g.setColor(Color.BLUE);
      g.fillRect(x, y+7*Kantenlaenge, Kantenlaenge, Kantenlaenge);
      //Endpunkt
      g.setColor(Color.RED);
      g.fillRect(x+6*Kantenlaenge, y+6*Kantenlaenge, Kantenlaenge, Kantenlaenge);
      Image img;
      img = getToolkit().getImage("super_mario2.gif");
      g.drawImage(img,40,40,this);
      



   }//Ende Methode paint



   
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Oneixee5 Für die RPi-Bastler ... Allgemeine Java-Themen 0
I PDF2Tiff für Fax Allgemeine Java-Themen 0
W Vergleichstool für xml-Dateien Tortoise-svn Verknüpfung Allgemeine Java-Themen 2
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
Zrebna Bitte um Empfehlungen für "zeitlose" Bücher bzgl. Backend mit Spring und Beans Allgemeine Java-Themen 25
G Lesbare args für die main-Methode Allgemeine Java-Themen 6
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
G Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 71
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
F PI Regler für Heizung Allgemeine Java-Themen 7
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11
N fixed-keyword von C# für Java Allgemeine Java-Themen 6
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
Kirby.exe Software für Graphische Visualisierung Allgemeine Java-Themen 20
B OOP Auslöser für NullPointerException Allgemeine Java-Themen 3
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
DonMalte Ambitioniertes Projekt für Einsteiger & Motivierte Allgemeine Java-Themen 0
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
W Alternative für Threads Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
Thallius Rätsel für Windows Profis Allgemeine Java-Themen 8
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
H OOP Setting(config) für Applikation sicheren? Allgemeine Java-Themen 9
OnDemand PDF Libary für Formulare Allgemeine Java-Themen 7
S Warmup für Lineare-Suche mit Zeitmessung Allgemeine Java-Themen 2
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
M Brainstorming für mein Projekt Allgemeine Java-Themen 30
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
C Bibliotheken für Algorithmische Geometrie Allgemeine Java-Themen 2
C Daten für Klassifikationsverfahren gewinnen Allgemeine Java-Themen 6
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
I Overlay für Spiele Allgemeine Java-Themen 6
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11

Ähnliche Java Themen


Oben