Nice! IMO, it ought to be significantly harder. I was able to survive for 45 seconds on my first try--that's long enough that I started getting bored, and I don't really want to try again because it would take at least 45 seconds to beat my previous score.
By comparison, consider how long a typical Flappy Bird game lasts, particularly on your first try--probably less than 10 seconds at most! That makes you want to try again.
For some comparison of difficulty, there's an old game called Squares which is very similar to yours. It does a good job of ramping the difficulty up pretty fast, but it allows the game have fun short gameplay loops because of the extra gameplay mechanics (ie, you are not just moving but collecting squares too).
Have difficulty settings. Default is "easy/moderate" so that people get a sense of it. For people playing twice or as people get more experienced and want a challenge, they can choose a more difficult setting.
Have leaderboards for different difficulty settings to encourage exploration of different settings.
Tbf my experience was the opposite. But sure if I'm just terrible or if it's harder on a phone, but my first tries were sub 20s and my highest was 45 before giving up xD
This is a great use case for using an algorithmic difficulty ramp where it can really dial in that curve to solve for getting people to play longer over multiple sessions.
> There must be some sweet spot there, since if it lasts too little
Absolutely, and therein lies the essence of game design, right?
For a simple game like this, I'd say 8-10 seconds is a good time to shoot for, for the player's first session. It'll naturally get longer as the player gets better. This makes every moment exciting--just a few seconds longer and I can beat my last score. But yes, this is an art not a science.
I believe our current leader with 4.2424242424242426e+27s may be cheating. (About 134 quintillion years, which is roughly 10 billion times longer than the current age of the universe)
I really liked the display showing me climb the leaderboard in realtime. I found it particularly motivating, albeit a bit distracting for a game where I need to keep my eyes elsewhere :)
Very well done! This hearkens back to Asteroids, but it feels very novel.
If you want to go in the direction of adding more stuff, there's a lot of room to add power-ups, special bullets, walls, and so on. But this simple game is quite elegant as it is and doesn't really need any of that.
Lovely stuff. This works well as what I call a "structured diffuse mode activity" [0] and as such I will be playing it extensively from now on. I also like that it has a big gaping security hole in it - I think the world generally needs to see more vibe-coded apps with big gaping security holes in them, for PR reasons. (This is not a jab at OP btw! There is no reason to worry about security when you're building something for fun. Flash was famous for this as well.)
Completely agree with you. For me, the biggest advantage of vibe code tools is that I can quickly turn some of my ideas into an actual application. Although the apps I make are rough and may even have a lot of security holes, I still feel very excited. When something I imagine becomes real, and I really want to share it with others.
hook.js:608 cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation
overrideMethod @ hook.js:608Understand this warning
(index):1473 Array(0)
dodge.trickle.host/:1543 Access to fetch at 'https://app.trickle.so/proto/api/subs/features/5?userId=usr_094760a6d8000001' from origin 'https://dodge.trickle.host' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.Understand this error
app.trickle.so/proto/api/subs/features/5?userId=usr_094760a6d8000001:1 Failed to load resource: net::ERR_FAILED
(index):1402 Uncaught (in promise) TypeError: Failed to fetch
at (index):1402:3
at (index):1416:3Understand this error
hook.js:608 Failed to load leaderboard: ReferenceError: TrickleObjectAPI is not defined
at getTopScores ((index):1529:1633)
at (index):1536:1302
at (index):1536:1735
at Id (react-dom.production.min.js:165:137)
at Xb (react-dom.production.min.js:200:284)
at react-dom.production.min.js:197:106
at S (react.production.min.js:17:25)
at MessagePort.U (react.production.min.js:21:229)
overrideMethod @ hook.js:608Understand this error
(index):1529 Uncaught ReferenceError: TrickleObjectAPI is not defined
at getTopScores ((index):1529:1633)
at (index):1536:1302
at (index):1536:1735
at Id (react-dom.production.min.js:165:137)
at Xb (react-dom.production.min.js:200:284)
at react-dom.production.min.js:197:106
at S (react.production.min.js:17:25)
at MessagePort.U (react.production.min.js:21:229)
Nice! This gives me a few ideas to make it more interesting.
- Give the bullets gravity relative to each other. Now the particles can change direction very abruptly.
- Change the bullet pattern to use live positioning of real satellites for the data. Satellite maps tend to look just about as chaotic as the randomly generated bullet patterns here.
> Give the bullets gravity relative to each other. Now the particles can change direction very abruptly.
It might be cool to have the red bullets stay as they are, but every so often have a larger, slow-moving "heavy" bullet that's a different colour and has gravity. And is maybe gently homing as well.
Playing on Firefox Android. Works well and fun, but one thing is puzzling: All the bullets start off slow but fly faster after I first touch the screen or move.
Opus 4.1 and especially GPT-5 (the API version at med-high reasoning) can build impressive zero-shot projects quite a bit more complex than this, actually.
The Top 81% calculation in the game is not as good as it may sound. Top 100% means you are at the bottom. You can confirm this by just losing immediately, which will place you in the Top 9X%.
By comparison, consider how long a typical Flappy Bird game lasts, particularly on your first try--probably less than 10 seconds at most! That makes you want to try again.
reply