You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
2.0 KiB

  1. package de.hsfulda.pmuw.oop;
  2. import java.util.ArrayList;
  3. import java.util.Calendar;
  4. import java.util.Collection;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. public class CgolBoardOop {
  8. private final Collection<CgolCell> activeCells ;
  9. private final CellCreator cellCreator;
  10. private boolean isOptimized;
  11. CgolBoardOop(CellCreator cellCreator, boolean isOptimized) {
  12. this.cellCreator = cellCreator;
  13. this.isOptimized = isOptimized;
  14. activeCells = isOptimized? new HashSet<>():new ArrayList<>();
  15. }
  16. public void initialize() {
  17. cellCreator.createCells(activeCells, isOptimized);
  18. }
  19. public void nextGen() {
  20. List<CgolCell> currentGeneration = new ArrayList<>(activeCells);
  21. if (isOptimized)
  22. activeCells.clear();
  23. currentGeneration.stream().parallel().forEach(CgolCell::calculateNextGeneration);
  24. currentGeneration.stream().parallel().forEach(CgolCell::switchState);
  25. }
  26. private long countAliveCells() {
  27. return activeCells.stream().filter(CgolCell::isAlive).count();
  28. }
  29. public static void main(String[] args) {
  30. boolean isOptimized = true;
  31. startGame(!isOptimized);
  32. startGame(isOptimized);
  33. }
  34. private static void startGame(boolean isOptimized) {
  35. long start = Calendar.getInstance().getTimeInMillis();
  36. CgolBoardOop cgolBoard = new CgolBoardOop(new CellCreator(), isOptimized);
  37. cgolBoard.initialize();
  38. long end = Calendar.getInstance().getTimeInMillis();
  39. System.out.println(String.format("initializing took: %sms", end - start));
  40. start = Calendar.getInstance().getTimeInMillis();
  41. int iterations = 1000;
  42. for (int i = 0; i < iterations; i++) {
  43. cgolBoard.nextGen();
  44. if (0 == i % (isOptimized? 100:100))
  45. System.out.println(String.format("iteration %6d cells alife: %7s , cells active %7s",i,cgolBoard.countAliveCells(),cgolBoard.activeCells.size()));
  46. }
  47. end = Calendar.getInstance().getTimeInMillis();
  48. System.out.println(
  49. String.format("time spend for %d iterations: %sms, optimized: %s\n\n", iterations, end - start, isOptimized));
  50. }
  51. }