🎮 Retro Arcade Hub 🎮

Game Preview

Game Preview

High Scores

User Profiles

👾 Username: PixelHero

👾 Level: 42

👾 Favorites: Space Quest, Retro Kart

Retro Arcade Hub
🎮 Retro Arcade Hub 🎮

Game Preview

Game Preview

High Scores

User Profiles

👾 Username: PixelHero

👾 Level: 42

👾 Favorites: Space Quest, Retro Kart

// Generate "infinite" random mountains // Use a small buffer that keeps the visible portion of mountains // the segments that leave the screen are remove and added at the end const speed = 3; let segments = generateSegments(15); function loop() { clear(); drawSegments(segments); updateSegments(segments); } function updateSegments(segments) { if(mouseIsPressed) { text(segments.length, 10, 10); return; } let noSegments = segments.length; for(let i = noSegments - 1; i >= 0; i--) { let curr = segments[i]; curr.start.x -= speed; curr.end.x -= speed; if (curr.end.x < 0) { let lastSegment = segments[noSegments - 1]; let newSegment = generateSegment(lastSegment); segments.push(newSegment); segments.splice(i, 1); } } } function drawSegments(segments) { for(let i = 0; i < segments.length; i++) { let curr = segments[i]; if (segmentVisible(curr)) line(curr.start.x, curr.start.y, curr.end.x, curr.end.y); } } function segmentVisible(segment) { let pointVisible = (p) => p.x >= 0 && p.x < width; return pointVisible(segment.start) || pointVisible(segment.end); } function generateSegments(n) { let segments = []; let lastSegment; for(let i = 0; i < n; i++) { lastSegment = generateSegment(lastSegment); segments.push(lastSegment); } return segments; } function generateSegment(lastSegment) { // New segment points let start = lastSegment ? {x : lastSegment.end.x, y : lastSegment.end.y} : generatePoint(); let end = generatePoint(start); return {start, end}; } function generatePoint(lastPoint) { // New point coordinates let x = 0; let y = floor(random(height / 2, height)); if (lastPoint) x = lastPoint.x + floor(random(50, 100)); return {x, y}; } // Generate random mountains with landing ramp // You can specify if the scrolling stops if ramp is visible // or continues and new ramps are added at the end const speed = 3; // Scrolling speed const stopOnRampVisible = false; // Stop scrolling if the ramp is visible let segments = generateSegments(15); let rampVisible = false; function loop() { clear(); drawSegments(segments); updateSegments(segments); } function updateSegments(segments) { if (stopOnRampVisible && rampVisible) return; let noSegments = segments.length; for(let i = noSegments - 1; i >= 0; i--) { let curr = segments[i]; if (curr.ramp && curr.start.x >= 0 && curr.start.x < width / 2) rampVisible = true; curr.start.x -= speed; curr.end.x -= speed; if (curr.end.x < 0) { let lastSegment = segments[noSegments - 1]; let newSegment = generateSegment(lastSegment); // Make sure that the new ramp is also flat if (curr.ramp) { newSegment.ramp = true; newSegment.end.y = newSegment.start.y; } segments.push(newSegment); segments.splice(i, 1); } } } function drawSegments(segments) { for(let i = 0; i < segments.length; i++) { let curr = segments[i]; if (segmentVisible(curr)) { stroke(curr.ramp ? "red" : "black"); line(curr.start.x, curr.start.y, curr.end.x, curr.end.y); } } } function segmentVisible(segment) { let pointVisible = (p) => p.x >= 0 && p.x < width; return pointVisible(segment.start) || pointVisible(segment.end); } function generateSegments(n) { let segments = []; let lastSegment; for(let i = 0; i < n; i++) { lastSegment = generateSegment(lastSegment); segments.push(lastSegment); } // Add a flat landing ramp at the end let ramp = generateSegment(lastSegment); ramp.end.y = ramp.start.y; segments.push(ramp); ramp.ramp = true; return segments; } function generateSegment(lastSegment) { // New segment points let start = lastSegment ? {x : lastSegment.end.x, y : lastSegment.end.y} : generatePoint(); let end = generatePoint(start); return {start, end}; } function generatePoint(lastPoint) { // New point coordinates let x = 0; let y = floor(random(height / 2, height)); if (lastPoint) x = lastPoint.x + floor(random(50, 100)); return {x, y}; }