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[][] 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); }