Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Collections;
- float MUTATION_CHANCE = 0.3;
- float MUTATION_MIN = 0.5;
- float MUTATION_MAX = 0.7;
- int BRAIN_SIZE = 100;
- int CAR_SPEED = 5;
- int END_X = 250, END_Y = 0;
- void setup()
- {
- size(500, 500);
- background(0);
- }
- void draw()
- {
- }
- class Race
- {
- ArrayList<Car> cars = new ArrayList<Car>();
- ArrayList<Car> placements = new ArrayList<Car>();
- int endX, endY = 0;
- Race(int size, int startX, int startY, int endX, int endY)
- {
- for(int i = 0; i < size; i++)
- {
- cars.add(new Car(startX, startY));
- }
- this.endX = endX;
- this.endY = endY;
- }
- void runOnce()
- {
- for (Car car : cars)
- {
- car.move(CAR_SPEED);
- }
- }
- ArrayList<Car> getPlacements()
- {
- ArrayList<Car> placements = new ArrayList<Car>();
- for(Car car : cars)
- {
- float distance = dist(car.x, car.y, endX, endY);
- for(int i = 0; i < size; i
- }
- }
- }
- class Car
- {
- int x, y = 0;
- float dir = 0;
- Brain brain = new Brain(BRAIN_SIZE);
- Car(int startX, int startY)
- {
- x = startX;
- y = startY;
- }
- void move(int spd)
- {
- if (brain.next() != null)
- {
- dir = brain.curr;
- x += (Math.sin(dir) * spd);
- y -= (Math.cos(dir) * spd);
- }
- }
- }
- class Brain
- {
- FloatList data = new FloatList();
- Float curr = 0.0;
- int index = 0;
- Brain(int size)
- {
- for(int i = 0; i < size; i++)
- {
- data.append(random(0, 1));
- }
- }
- Brain(Brain parent)
- {
- for(float n : parent.data)
- {
- if (random(0, 1) < MUTATION_CHANCE)
- {
- data.append(n * random(MUTATION_MIN, MUTATION_MAX));
- }
- else data.append(n);
- }
- }
- Float next()
- {
- if (index < data.size())
- {
- curr = data.get(index);
- index++;
- }
- else return null;
- return curr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement