fork download
  1. #include <SFML/Graphics.hpp>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <map>
  5.  
  6. int main()
  7. {
  8. std::srand(std::time(0));
  9.  
  10. const int width = 512;
  11. const int height = 256;
  12.  
  13. sf::Image image ;
  14. image.create(width, height, sf::Color::White) ;
  15.  
  16. std::map<int, int> interiorId2offset;
  17.  
  18. for (int i = 0; i < width; ++ i) {
  19. for (int j = 0; j < height; ++ j) {
  20.  
  21. int val = 0;
  22. int offset = 0;
  23.  
  24. if (j % 128 < 64)
  25. offset = 40;
  26.  
  27. bool one = ((i + offset) % 128 < 2 || (i + offset) % 128 > 126);
  28. bool two = ( j % 64 < 2 || j % 64 > 62);
  29.  
  30. bool nearOne = (i % 128 < 8 || i % 128 > 120);
  31. bool nearTwo = (j % 64 < 8 || j % 64 > 56);
  32.  
  33. if (one && !nearTwo)
  34. val = 225;
  35.  
  36. if (two && !nearOne)
  37. val = 225;
  38.  
  39. bool interior = !one && !two;
  40.  
  41. if (interior) {
  42.  
  43. int x = (i + offset) / 128;
  44. int y = j / 64;
  45.  
  46. if (x >= width / 128) x = 0; // in order to be tileable
  47.  
  48. int interiorOffset = interiorId2offset[x + 100 * y];
  49.  
  50. if (interiorOffset == 0) {
  51.  
  52. interiorOffset = std::rand() % 3 * 30 + 1;
  53. interiorId2offset[x + 100 * y] = interiorOffset;
  54. }
  55.  
  56. val = ((i + offset) % 128 + j % 64 + interiorOffset) % 256;
  57.  
  58. if (val < 25) val = 25;
  59. if (val > 175) val = 175;
  60. }
  61.  
  62. image.setPixel(i, j, sf::Color(val, val, val));
  63. }
  64. }
  65.  
  66. sf::Texture t ;
  67. t.loadFromImage(image) ;
  68. sf::Sprite sprite(t);
  69.  
  70. sf::RenderWindow window(sf::VideoMode(width * 2, height * 2, 32), "Procedural Textures!");
  71.  
  72. window.setVerticalSyncEnabled(true) ;
  73.  
  74. bool Running = true;
  75.  
  76. while (Running)
  77. {
  78. sf::Event Event;
  79. while (window.pollEvent(Event))
  80. {
  81. if (Event.type == sf::Event::Closed)
  82. Running = false;
  83.  
  84. if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::Escape))
  85. Running = false;
  86. }
  87.  
  88. window.clear();
  89.  
  90. window.draw(sprite);
  91. sprite.move(width, 0);
  92. window.draw(sprite);
  93. sprite.move(0, height);
  94. window.draw(sprite);
  95. sprite.move(- width, 0);
  96. window.draw(sprite);
  97. sprite.move(0, - height);
  98.  
  99. window.display();
  100. }
  101. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty