2011-01-16 19 views
1

Ich versuche herauszufinden, wie Agents in einem Raster mit vordefinierten Grenzen in Java zufällig zu bewegen. Die Variablen für Welt sind:zufällige Agent Bewegung in Java

int worldXsize; 
int worldYsize; 

Die Variablen für Agentenposition sind:

int x; 
int y; 

Irgendwelche Gedanken darüber, wie dies zu tun? Bitte posten Sie den Quellcode, wenn Sie können.

würde dieser Code funktionieren? sind neu im Allgemeinen

private Methode move() zur Programmierung {

//

doesnt geht Gitter KöNNTEN NICHT FERTIGTE FUNKTION UND erforderlich sein, zu erstellenden

 grid.getLocation(int x) = int currentX; 

grid.getLocation(int y) = in currentY; 

int m = generator.nextInt(3); 

if (int m == 0){ 
    currentX += 1; 

else 
if (int m == 1) 
    currentX -=1; 


else 
if (int m == 2) 
    currentY += 1; 

else 
if (int m == 3) 
    currentY -= 1; 

return currentX; 
return currentY; 

// sicher Mittel machen

 if (currentX > int worldXSize){ 
    currentX -= 1;} 

if (currentX > int worldYSize){ 
    currentY -= 1;} 
return currentX; 
return currentY; 
} 

// Speicherort im Raster aktualisieren currentX = int x; currentY = int y;}

+0

Nach dem Lesen dieser ... Ernsthaft? –

+0

yup, ich bin ein Idiot aber das wird hoffentlich mit der Praxis ändern und helfen –

Antwort

0

Sie können diesen Algorithmus verwenden. Da es wie eine Hausaufgaben aussieht, lasse ich Sie den entsprechenden Code finden:

random deltaX in {-1, 0, 1} 
random deltaY in {-1, 0, 1} 

if x + deltaX < 0 OR x + deltaX > worldXsize 
    deltaX = 0 
if y + deltaY < 0 OR y + deltaY > worldYsize 
    deltaY = 0 

move(deltaX, deltaY) 
0

Zunächst einmal, was die „Timing“ Regeln des Spiels sind (es gibt mehrere Varianten dieser Zuordnung). In einigen bewegen sich alle Agenten "zur selben Zeit" und in einer anderen bewegen sie sich einzeln (wie ein Monopol). Dies ist wichtig, da es bestimmt, wie Sie nach Kollisionen suchen.

Allgemeinen für jeden Agenten:

1) Sie herauszufinden, welche der möglichen 8 oder 4 bewegt (tun Sie Diagonalen ermöglichen) es (basierend auf proxmity an andere Agenten und dem Gitter) machen?.

2) Sie wählen nach dem Zufallsprinzip eine der erlaubten Züge aus.

3) Sie aktualisieren die Karte mit der Lage des Agenten.

Die Menge der Arbeit hängt typischerweise von der Sauberkeit des Designs - zum Beispiel, ob Sie eine globale Array verwenden, oder ob Sie verwenden eigentlich ziemlich Typen für alles.

+0

Ich möchte die Agenten zur gleichen Zeit bewegen –

+0

, die Dinge etwas komplizierter macht, weil Sie zwei Agenten davon abhalten müssen, in das gleiche Quadrat zu bewegen. Es basiert immer noch auf dem gleichen Prinzip, aber Sie müssen überprüfen, bevor Sie einen Agenten bewegen. – Uri

0

Sie können die Klasse Random verwenden, um eine Zahl zwischen 0 und 3 zu generieren. Je nach Nummer bewegen Sie sich einen Schritt in eine bestimmte Richtung: 0 = links, 1 = rechts, 2 = oben, 3 = unten. Bevor Sie sich bewegen, prüfen Sie, ob der nächste Schritt Ihren Agenten nicht aus dem Raster entfernt. Wenn dies der Fall ist, generieren Sie eine neue Nummer und wiederholen Sie den Vorgang.

Sie können auch die Bereiche speichern Sie bereits besucht haben, so dass Sie eine höhere Priorität auf einen Bereich geben, die Sie nicht bereits besucht haben.

+0

ist es in Java möglich, grid.getLocation() zu verwenden, oder wird diese Funktion nur in der Repast-Bibliothek gefunden? –

+0

Was genau ist Raster? Verwenden Sie ein Rasterlayout? Wenn Sie den Agenten direkt zeichnen, können Sie mit den x, y-Koordinaten bestimmen, wo der Agent gezeichnet wird. – npinti

+0

nein Ich verteile die Agenten auf der ganzen Linie, aber jeder benutzt int X und int Y, um ihren Standort zu markieren. –