class Agent { Raster raster; // Raster in dem der sich der Agent bewegt int number; // Nummer des Agenten int direction; // Richtung des Agenten int x; // x-position Agent int y; // y-position Agent int PosMx; // x-position Matrix int PosMy; // y-position Matrix int [][] mU; // Array mit Information welche Matrizen angewendet werden ArrayList rulesList; //Liste aller vorhandenen Matrizen // CONSTRUCTOR Agent(int nr, int x, int y, Raster raster) { this.raster = raster; setNumber(nr); setPosition(x, y); setRandomDirection(); //zufällige Richtung beim erstellen eines Agenten //setDirection(UP); //gewünschte Richtung beim erstellen eines Agenten } // METHODEN void checkAllMatrices() { x= getX(); y= getY(); if (direction==RIGHT) //abchecken der Agentenrichtung und Ausrichtung der Matrix { int PosMx = x+1; int PosMy = y-1; setPositionMatrix(PosMx, PosMy); } else if (direction==LEFT) { int PosMx = x-3; int PosMy = y-1; setPositionMatrix(PosMx, PosMy); } else if (direction==UP) { int PosMx = x-1; int PosMy = y-3; setPositionMatrix(PosMx, PosMy); } else { int PosMx = x-1; int PosMy = y+1; setPositionMatrix(PosMx, PosMy); } for (int i=0; i innerhalb des Rasters { setPosition(getX()-1,getY()); //Bewegung ein Feld vorwärts } else { invertDirection(direction); //Falls Modus = -1 (nirvana Zelle) -> ausserhalb des Rasters, umkehren } } else if (direction == RIGHT) //analoges verfahren für andere drei Richtungen { int mode = raster.getCell(getX()+1,getY()).getMode(); if (mode!=-1) { setPosition(getX()+1,getY()); } else { invertDirection(direction); } } else if (direction == DOWN) { int mode = raster.getCell(getX(),getY()+1).getMode(); if (mode!=-1) { setPosition(getX(),getY()+1); } else { invertDirection(direction); } } else if (direction == UP) { int mode = raster.getCell(getX(),getY()-1).getMode(); if (mode!=-1) { setPosition(getX(),getY()-1); } else { invertDirection(direction); } } } void invertDirection(int dir) { if (dir==LEFT) { setDirection(RIGHT); }else if (dir==RIGHT) { setDirection(LEFT); }else if (dir==UP) { setDirection(DOWN); }else { setDirection(UP); } } void probabilityToChangeDirection(int p) { if ( random(100) < p) { setRandomDirection(); } } void setRandomDirection() { int[] possibleDir= { LEFT, RIGHT, UP, DOWN }; int index = floor( random(4) ); direction = possibleDir[ index ]; } //SETTER void setMatrixList(ArrayList mL) { this.rulesList = mL; } void setMatricesInUse(int[][] mU) { this.mU = mU; } void setPosition(int x, int y) { this.x = x; this.y = y; } void setPositionMatrix(int PosMx, int PosMy) { this.PosMx = PosMx; this.PosMy = PosMy; } void setNumber(int number) { this.number = number; } void setDirection(int direction) { this.direction = direction; } //GETTER int getNumber() { return number; } int getDirection() { return direction; } int getX() { return x; } int getY() { return y; } }