La simu multi-agents qui repeint une image, mais en c++ Boilerplate pompé ici : https://github.com/andrew-r-king/sfml-vscode-boilerplate
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.

PullPaintAgent.cpp 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <Agents/Agent.hpp>
  2. #include <Environment/PictureEnvironment.hpp>
  3. PullPaintAgent::PullPaintAgent(PictureEnvironment* iEnvironment, int iDotSize, int iMoveSize) :
  4. RepaintAgent(iEnvironment, iDotSize, iMoveSize, 0)
  5. {
  6. int vWidth = fEnvironment->getWidth();
  7. int vHeight = fEnvironment->getHeight();
  8. fXPos = (((double)rand() / RAND_MAX) * vWidth);
  9. fYPos = (((double)rand() / RAND_MAX) * vHeight);
  10. fColor = sf::Color(fEnvironment->getCellOriginal(fXPos, fYPos));
  11. }
  12. void PullPaintAgent::move()
  13. {
  14. int vNewPosX = -1;
  15. int vNewPosY = -1;
  16. int vMoveIndex = ((((double)rand() / RAND_MAX) * (fMovements.size() - 1)));
  17. vNewPosX = fXPos + fMovements.at(vMoveIndex).at(0);
  18. vNewPosY = fYPos + fMovements.at(vMoveIndex).at(1);
  19. while (vNewPosX < 0 || vNewPosX > fEnvWidth || vNewPosX < 0 || vNewPosY > fEnvHeight)
  20. {
  21. vMoveIndex = ((((double)rand() / RAND_MAX) * (fMovements.size() - 1)));
  22. vNewPosX = fXPos + fMovements.at(vMoveIndex).at(0);
  23. vNewPosY = fYPos + fMovements.at(vMoveIndex).at(1);
  24. }
  25. fXPos = vNewPosX;
  26. fYPos = vNewPosY;
  27. }
  28. void PullPaintAgent::loop()
  29. {
  30. move();
  31. this->paint();
  32. }