Wie kann ich ein ganz grundlegendes Navigationssystem in Java umsetzen?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Oh die Aufgabe die du dir gesucht hast ist sehr cool. Warum? weil es 1000 Wege gibt um daran zu gehen und das Problem zu lösen.

Du kannst z.b dran gehen in dem du das Feld als Graphen System betrachtest und die Graphen Algorithmen wie Diijkstra verwendest.

Da dich KI zu interessieren scheint kannst dir alternativ natürlich auch die Klassiker wie Tic Tac Toe anschauen. Dann wären Dinge wie der Min-Max Algorithmus für dich interessant. (Da bist du dann auch ganz schnell tief drin wenn du dann zu spielen wie 4 Gewinnt weiter gehst.)

per kürzestem Weg: um deinen Start werden herum die Felder mit aufsteigenden Nummern markiert; immer die 4 drumrum, wenn es da weiter geht mit z.B. der 1, dann gehst du alle Felder durch und guckst nach der Eins und testest die umliegenden Felder der 1 auf Leersein und setzt ggf. eine 2 usw. bis du das Ende erreichst. Der Weg ist nun vom Ende immer absteigend um 1 bis zum Start :D

http://img5.fotos-hochladen.net/uploads/minesweeperhit2yvnm7k.gif

Hatte ich mal für eine Schülprojektpräsentation (leicht anderes Thema) gebastelt (ist leicht langsam, damit man nebenbei das erklären kann :))

Schau dir mal den A* Algorithmus an

Wie kann ich hier ein Textfeld hinzufügen Java?

Ich will dort ein Textfeld generieren doch bei mir kommt der Fehler das es dann auf der gleichen Zeile ist

Code:

import javax.swing.; import java.awt.;

/** * Creates the complexer elements and simpler ones with specified data/configurations */ public abstract class Builder extends Elements {

public JPanel mainPanel() {
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
    mainPanel.setBackground(Color.gray);
    return mainPanel;
}

/**
 * Creates a usage panel
 * @param testRowNumber Number of the testRow, for which a panel will be created
 * @return (usage) panel element
 */
public JPanel panel(int testRowNumber) {
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
    panel.add(label("Testreihe: " + testRowNumber + "  "));
    String[] dropDownValuesFixed = {"MP 2", "MP 3", "MP 4", "MP 5", "MP 6", "MP 8", "MP 9"};
    panel.add(dropDownMenu(dropDownValuesFixed));
    panel.add(label("  Portangabe "));
    JTextField textField = textField(7);
    ElementsHandler.setTextField(textField, testRowNumber);
    panel.add(textField);
    JButton button = button("Bestätigen");
    ElementsHandler.setButton(button, testRowNumber);
    panel.add(button);
    return panel;
}

}

...zur Frage

Methode als Parameter in einem Objekt in Java?

Hallo erstmal,

ich habe folgendes Problem bzw. Frage:

Und zwar möchte ich eine Methode als Paramter(oder ähnliches) in einem Objekt einspeichen und diese Methode soll dann mit einer anderen Methode der Klasse ausgeführt werden. Ich brauche dies da ich ein Yu-gi-oh Spiel programmieren will um zu üben und ich habe nun die Oberklasse Karten und daraus Monster Zauber usw. ich will natürlich nicht für jede Karte eine Klasse haben also möchte ich die Methoden in die Karte einspeichern.

Ich weiß, lange Frage und wahrscheinlich auch etwas unglücklich formuliert, wäre aber trotzdem über eine Antwort sehr froh :)

...zur Frage

Kann mir jemand bei einem Problem beim Programmieren helfen?

Ich bin gerade dabei, für die Schule Mensch ärgere dich nicht zu programmieren. Dabei möchte ich es so machen, dass die Spielfigur zum Weitergehen immer schaut, welches das nächste Feld ist. Dazu haben alle Spielfelder ein Attribut namens nachfolger, welches auch schon direkt beim Erstellen der Welt festgesetzt wird. Aber jetzt muss die Figur ja herausfinden, welches der Nachfolger von dem Feld unter ihr ist. Dabei kommt jedoch der Fehler, der unten im Quelltext steht, obwohl die Klasse Spielfeld die Methoden hat.

