public void turn() {
		decay();
		// tell all of the agents to move...
		Point[] moves = new Point[Lagents.length];
		List<Thread> threads = new ArrayList<>();
		for (int i = 0; i < Lagents.length; ++i) {
			// get a desired move (for alive agents only)
			AgentMoveSelectionThread runnable = new AgentMoveSelectionThread(moves ,i ,aStats[i], Lagents[i]);
			Thread thread = new Thread(runnable);
			threads.add(thread);
			thread.start();
		}

		for (Thread thread : threads) {
			try {
				thread.join();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int i = 0; i < aStats.length; i++) {
			if (!aStats[i].alive)
				continue;
			removeAgentLocation(i);
			aStats[i].x = moves[i].x;
			aStats[i].y = moves[i].y;
		}
		for (int i = 0; i < aStats.length; i++)
			if (!available(moves[i]) && aStats[i].alive) {
				lose(i);
				moves[i] = null;
			}
		sameSquareCheck(moves);
		for (int i = 0; i < Lagents.length; i++) {
			Astats a = aStats[i];
			if (a.alive) {
				reward(i);
			}
		}
		turns++;

	}