|
| 1 | +{ |
| 2 | + "title": "Falling Sand", |
| 3 | + "videoNumber": "180", |
| 4 | + "description": "It's Genuary 2024! Watch as I attempt to build a falling sand simulation in p5.js using a grid of pixels and simple rules.", |
| 5 | + "videoId": "L4u7Zy_b868", |
| 6 | + "nebulaSlug": "codingtrain-coding-challenge-180-falling-sand", |
| 7 | + "date": "2024-01-21", |
| 8 | + "languages": ["p5.js", "JavaScript"], |
| 9 | + "topics": ["pixels", "simulation", "fluid simulation", "sandpile model", "generative art"], |
| 10 | + "canContribute": true, |
| 11 | + "relatedChallenges": ["179-wolfram-ca", "85-the-game-of-life", "107-sandpiles", "132-fluid-simulation", "102-2d-water-ripple"], |
| 12 | + "timestamps": [ |
| 13 | + { "time": "0:00", "title": "Introduction and references" }, |
| 14 | + { "time": "2:10", "title": "About cellular automata" }, |
| 15 | + { "time": "2:47", "title": "The rules for a sand simulation" }, |
| 16 | + { "time": "3:36", "title": "Code! Creating a grid" }, |
| 17 | + { "time": "5:04", "title": "Animating a falling grain of sand" }, |
| 18 | + { "time": "7:32", "title": "About matrix columns and rows" }, |
| 19 | + { "time": "8:04", "title": "Let's account for the bottom edge" }, |
| 20 | + { "time": "9:09", "title": "Adding mouse interaction" }, |
| 21 | + { "time": "9:42", "title": "More sophisticated sand behavior" }, |
| 22 | + { "time": "10:43", "title": "Oops! Some errors to fix" }, |
| 23 | + { "time": "11:30", "title": "Adding randomness" }, |
| 24 | + { "time": "12:26", "title": "Handling left and right edges" }, |
| 25 | + { "time": "14:00", "title": "Checking if mouse is within the canvas" }, |
| 26 | + { "time": "14:40", "title": "Making it more efficient" }, |
| 27 | + { "time": "14:56", "title": "More space and more sand" }, |
| 28 | + { "time": "16:55", "title": "Adding some color!" }, |
| 29 | + { "time": "18:54", "title": "Challenge complete! Let's do some refactoring" }, |
| 30 | + { "time": "20:58", "title": "How could we add gravity?" }, |
| 31 | + { "time": "21:57", "title": "Wrapping up" } |
| 32 | + ], |
| 33 | + "codeExamples": [ |
| 34 | + { |
| 35 | + "title": "Falling Sand Simulation", |
| 36 | + "description": "Implementation of a Falling Sand Simulation", |
| 37 | + "image": "p5-example.jpg", |
| 38 | + "urls": { |
| 39 | + "p5": "https://editor.p5js.org/codingtrain/sketches/AoH40T6fV" |
| 40 | + } |
| 41 | + }, |
| 42 | + { |
| 43 | + "title": "Falling Sand with Gravity", |
| 44 | + "description": "Same Simulation but with Gravitational Acceleration", |
| 45 | + "image": "p5-example-gravity.jpg", |
| 46 | + "urls": { |
| 47 | + "p5": "https://editor.p5js.org/codingtrain/sketches/Ij5i7a3w4" |
| 48 | + } |
| 49 | + } |
| 50 | + ], |
| 51 | + "groupLinks": [ |
| 52 | + { |
| 53 | + "title": "References", |
| 54 | + "links": [ |
| 55 | + { |
| 56 | + "icon": "🔗", |
| 57 | + "title": "Genuary", |
| 58 | + "url": "https://genuary.art/", |
| 59 | + "description": "A month of generative art in January" |
| 60 | + }, |
| 61 | + { |
| 62 | + "icon": "🔗", |
| 63 | + "title": "Sandspiel by Max Bittker", |
| 64 | + "url": "https://sandspiel.club/", |
| 65 | + "description": "A world of sand, water, fire and smoke made out of pixels" |
| 66 | + }, |
| 67 | + { |
| 68 | + "icon": "🔗", |
| 69 | + "title": "Making a falling sand simulator by Jason McGhee", |
| 70 | + "url": "https://jason.today/falling-sand", |
| 71 | + "description": "Tutorial about making the same kind of simulation with 5p.js" |
| 72 | + }, |
| 73 | + { |
| 74 | + "icon": "📕", |
| 75 | + "title": "The Nature of Code by Daniel Shiffman", |
| 76 | + "url": "https://natureofcode.com/", |
| 77 | + "description": "A book about simulating the natural world with physics simulations" |
| 78 | + } |
| 79 | + ] |
| 80 | + }, |
| 81 | + { |
| 82 | + "title": "Videos", |
| 83 | + "links": [ |
| 84 | + { |
| 85 | + "icon": "🎥", |
| 86 | + "title": "Noita 1.0 Launch Trailer by Nolla Games", |
| 87 | + "url": "https://www.youtube.com/watch?v=0cDkmQ0F0Jw", |
| 88 | + "description": "A Game built on top of the Falling Everything engine" |
| 89 | + }, |
| 90 | + { |
| 91 | + "icon": "🚂", |
| 92 | + "title": "Wolfram CA", |
| 93 | + "url": "/challenges/179-wolfram-ca", |
| 94 | + "description": "My previous coding challenge about cellular automata." |
| 95 | + }, |
| 96 | + { |
| 97 | + "icon": "🚂", |
| 98 | + "title": "The Game of Life", |
| 99 | + "url": "/challenges/85-the-game-of-life", |
| 100 | + "description": "My coding challenge about John Conway's Game of Life." |
| 101 | + } |
| 102 | + ] |
| 103 | + } |
| 104 | + ], |
| 105 | + "credits": [ |
| 106 | + { |
| 107 | + "title": "Editing", |
| 108 | + "name": "Mathieu Blanchette" |
| 109 | + }, |
| 110 | + { |
| 111 | + "title": "Animations", |
| 112 | + "name": "Jason Heglund" |
| 113 | + } |
| 114 | + ] |
| 115 | +} |
0 commit comments