public void gehen() { 
  Actor aktuellesFeld;
  aktuellesFeld = getOneObjectAtOffset(0, 0, Spielfeld.class);
    
  if(aktuellesFeld != null)
  {
    if(aktuellesFeld.getWelchesFeld() /*Fehler: "Can not find Methode"*/ == 2)
    {        
    }

    for(int i = 0; i <= zufallsZahl; i++)
    {
      aktuellesFeld.getNachfolger1() /*Fehler: "Can not find Methode"*/;
    }
  }
}
...zur Frage

Globale Structs in C- wie/wo deklarieren/definieren?

hey habe gerade folgendes Problem beim Strukturieren meines C-Programms:

Ich habe eine main.c und 4 weitere dateien helfer1.c, helfer1.h und helfer2.c,helfer2.h. Nun arbeite ich aber mithilfe von 2 Strukturen: struct Mitglieder und struct Paarungen, das Problem ist, dass ich den struct Mitglieder sowohl in der helfer1-hilfsfunktion als Parameter übergebe als auch in der helfer2-hilfsfunktion. Ansonsten hätte ich die Definition der Structs einfach in die jeweiligen Header geschrieben, aber ich kann ja nicht zweimal dasselbe definieren. Momentan stehen die Definitionen der beiden Structs in der main.c außerhalb der main()-Funktion,aber das klappt leider nicht, dachte es sind dann direkt globale structs. Wie muss ich das jetzt angehen,wenn ich wie gesagt die structs in beiden Funktionen brauche und in der main beide Funktionen aufrufe?

Mfg

struct Mitglied{    char vorname[40];    char nachname[40];    int ranking;};
struct Paare{    struct Mitglied mA;    struct Mitglied mB;    int rankingSumme;};
helfer2.h: extern void paarungenBilden(const int anzahlA, const struct Mitglied mitgliederA[], const int anzahlB, const struct Mitglied mitgliederB[],struct Paare paarungen[]);
helfer1.h: extern void mitgliederEinlesen(const char dateiname[], const int anzahl, struct Mitglied mitglieder[]);
...zur Frage

3-bit Zahl effizient mit Bitmaske in Byte einfügen?

Gegeben ist eine 3-bit große Zahl (0 - 7) und eine Bitmaske der Form 11100000. Ich möchte nun gerne die Zahl in ein Byte einfügen, in dem sich bereits andere Daten befinden (die erhalten bleiben sollen). Die Bitmaske soll angeben, wo die Zahl eingefügt werden soll (dort werden die Daten dann natürlich überschrieben).

Mein bisheriger Ansatz ist es, das Byte mit der invertierten Bitmaske bitweise mit UND zu verknüpfen, um die alten Daten der oberen 3 bits zu löschen, und danach das Byte mit der um 5 nach links geshifteten Zahl mit ODER zu verknüpfen.

Für mich klingt das aber recht ineffizient. Neben 4 Logikoperationen muss ich mir zusätzlich noch den Verschiebungsvektor der Shift-Operation merken, obwohl dieser sich letztlich aus der Bitmaske ergibt.

Hat jemand eine bessere Idee?

...zur Frage

Java: Methodenaufruf in einem Object-Array?

Guten Tag,

ich habe ein Spielfeld, welches durch ein Object-Array dargestellt wird. Der Spieler wird durch ein P dargestellt und hat am Anfang die Positionen x und y, welche ich beim Einlesen mit BufferedReader bestimmt habe.

Beispielcode:

abstract class Area {
    public boolean canMove();
}



class A extends Area {
    public boolean canMove() {...}
}



class B extends Area implements InterF {
    public boolean canMove() {...}
    public void trigger() {...}
}



interface InterF {
    public void trigger();
}


class Map {
    Area[][] area;
    ... 
    private void build {
         for (int y = 0; y < area.length; y++){
            for (int x = 0; x < area[y].length; x++) {
                 switch (area[y][x]) {
                    case A: 
                        area[y][x] = new A(); 
                        break;
                    case B: 
                        area[y][x] = new B(); 
                        break;
            }
        }
}

Wenn ich jetzt meinen Spieler in dem Array bewege, wie kann ich wissen, welches Object sich in dem Array-Feld [y][x] befindet (A oder B) und wie kann ich dann die Methode canMove() ausführen und ggf trigger() aus B?

...zur Frage

Was möchtest Du wissen?