Spherical Snake

(kevinalbs.com)

641 points | by subset 6 days ago

71 comments

  • kevinAlbs 1 day ago
    I was pleasantly surprised when a friend texted me after work to say this game was on Hacker News. I hope it brought some small joy to your day. Some comments helped identify some minor tweaks. I do not expect to have time or motivation to make bigger changes soon. Feel free to make GitHub issues.
    • bryantwolf 21 hours ago
      You might find this fun. There this sonic the hedgehog special stage from sonic three that takes place on a sphere. Recently I made a remake of it and they project a 2d grid onto a sphere, but the projection adjusts as you move, so no matter where you go, you never end up at a pole. The poles always stay on your sides.

      The other interesting bit is that you can have an arbitrary map size and just repeat it. The game is 32x32 but it could be whatever.

      https://blue-sphere.fly.dev/play?map=s3-01

      Anyway, great stuff you have here!

    • hirsin 22 hours ago
      I was unsure of the licensing, so happy to take it down if it's not open - but I forked this to test some agent features on GitHub mobile and was happy with it. https://hpsin.github.io/SphericalSnake/ and the PR I single shotted for testing https://github.com/hpsin/SphericalSnake/pull/1

      Thanks for a fun mobile friendly test run!

      • kevinAlbs 21 hours ago
        Nice :) TIL you can use an agent on GitHub mobile. And this reminded me to add an open source license. I added an MIT license.
    • antirez 23 hours ago
      Absolutely great. Seems easy at first then you start realize you need very different strategies when the snake is very long. Thanks :)
    • JumpCrisscross 21 hours ago
      Hypersnake! We need hypersnake! Snake on the surface of a hypersphere [1]! (Cubes can come too.)

      [1] https://mathworld.wolfram.com/Hypersphere.html

    • subset 23 hours ago
      Thanks for writing this game! I came across it after seeing your Checkers written in Rust for WASM game[0], and thought it deserved an HN submission of its own.

      [0] https://github.com/kevinAlbs/Checkers

    • ImJasonH 21 hours ago
      I just want to say I love this idea and execution. Great work, please make more :)
  • bogtog 1 day ago
    The game looks really good, although I think it'd be improved if the sphere was a bit smaller. It feels like it takes too long for the game to become difficult
    • re 1 day ago
      Here's a console command you can run to increase the snake length immediately, and thus the difficulty:

         (() => { let count = 50; const delay = 100; const interval = setInterval(() => { addSnakeNode(); if (--count <= 0) clearInterval(interval); }, delay);})()
      • londons_explore 1 day ago
        Why wrap in a lambda?
        • re 23 hours ago
          Because I learned JS before ECMAScript 6 was widely supported by browsers and haven't written a ton of it targeting modern browsers. You're right that it's unnecessary.
        • tinyhitman 1 day ago
          Could be to allow use of local variables that do not leak into the scope this code is executed in. That's what I use this pattern for.
          • crdrost 1 day ago
            pro tip: no longer necessary

                { let count = 50; const interval = setInterval(() => { addSnakeNode(); if (--count <= 0) clearInterval(interval); }, 100) }
            • londons_explore 13 hours ago
              And polluting the global variable namespace hardly matters when using the console.
    • elicash 1 day ago
      Speed should slightly increase with each new apple
      • Wowfunhappy 23 hours ago
        I strongly disagree, I like that the challenge comes from the snake getting longer as opposed to speed.
    • giarc 1 day ago
      Agree - my millennial brain got bored quickly and it was still very easy.
      • progbits 1 day ago
        Easy up to ~70, interesting between 80-110, very hard around 120-130. I think scores above 200 are pretty sus, there is very little room on the sphere at that point (using the cheat from sibling comment). Anything >400 is definitely made up.
  • wowczarek 1 day ago
    Love the game, it just ramps up pretty slowly.

    Looking at the comments and people trying to verify what the real maximum score is. I wrote a (Cartesian) snake for fun once, that was Pascal and an obscure 8-bit platform, but most fun was the pure mechanics of it; the rest was just boring, completionist details. As dopamine plateaued, I barely just worked out a formula for a curve to spread the maximum snake length across a set number of levels so that it ends at 100% of gameplay area and remains winnable. But maximum score? No idea, I couldn't be arsed to work it out. But I finished the project! https://github.com/wowczarek/dlp-misc/tree/main/spacew0rm

    • umvi 1 day ago
      Yeah, would be nice to have a "start at level 100" button so you can skip to the challenging part
      • Stevvo 21 hours ago
        It starts getting tricky at 50, 100 is the kinda like end, you win.
        • aetherson 21 hours ago
          I got to 77 on my first try and my loss was dumb, I could definitely do better, but I'm like, "It took so long to get to 77."
  • Ecco 1 day ago
    Really cool game, but please please fix the viewport to prevent accidentaly zooming on the page on a mobile device!
    • xp84 1 day ago
      And while you’re at it fix it so you can’t do a text selection of the game area. I’m having both zooming and selection happening and they make it unplayable.
    • kevinAlbs 1 day ago
      I can reproduce a zoom on an iPad Safari when double tapping. Updated with a fix to prevent default double click events. It fixes on my environment.
    • wanderingstan 1 day ago
      Yes. And it’s so easy:

      `<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">`

  • byearthithatius 1 day ago
    Is there a place I can read about taking unique creative approaches to original topics/games/concepts like this? "Thinking Different with Basics". I like this so much but its because it gets at an essence of creativity applied to the obvious I don't know how to learn or search for:(
    • zemo 1 day ago
    • wonger_ 1 day ago
      I watched this GDC talk recently about practical creativity: https://www.youtube.com/watch?v=zyVTxGpEO30

      I like his perspective that creativity = using an existing pattern in a new context.

      You can be more creative by first consuming lots of different patterns in all sorts of contexts (e.g. playing lots of games, and also reading and experiencing lots of topics unrelated to games).

      Then you try all the different permutations of patterns in your mental toolbox. Kinda like how the sibling comment rattled off different what-ifs.

      EDIT oh and oblique strategies might be helpful to come up with variations on an existing theme: https://stoney.sb.org/eno/oblique.html

    • rustystump 1 day ago
      Sadly i dont know if this can be learned persay as it wobbles along the “creativity” line.

      Id say that youd need to have a genuine curiosity along with a “what if” mindset that is hard to teach. The path to these ideas is often a train of what ifs, what if snake was 3d? Then what if it was 3d on a planet? What about a cube?

      You can take the same thought to other games. What if pong was 3d or on a sphere? What if pong supported 100 people playing together? How would that work?

      Often what ifs will be deadends or uninteresting. It is like sales, a volume game. But u got to like the process or you wont get far.

      • vunderba 1 day ago
        Definitely. This is a pretty common approach: take an existing game, break it down into its constituent mechanics, then swap one of them out for a mechanic from an unrelated game. Rinse and repeat.

        Case in point:

        I built a twin-stick version of Snake that requires you to control two snakes simultaneously, called Twins of Caduceus. I even have a custom arcade box with two four-way joysticks so you can control one snake with each hand though you can play it with a regular keyboard. It’s a lot of fun, but you practically need the kind of hands that come built-in with localized neural ganglia to get a high score.

        https://mordenstar.itch.io/the-twins-of-caduceus

      • tuetuopay 1 day ago
        Snake was my very first OpenGL program (well, past a cube). You learn quite a bit about the basics and why one more dimension is not always better.

        Fun times, this takes me back quite a bit. Definitely from the "what if" mindset, I was seeking something complex enough for learning and simple enough to actually finish. I must have been 15 or 16 at the time.

      • sumibi 1 day ago
        I made a multiplayer 3D pong in a cube years ago: https://cubeball.araxor.com/

        It was a VR game for google cardboard. It worked pretty well at the time.

        Sadly, it's not available anymore in the google play store. Maybe one day I'll port it to the web and open source it if I can find the time...

      • ocrow 1 day ago
        Yes! Curiosity is the way to open these doors. The first step is to keep a log of your thoughts. Anything that pops up, write it in your ideas book. Having ideas isn't an all or nothing. It's a practice. Get into the practice of writing down your small ideas and you will develop the ideas muscle.
  • Aardwolf 1 day ago
    Obviously 666, 1337, 9223372036854775807 etc... in the leaderboard are fake, so if I had to try to figure out what the highest legit score is, I'd guess milkman with 227. Unless someone was clever enough to make an inconspicuous fake number :)
    • byearthithatius 1 day ago
      kinda like that hacker news hacked it pretty quick haha
  • neanderzander 1 day ago
    Cool. It would also be interesting to see a hyperbolic snake.

    Reminds me of this video, where the dev compares spherical and hyperbolical geometries (albeit a dimension higher):

    https://www.youtube.com/watch?v=yY9GAyJtuJ0

  • nomel 1 day ago
    Very neat. Would be cool to see in 3d (cross eye option [1]!? :D)

    I think an accelerated initial growth is needed. Maybe start with a growth of 5 and have it decrease so it's a 1 at around 50. It takes a bit too long to get to something non trivial, especially since it seems there is a bias to put dots on the opposite side, causing the first 5 minutes to be mostly going in a straight circumnavigations.

    [1] https://www.kula3d.com/how-to-use-the-cross-eyed-method

  • p1mrx 22 hours ago
    Reminds me of Uncle Worm, among the better TI-83+ games. It's 2D, but the snake is curvy:

    https://www.ticalc.org/archives/files/fileinfo/96/9683.html

  • jp57 1 day ago
    When the game ends, the banner obscures the exact spot where the snake ran into itself, which is the thing you most want to see at the end.
  • rezmason 1 day ago
  • mxfh 1 day ago
    Beyond 100 it becomes a game of avoiding the The Loxodrome of Terror by spiralling into an unescapeable trap.

    Easiest pattern to get some more length is to do some sort of spherical sinusoid by following the meridian and then some optional final fill loop for the poles.

    Overall it feels a bit slow to get to the part where it becomes tricky

    For optimal fill you might end up with something like a tennis ball/baseball pattern instead.

    see fig 5 here

    https://arxiv.org/abs/1005.4609

  • omoikane 1 day ago
    I wish there is a mode where the snake go toward where my mouse cursor is (similar to agar.io), as opposed to having the controls turn the snake. So in update function where we have the "direction-=.08" and "direction+=.08" bits, "direction" would be assigned a value either due to the pressed state of the 4 arrow keys, or some arctangent of mouse coordinates:

    https://github.com/kevinAlbs/SphericalSnake/blob/b907738476d...

    Alternatively, keep the current controls, but rotate the whole world to match the snake's direction of movement. Current mix of non-rotating world with rotating controls makes the game more difficult, most snake variants I have played opted for non-rotating world with non-rotating controls (e.g. press right to go right, independent of current snake heading, as opposed to turning clockwise).

  • tptacek 1 day ago
    It should start at score 50, which is when the game actually gets interesting.
  • greenwallnorway 1 day ago
    People are having fun submitting their fake scores to the leaderboard: https://kevinalbs.com/spherical_snake/leaderboard/

    I see a person or two I know in there haha

    • kevinAlbs 1 day ago
      Hah. I am unsurprised. I disabled posting to the leaderboard and removed scores that seemed fake or profane.
  • kristopolous 22 hours ago
    Control by phone sensor (https://developer.mozilla.org/en-US/docs/Web/API/Orientation...) would be nuts.

    tilting the phone as the control...

    Here's a demo of the control since mdn didn't have one:

    https://9ol.es/pitch.html

    Also a more practical thing while we're doing this is a thumb drag control, that'd make this a hit.

    Like flappy bird level.

  • amichail 1 day ago
    For a new kind of snake game, check out PluriSnake.

    PluriSnake is a snake-based color matching daily puzzle game.

    Color matching is used in two ways: (1) matching circles creates snakes, and (2) matching a snake’s color with the squares beneath it destroys them.

    Snakes, but not individual circles, can be moved by snaking to squares of matching color, as long as their paths are not blocked by other snakes.

    The goal is to score as highly as you can. Destroying all the squares is not required for your score to count.

    Of course, there is more to it than that as you will see.

    Try it out:

    https://testflight.apple.com/join/mJXdJavG

    Any feedback would be appreciated. Have fun!

    • shermantanktop 1 day ago
      I tried it, but really shouldn't have as I am colorblind and so matches were quite difficult. Some color games have an option for a colorblind-safe palette, maybe consider that?
      • amichail 23 hours ago
        The iPhone has built-in color filters. Have you tried using one of them?
        • shermantanktop 20 hours ago
          Sure, I have them turned on for most of my devices.

          Colorblindness isn’t exactly fixed by filters, for a few reasons. They help for some colors, but not others. And each person’s experience is different based on their specific deficiencies.

          Anyway, this is a color-based game and that’s probably what it needs to be (unless size or shape could vary enough to substitute), so I’m not in the target audience.

  • bardackx 1 day ago
    pretty boring start, quite fun once the snake is the size of the sphere circumference
  • caterama 21 hours ago
    This reminds me of Snake Galaxy. I'm so sad it's not available anymore, it was an adorable spherical snake game on early iPhone circa 2010 era. I really miss the little Paris planet.

    https://toucharcade.com/2009/04/24/snakegalaxy-puts-a-new-sp...

  • jm_l 1 day ago
    I noticed that the dots on the surface of the sphere are evenly spaced out close to the equator, but because there is a consistent number of dots in each ring, they are very close together when you reach the poles.

    One way to get dots evenly spread out over the surface of a sphere is to use a phyllotaxis spiral pattern.

    https://demonstrations.wolfram.com/PhyllotaxisSpiralPatternO...

    • jmpeax 1 day ago
      I like the surface dots like it is. It gives me two points of reference at the poles, and adds intuition for how long it takes to go around the sphere.
    • cluckindan 1 day ago
      Those examples don’t seem to be evenly spaced at the poles.
  • bArray 1 day ago
    Quite a good implementation, got to 62 and was playing a "space filling curve" strategy to bleed off some of the length. Looking at the leader-board I suspect some people are just sending off their own custom submissions [1].

    [1] https://kevinalbs.com/spherical_snake/leaderboard/

    • tgtweak 1 day ago
      There is a maximum theoretical length and the sphere actually allows you to wrap around it, Rod of Asclepius style, until you get there - picking up an apple on each cycle. I suspect it's not more than a few hundred segments though so those ~600 submissions are probably someone gaming the submission with a forged score.
      • fusslo 1 day ago
        now there's 9999 and 1337 for scores. Imma guess there's not a lot of security on the scoreboard of a fun little game
    • H3X_K1TT3N 1 day ago
      I cheated (for science)
  • fuzzythinker 16 hours ago
    The LB should be clickable to be able to watch the last n-secs of their game.

    Would love to be able to start with n-length via url params (should be disqualify from LB if start w/ n-length.

  • black_knight 1 day ago
    The original was toroidal!
  • nicoboo 1 day ago
    Good game concept and implementation. Run smoothly even on phone.

    Extend the capability to include timer, boost of speed and even levels with enemies.. I would love to also try having a kind of multi level support for moves.. Like 3 layers to explore the 3d navigation with layers of ground for moves.

    Awesome experiments that could easily become viral! :)

  • darkvertex 1 day ago
    Fun take! Would love to just drag my finger on the sphere to affect the direction instead of the two big buttons.
  • MitchSchwartz 21 hours ago
    94! it really doesn't get fun until around 35-40, would be fun to start there.
  • weinzierl 20 hours ago
    What is the strategy after it gets longer than a great circle? Wiggle with constant frequency to "fold" it? Constantly move in one direction to form a spiral? Something completely different?
  • danielfalbo 10 hours ago
    In the background of my head while playing: Daft Punk - Around the world
  • baq 1 day ago
    For a multiplayer spherical tron-like experience check out Astro Bears, it’s a great little party game!
  • JBits 22 hours ago
    Really fun! Developing my intuition for a sphere as I played was a nice experience. As other commenters have mentioned, the game ramps up a bit too slowly. Perhaps it would worth adding more than one food item.
  • thelightherder 21 hours ago
    The snake movement reminds me of the video feedback tail behavior here: https://vimeo.com/487717654
  • matoseb 1 day ago
    Reminds me of a old iPhone game "Snake Galaxy" with the same principle https://www.youtube.com/watch?v=8LEIC_BOhgE
  • throwawayk7h 23 hours ago
    Cute but this game does not become interesting until score 50 or more.
  • g4zj 1 day ago
    This is really fun! Nice job.

    Small issue: I accidentally right-clicked one of the arrow buttons and it stuck in the pressed position, causing the snake to curl into itself and end my game before I could left-click out of the context menu.

    • kevinAlbs 1 day ago
      Thanks for the heads up. I added a (hopeful) fix to disable the right-click context menu on the buttons.
  • therobots927 1 day ago
    Very cool but on iOS safari, if I click one of the buttons twice too quickly it zooms in and I can’t see the full screen or the other button. Hard to zoom back out at least on my phone.
    • kevinAlbs 1 day ago
      Updated with a fix to prevent default double click events. It fixes on my iPad environment.
  • tantalor 1 day ago
    Lovely. Would love if it canvas was bigger on desktop. Zoomed in 3x is much better but pix-elated. The first 50 or so levels were very easy. Started getting difficult around 90+.
    • H3X_K1TT3N 1 day ago
      This should work: function scale(multi) { cnv = document.getElementsByTagName('canvas')[0]; cnv.width = 358 * multi; cnv.height = 360 * multi; window.focalLength = 200 * multi; window.init(); } scale(4);
      • tantalor 21 hours ago
        Very nice.

        Paired that with cnv.requestFullscreen() for a much better experience.

        Then I started noticing the dropped frames every few seconds due to GC pauses.

        > Major GC

        > Duration 43.52 ms (self 26 μs)

        > Collected 53.1 MB

        Ouch!

  • plehoux 1 day ago
    I love this, congratulations on the clever design and concept.
  • dherls 1 day ago
    Really impressive that it's implemented in < 400 lines of Javascript code and runs so smoothly in my phone's browser (Firefox on Android)
  • pasquinelli 22 hours ago
    it takes forever for it to get tricky. if you turn 4 directions it would have the same tension as the original. you could keep the same controls with obstacles. a maze could be fun-- kind of _irritating stick_, but _snake_, which, naturally, you'd call _stick snake_.
  • shomp 1 day ago
    Just need to reach MAX_SAFE_INT and I too can be on the leaderboard... And I thought 78 was pretty good
  • amadeoeoeo 1 day ago
    Love it! Would like to have the option to make the arrow buttons closer to play with one hand. Thank you!
  • JasonADrury 1 day ago
    Definitely a good concept, but the controls feel super janky. The early game is also a bit too slow.
  • pryelluw 1 day ago
    Maybe add a skin around the sphere to make it look like the earth. Then the targets become places.
  • tigereyeTO 1 day ago
    So, Astro Bears without the bears?
  • JackWot 23 hours ago
    I thought I had the highest score, until I checked the leaderboard.
    • JackWot 23 hours ago
      Perhaps i should've taken the easy way and run a command in the console.
      • steve_adams_86 22 hours ago
        The way I did it was to edit my high score in local storage, lose a game, then submit my 'high score'. I wonder how others did it.
  • EricRiese 1 day ago
    I feel like this legitimately improves my intuition for Riemannian geometry.
  • arthurcolle 1 day ago
    this could legit be pre-installed on a nokia phone in some alternate potential future!

    great work

  • rationalist 1 day ago
    Tried submitting my score, but it said the captcha score was too low?
  • willvk 23 hours ago
    Great to see someone thinking outside the box.
  • flenserboy 1 day ago
    reminds me of some of the old Beagle Brothers one-liner games. it's easy to forget that something this simple is still fun!
  • danielheath 1 day ago
    A fun alternative to "Snake on a Plane"
  • mattfrommars 1 day ago
    Stuff you guys come up with are so clever
  • nacozarina 23 hours ago
    this posting was a $2B+ hit to our GDP
  • olivierestsage 1 day ago
    Extremely fun and satisfying, nice job
  • toroszo 1 day ago
    best snake experience since 3210
  • fatesblind 21 hours ago
    props to milkman, high score.
  • lovegrenoble 1 day ago
    Simple and fun!
  • gaigalas 1 day ago
    I clicked expecting a philosophical contrast to the idea of spherical cows.

    Nice game though!

  • aaroninsf 1 day ago
    Opportunity for v1.1:

    as things get more difficult it becomes increasingly important to control space-use and the resultant territory occupied by the snek; at a certain point I switched priorities from "get the target as quickly as possible" to "maintain a regular controlled movement"

    Something that leapt out at this point was, there is no tension or penalty for doing so.

    Opportunity to increase game challenge/skill requirement: introduce an incentive to get the target as quickly as possible.

    One interesting way to do this would be to make the ball get bigger over time, with bigger balls adding more segments to the snek.

    I like this sort of approach because it leaves supports two distinct play styles/cases:

    - some players would see this as incentive to get to the target ASAP, to avoid growing more than necessary, thus prolonging their survival at the same difficulty

    - others would see an incentive to let avoid the target, especially if it grows non-linearly, so as to jump to increased difficulty ASAP

  • FpUser 1 day ago
    This thing is addictive. The last time I played snake was on Apple-II computer hooked up to some scientific equipment back in USSR
  • rustystump 1 day ago
    Nit: when on mobile pressing and holding highlights the elements as if they were text.

    You can fix that with a simple css prop.

    Very cool btw

  • RIMR 1 day ago
    This version feels easier until suddenly it very much isn't!
  • nickandbro 1 day ago
    Love it
  • dwa3592 1 day ago
    very nice.

    maybe add a sound effect :)

  • chrisallick 1 day ago
    thats fun!
  • maximgeorge 1 day ago
    [dead]
  • maximgeorge 1 day ago
    [dead]
  • gapeslape 1 day ago
    This reminds me of an idea I had a few days ago. Imagine a world where speed of light:

    - is small compared to human level speeds (say 2km/h / 1.25mph)

    - things could move faster than the speed of light.

    I really wonder how it would feel to explore this world visually. For example:

    - an object in front of me accelerates from 0 to above the speed of light

    - I'm in a car, looking backwards, going from 0 to above the speed of light

    I guess one could easily simulate that in a virtual world, no?

    • naftalibeder 1 day ago
      • gapeslape 1 day ago
        This is awesome, thanks!

        I wonder if you could make it multiplayer and then get the effects of time dilation?

        In my imagined world I also wanted to explore speeds above the speed of light. You could just stick to galilean transformation, take a very low speed of light and go from there. The world you get should be pretty bizarre.

        • prolyxis 1 day ago
          I suppose the problem in multiplayer is that everyone has the same wall clock time, so you couldn't easily have consistent time dilation and related effects such as the twin paradox.