public int[][] Agent_Restore(int[][] World_Data, Agente wobot, double Lambda_Exp) { Random Uniform_Distribution = new Random(); Distribution Builder = new Distribution(); World_Data[wobot.Ypos][wobot.Xpos] = 0;// LÍNEA IMPORTANTÍSIMA int Xcord, Ycord, orientation = 0; Xcord = Uniform_Distribution.Next(40); //El 21 y el 40 son los índices de la matrix del mundo. Ycord = Uniform_Distribution.Next(21); orientation = Uniform_Distribution.Next(4); while (World_Data[Ycord][Xcord] != 0) { Xcord = Uniform_Distribution.Next(40); Ycord = Uniform_Distribution.Next(21); orientation = Uniform_Distribution.Next(4); } wobot.Old_Xpos = 0; wobot.Old_Ypos = 0; wobot.prev_signal_intensity = 0; wobot.Xpos = Xcord; wobot.Ypos = Ycord; wobot.orientation = orientation; wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos); wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos); wobot.Time_of_reaction = Builder.nextExponential(Lambda_Exp); switch (orientation) { case (0): World_Data[Ycord][Xcord] = 4; break; case (1): World_Data[Ycord][Xcord] = 5; break; case (2): World_Data[Ycord][Xcord] = 6; break; case (3): World_Data[Ycord][Xcord] = 7; break; } wobot.Clock_sense = false; wobot.Clock_inverse = false; return(World_Data); }
public int[][] Build_Wobots(int[][] World_Data, int Cant, int cobertura) { Agent_list = new Agente[Cant]; //Leyenda (orientation): int orientation = 0; Random Uniform_Distribution = new Random(); //0- A_Arriba. Distribution Builder = new Distribution(); //1- A_Abajo. int Xcord, Ycord = 0; //2- A_Izquierda. for (int i = 1; i <= Cant; i++) //3- A_Derecha. { Xcord = Uniform_Distribution.Next(40); //El 23 y el 43 son los índices de la matrix del mundo. Ycord = Uniform_Distribution.Next(21); while (World_Data[Ycord][Xcord] != 0) { Xcord = Uniform_Distribution.Next(40); Ycord = Uniform_Distribution.Next(21); orientation = Uniform_Distribution.Next(4); } Agent_list[i - 1] = new Agente(Xcord, Ycord, i, cobertura, orientation); switch (orientation) { case (0): World_Data[Ycord][Xcord] = 4; break; case (1): World_Data[Ycord][Xcord] = 5; break; case (2): World_Data[Ycord][Xcord] = 6; break; case (3): World_Data[Ycord][Xcord] = 7; break; } } return(World_Data); }
public int[][] turn_down(int[][] World_Data, Agente wobot, double Lambda_Exp) { Distribution dist = new Distribution(); //wobot.orientation = 2; World_Data[wobot.Ypos][wobot.Xpos] = 5; wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp); switch (wobot.orientation) { case (2): //Agente orientado hacia la izquierda wobot.Clock_sense = true; wobot.Clock_inverse = false; wobot.orientation = 1; break; case (3): //Agente orientado hacia la derecha wobot.Clock_sense = false; wobot.Clock_inverse = true; wobot.orientation = 1; break; } return(World_Data); }
public int[][] turn_rigth(int[][] World_Data, Agente wobot, double Lambda_Exp) { Distribution dist = new Distribution(); //wobot.orientation = 3; World_Data[wobot.Ypos][wobot.Xpos] = 7; wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp); switch (wobot.orientation) { case (0): //Agente orientado hacia arriba wobot.Clock_sense = true; wobot.Clock_inverse = false; wobot.orientation = 3; break; case (1): //Agente orientado hacia abajo wobot.Clock_sense = false; wobot.Clock_inverse = true; wobot.orientation = 3; break; } return(World_Data); }
public int[][] move_down(int[][] World_Data, Evento[] Event_List, Agente wobot, bool push_trast, double Lambda_Exp, double Lambda_Huecos) { Distribution dist = new Distribution(); Random Uniform_Distribution = new Random(); int Hole_X_Pos, Hole_Y_Pos = 0; if (push_trast == true) { if (World_Data[wobot.Ypos + 2][wobot.Xpos] == 0)//Mover el traste a casilla vacía. { World_Data[wobot.Ypos][wobot.Xpos] = 0; World_Data[wobot.Ypos + 1][wobot.Xpos] = 9; World_Data[wobot.Ypos + 2][wobot.Xpos] = 1; //wobot.prev_signal_intensity = wobot.signal_intensity; wobot.Old_Xpos = wobot.Xpos; wobot.Old_Ypos = wobot.Ypos; wobot.Ypos += 1; // wobot.Ypos = wobot.Ypos - 1; wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos); wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos); wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp); } else { if (World_Data[wobot.Ypos + 2][wobot.Xpos] == 2)//Mover el traste al hueco. { World_Data[wobot.Ypos][wobot.Xpos] = 0; World_Data[wobot.Ypos + 1][wobot.Xpos] = 4; //World_Data[wobot.Ypos + 2][wobot.Xpos] = 0; //Tratamiento de huecos Hole_X_Pos = Uniform_Distribution.Next(41); Hole_Y_Pos = Uniform_Distribution.Next(22); while (World_Data[Hole_Y_Pos][Hole_X_Pos] != 0) { Hole_X_Pos = Uniform_Distribution.Next(41); Hole_Y_Pos = Uniform_Distribution.Next(22); } //Aquí asigno el entero 20 para luego localizarlo en el form y poder pintar el hueco. World_Data[Hole_Y_Pos][Hole_X_Pos] = 20; //Actualizar las coordenadas del objeto hueco de Event_List. Hole_Restore(World_Data, Event_List, wobot.Xpos, wobot.Ypos + 2, Lambda_Huecos); World_Data[wobot.Ypos + 2][wobot.Xpos] = 0; /////////////////////////////////////////////// wobot.Old_Xpos = wobot.Xpos; wobot.Old_Ypos = wobot.Ypos; wobot.Ypos += 1; // wobot.Ypos = wobot.Ypos - 1; wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos); wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos); wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp); } } } else //Mover el agente a la próxima casilla vacía de abajo. { //if (World_Data[wobot.Ypos + 1][wobot.Xpos] != 0) return World_Data; World_Data[wobot.Ypos][wobot.Xpos] = 0; World_Data[wobot.Ypos + 1][wobot.Xpos] = 4; wobot.Old_Xpos = wobot.Xpos; wobot.Old_Ypos = wobot.Ypos; wobot.Ypos += 1; wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos); wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos); wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp); } wobot.Clock_sense = false; wobot.Clock_inverse = false; return(World_Data); }