points by terabytest 12 years ago

Hey, author here! I'm pretty overwhelmed that this made it to the top of HN without me even thinking of posting it here :)

I made this game as a fun weekend project, inspired by another game called 1024 (https://itunes.apple.com/us/app/1024!/id823499224) and a spinoff called 2048 (http://saming.fr/p/2048/). I did mine to add animations to the latter, which was a bit hard to play without them.

I discovered Threes only today, and I had no idea it looked so similar. I searched a bit and it appears as if 1024 is also inspired by Threes, so my game is probably the last of a long chain of clones :P

The code is also open-source. You can find it here: https://github.com/gabrielecirulli/2048

Feel free to ask me anything, and thanks to everyone for the attention! :)

By the way, my highscore is somewhere around 6000. Admittedly, I'm quite bad at playing my own game :P

EDIT: Make sure not to get addicted!

EDIT 2: The game now has swipe gestures and vim keys support (added by @rayhaanj)!

phillmv 12 years ago

Holy shit I just lost like 45 minutes to this.

  • wiredfool 12 years ago

    Evil evil game.

    • wiredfool 12 years ago

      And to quantify the evilness -- 1024 and exactly 12000 points.

      • wiredfool 12 years ago

        Ha. 2048 and 20000+. Now I can put it in my /etc/hosts.

  • terabytest 12 years ago

    I've been playing this all day today. I basically created my own demise.

    • eru 12 years ago

      Just be glad you are already immune to Tetris.

      • awjr 12 years ago

        Best strategy (for me) seems to be to play it like tetris. Never ever use the up key and create a row at the bottom where everything collapses into it.

        This sort of clicked towards, oooh I don't know about 1:30am this morning.

        • lugg 12 years ago

          That sort of works, I've been using a similar strategy but switching what I call "bottom" whenever the moment suits.

          • awjr 12 years ago

            I'll have to look into that way of playing.

        • lsdafjklsd 12 years ago

          Yes, I won twice yesterday with this strategy.

        • ashmud 12 years ago

          Empirically, this got me much further than the corner (stair-stepped) approach.

    • prasio 12 years ago

      I launched a very similar called Even last week on Android -- http://bit.ly/even-game -- have fun!

      • snuffmeister 12 years ago

        Downloaded and installed. Can you please remove the almost mandatory google games sign in, or make it optional. I tries to connect every time I move between the game and the menu, and I don't want it to connect...

    • nevvvermind 12 years ago

      I was reading all your "I wasted x hours on this" and I rolled my eyes - "My god, these guys fall for everything". Then I tried it. Couldn't sleep. Damn it!

    • andrey-p 12 years ago

      Creating a game that you, the creator, can't stop playing is the sign of a pretty good game. It's like "eat your own dog food", but with crack.

      • dwd 12 years ago

        Too damn addictive.

        Won a few times and still keep picking it up. Now the Tetris dreams are starting; must stop.

  • vjdhama 12 years ago

    I lost my whole damn day.

    • georgeg 12 years ago

      lost precious time for thesis writing! evil game!

  • Trufa 12 years ago

    Two hours straight and managed to get once to 1024.

  • gotts 12 years ago

    just spent a few hours on this. I'm in love-hate relationships with the author now

seventytwo 12 years ago

You definitely need to have some kind of counter for how many times someone has reached 2048, and out of how many games played.

  • gridspy 12 years ago

    Or an expansion on that. Keep track of how many 128s, 256s etc you've ever formed. Show them as big counters directly under the game with an animation when you create any of them.

    • benjamincburns 12 years ago

      Log scale histogram?

      Edit:

      Actually all you need to store is the highest block achieved, and the number of times it's been hit. For instance, if you've only ever generated 2 8's, then you know that you've had 4 4's, and 8 2's...

      Edit 2: Does the game allow four 2's to cascade into an 8? If so, maybe you could also store combo stats. It'd be way cooler to smash together four 256's than to smash together two 256's two times.

      Not sure how that plays into the histogram.

      • IanCal 12 years ago

        > For instance, if you've only ever generated 2 8's, then you know that you've had 4 4's

        You know you've had at least 4 4's, but you could have had more.

        • benjamincburns 12 years ago

          Ah. Lower bounds... they get me every time!

jonalmeida 12 years ago

I can't tell if I despise you or admire you, all I know is that there was light outside my window when I first began playing this, and now it's pitch dark.

Upvoted you to show my anger! :)

primitivesuave 12 years ago

I haven't been this addicted to a game since Drop7.

  • pavel_lishin 12 years ago

    I was so addicted to Drop7, and so annoyed at the crappy Android version, I made my own HTML/JS version with appcache, so I could play it in chrome offline: https://github.com/pavellishin/drop7

    • primitivesuave 12 years ago

      This is fantastic! Thanks so much for sharing, I learned so much from reading your very elegant and well-commented code.

      Just in case anyone is looking at this and wants a direct link to play pavel_lishin's version, here's the raw github version: https://rawgithub.com/pavellishin/drop7/master/drop7.html

      Side note: I got hooked on Drop7 during my first semester in college. I was fascinated by the game and wrote a simulator to pick the optimal move: https://github.com/keshavsaharia/Drop7Simulator

      • pavel_lishin 12 years ago

        Ooh, nice! I thought about writing some sort of AI to play for me, but never got around to it. (Plus, it felt weirdly oroborous-like.)

    • ToastyMallows 12 years ago

      Awesome work, thanks for posting. I too was annoyed at Android support. It could be one of their more popular games if it was just updated a little.

pje 12 years ago

Please allow me to throw money at you somehow

  • jf 12 years ago

    Yes! At the very least put up a BTC or Dogecoin address we can send donations to!

    • greggman 12 years ago

      Or maybe go buy Threes which this is a descendant of?

      http://asherv.com/threes/

      Nice clone but it's definitely a clone and so should be treated as such.

      • eps 12 years ago

        I have Threes and they way way over-designed it. Also it's rubbery interface is really quite annoying. This one however is a perfection - simpler idea, pure gameplay, subtle animations and UI mechanics. It really beats Threes hands down even if it's a "clone".

        • kibibu 12 years ago

          Yep, and if you have a spare couple of minutes to play a game, the first minute is spent loading it.

    • terabytest 12 years ago

      Not sure if I can do that. Wouldn't it be unethical and unfair to the other developers?

      • reeses 12 years ago

        You can always pay some sort of % as tribute, but you've created something that we all find a horrendous waste of time :-) so a way of remunerating you to some degree is not in the least bit unethical.

        It's good to get paid for your work, even if it was fun.

iamdanfox 12 years ago

Out of curiosity, I'd love to hear what your Google Analytics graphs look like! How long to people spend playing it?

  • terabytest 12 years ago

    Right now there are around 2100 people on the site and an average visit duration of around 4 minutes :)

    • deletes 12 years ago

      How many reached 2048?

      • terabytest 12 years ago

        The latest stats show no "game-win" events :P It might just be a matter of time though.

        EDIT: oops, there was a bug in the win/lose tracking so I probably missed out on a few wins. I fixed it now, so it should hopefully track it if someone else wins!

        • yeldarb 12 years ago

          I just beat it! First try.. but I've been addicted to Threes for the past week or so.

          http://i.imgur.com/nf25AVZ.png

          • deletes 12 years ago

            I'm gonna call fake on this one.

            • anon4 12 years ago

              With enough tries anything is possible. There is probably even a person who ascended nethack on his first try (using the wiki of course, we're still talking things with p > 0) and didn't play it again because it's too easy and boring.

              • eru 12 years ago

                I've seen that. Wiki, #nethack, valkyrie, and some decent but not extraordinary luck.

            • araes 12 years ago

              There's actually a semi-optimal strategy that nearly guarantees winning if you're diligent about it. Just build a stairstep pattern with the highest numbers in the bottom corner of the stairs. Then basically combine sideways and downward and "always" resist the temptation to push up. Its kind of how some tri-diagonal matrix algorithms work. The only problem is you have to be fastidious about never using the one direction you've reserved as your excluded case (Up in my example) as that can screw your staircase by putting a [2] right underneath your wonderful [1024]. Just move blocks back and forth, waiting for the right blocks to create combo patterns, while generally storing lower cost blocks on the outside of the stairs, and then snake them through the stairs when you get a chain set up.

              Ex:

              x x x 2

              x x 2 4

              x 2 4 8

              2 4 8 16

              • kyle_t 12 years ago

                I was surprised at how well that worked. I was basically blindly cycling between left,down,right (with one accidental up) and got to 1024 on my first try.

                • varyform 12 years ago

                  function press(key) { var eventObj = document.createEvent("Events"); eventObj.initEvent("keydown", true, true); eventObj.which = key; document.dispatchEvent(eventObj); }

                  for (y=0; y<=1000; y++) { press(39); //right press(40); //down press(37); //left press(40); //down }

                  this gave me 1024 in couple of tries :D http://i58.tinypic.com/am9sh4.png

                  • wmblaettler 12 years ago

                    Here's a random key press loop: function press(key) { var eventObj = document.createEvent("Events"); eventObj.initEvent("keydown", true, true); eventObj.which = key; document.dispatchEvent(eventObj); } for (y=0; y<=1000; y++) { press(Math.floor(Math.random() * 4) + 37); }

              • omegant 12 years ago

                After half an hour playing blindly I realized this, but even using this it´s hard to go beyond 500

              • keehun 12 years ago

                Yes, I also discovered this after 20ish minutes of playing. If you're not diligent about it, it's very hard to recover.

                • kaybe 12 years ago

                  However, I've locked myself a few times so it was impossible to go on without using 'up' (or whatever):

                  x x x x

                  x x x x

                  o o o o

                  o o o o

                  where at no point the same numbers next to each other allow collapsing. Maybe it's the problem not growing from the corner.. hm.

              • rasur 12 years ago

                I found one not-completely-horrible strategy was just blindly running round the curser keys.. eg. up - right - down - left, repeatedly. Got near 4000 points with that..

                Great game though - wasted waaay too much time last night playing.

              • daleco 12 years ago

                It's a good start but you will get stuck at higher level. in your case focus on increasing the value on the bottom left. When possible, shift the last line to the right. Never go up.

          • terabytest 12 years ago

            If that's real, congrats! I had started doubting that anybody would ever win the game :P

            • samstave 12 years ago

              Can you add in how many moves!!?

              • birdmanjeremy 12 years ago

                This would be cool. I think winning in the fewest moves would be the most impressive. i.e. how few tiles you 'waste'. Though winning with the lowest score may approximate this.

              • duskwuff 12 years ago

                Each turn, one 2 tile is added, and other tiles may be combined. So you can derive the move count by adding together the numbers on all the visible tiles and dividing by 2.

                • jsmthrowaway 12 years ago

                  This is inaccurate, because you have a 10% chance of getting a 4 tile added instead of a 2. That part makes the game tricky, because otherwise you could optimize every solution like an algorithm without ever losing.

                      var value = Math.random() < 0.9 ? 2 : 4;
                  

                  https://github.com/gabrielecirulli/2048/blob/master/js/game_...

                  • duskwuff 12 years ago

                    Oh, huh, I didn't even realize it was doing that. Even so, the move count will still be roughly proportional to the sum of the board (plus or minus some random variation), won't it?

                • samstave 12 years ago

                  Thanks Neckbeard,

                  I refuse to do these calculations in my head...

                  The author should do this, and create a counter of moves within the app.

                  • samstave 12 years ago

                    eh... Sorry - I was tipsy when I posted that...

            • birdmanjeremy 12 years ago

              It took me a few tries, but it's definitely winnable.

            • kaybe 12 years ago

              Do you have new numbers? I got a bunch of people addicted and I assume I'm not the only one.

        • cousin_it 12 years ago

          I'd be interested in seeing the lowest winning score, highest winning score, and lowest losing score (!)

          • rsvidal 12 years ago

            Managed to purposefully lose with 627 points. Lowest I've managed to lose by. :)

ctdonath 12 years ago

Make sure not to get addicted!

Hah. It's binary crack.

gopalv 12 years ago

Programmer Step #2 - write an automated solver :)

  • siddboots 12 years ago

    I thought about this for 5 minutes and really got nowhere. Can anyone come up with a nice analytic way to think about an algorithm?

    There are a couple of brute force approaches: a) always pick the direction that will result in the most blocks to combine, b) always pick the direction that will result in the largest score.

vorg 12 years ago

> this made it to the top of HN without me even thinking of posting it here

Good for beta testing it.

Unlike with Threes, there's no real reason to use numbers since they're all powers of 2. If you used letters (A, B, C, ...) you could market it to non-HN sorts, and have a version of the game in a 5x5 grid, or, more to the point, in a 6x6 grid with letters A to Z. Most people in the world know the order of letters in English.

  • eru 12 years ago

    Good idea with the letters, but perhaps not necessary. People are happy with simple numbers. Just look at Sudoku which doesn't use A to I.

    • vorg 12 years ago

      I'm certain letters are necessary for a 5x5 or 6x6 board. M is better than 16,384, and Z far better than 67,108,864.

      • eru 12 years ago

        Why? Instead of A, B, C, you can go with 1, 2, 3. Ie use the binary logarithm of the numbers.

        • vorg 12 years ago

          Good idea with the simple numbers, and certainly necessary to use some tokens other than what this 2048 app uses so we can have a version of it in a 5x5 or 6x6 grid.

          When you wrote "Good idea with the letters, but perhaps not necessary. People are happy with simple numbers. Just look at Sudoku which doesn't use A to I", I thought you hadn't noticed my mention of the larger grid, which was really the main point of my comment and maybe I should've worded it differently. Though if you'd begun your comment differently, i.e. "Good idea with the larger grid, but perhaps the letters aren't necessary. People are happy with simple numbers. Just look at Sudoku which doesn't use A to I", I wouldn't have felt the need to reply to correct a perceived communication mistake.

          • eru 12 years ago

            Oh, for a larger grid, you might want to have letters anyway, because your point still applies.

            It's interesting that log_2 2028 is just above what you can represent in a single digit. That's very close to merging two 9s.

            I'd like to actually see someone pit x, log_2 x, and letter(log_2 x) against each other in an A/B test of the game. The latter two are simpler, but the former might be more exciting, because of bigger numbers.

karangoeluw 12 years ago

Shit I just spent like 4 hours. I have final exams next week. You are evil!

a13xnet 12 years ago

Great "time waster" - just got 5752 score from first try! Very well executed, who cares if its a clone! :) Great job!

filipm 12 years ago

Hi Gabriele, I created a mirror of your project with an easier memorable name at

http://2048.mx/

:-) Hope that's fine. It might take an hour or so for the domain to be accessible for everyone due to DNS cache.

prasio 12 years ago

It's very coincidental that my game called Even, based on very similar gameplay was launched this past Friday -- http://bit.ly/even-game

(in case folks on Android want to play it)

rayanm 12 years ago

I've started playing threes a week ago. Both threes and 2048 are fun to play. Except that I think in threes the challenge starts earlier in the game and every step counts and you can easily get into a deadlock. Can't wait to see the source code and analytics. Maybe you want to add on the page the highest score :)

RealCasually 12 years ago

Very fun game! Love the dynamic, couldn't get higher than 256 though. Also check out Fives for Android--somewhat similar: https://play.google.com/store/apps/details?id=com.rcg.fives

  • jackmaney 12 years ago

    Likewise. I had one game where I had a 256 block and two 128 blocks, but I ran out of room to maneuver before I could combine the 128s to another 256 and then combine the 256s to a 512.

    • ilovecookies 12 years ago

      by pressing up-right-down-left, then repeat, I managed to get to 512 two times...

      • anon4 12 years ago

        I did it by pressing up-left-down-right, repeating each direction as many times as possible. That's the worst part - knowing that your carefully calculated playthrough is actually no better than someone just pressing the keys in a set order.

        • 0-o 12 years ago

          Ran your strategy 162 times with autoit of which the following blocks came by: [128]: 150 times, [256]: 36 times, [512]: 13 times, [1024]: 0 times. Anyone else a good suggestion for an optimal "blind" strategy?

          • ilovecookies 12 years ago

            Perhaps I had a little bit of luck. But this shows you can easily get to 256 with little dedication. After which you can start to puzzle things together.

            Also about your autoit "analysis" 36 + 150 + 13 != 162

            • 0-o 12 years ago

              Well, when it reaches a 256 block, it also reached a 128 block, so some games count for 2 or 3 blocks.

              • ilovecookies 12 years ago

                That's true. :)

                Anyway managed to get to 1024 + 512 + 256 after that without random button mashing.

kaybe 12 years ago

Two hours lost at uni today and checking hn first thing back home... nooooooo! I will now proceed to waste time. Good job! :)

edit: Ok, some random friend just emailed me and told me to check out your game. This friend does not hang out at the online places I do. It seems to be on fire!

infinity 12 years ago

Finally, at 2:26 a.m. I was successful with a score of 21000 ... that was fun, thank you!

kngspook 12 years ago

Oh, _now_ you tell me not to get addicted! >:( You should've made that a splash page to the site, not an edit to a comment on the submission link.

But seriously, well done. :) Completely destroyed my productivity.

mzs 12 years ago

Just wanted to let you know (but wanted to wait before somebody would down vote such a comment here) that I really enjoyed your game, thanks and cheers!

loahou04 12 years ago

Thanks a lot jerk...now ive lost 2 hours of sleep because of this game! Keep up the good work!

AJ72 12 years ago

Totally cool, and addictive. Not exactly news, but at another level, completely HN worthy

SonicSoul 12 years ago

awesome game. I love the math

  2 * 1024 = 2048
  4 * 512  = 2048
  8 * 256  = 2048
  ..
  1024 * 2 = 2048
            20480 <-- minimum points

is there a elegant formula to get to the minimum required points?

  • dbaupp 12 years ago

    That's not quite the minimum points, since occasionally (10% of the time) a 4 spawns, instead of a 2.

    • SonicSoul 12 years ago

      that's incorrect.

      just because a 4 gets spawned 10% of the time, doesn't mean that there couldn't be a game where 4 does not get spawned

      • dbaupp 12 years ago

        4s reduce the total score. (E.g. I won with a score of about 20200 once.)

esalman 12 years ago

Thanks for the swipe gesture support, had fun playing it on the way home.

blueblob 12 years ago

This is very fun and addicting, now I just have to get some work done.

crag 12 years ago

I just wasted 60 mins playing this game. And I think I'm hooked.

I hate you. ;)

elleferrer 12 years ago

Ah! This game IS addicting! My highest so far is around 3500.

kartikkumar 12 years ago

Extremely addictive and awesome patterns! Well done!

SnaKeZ 12 years ago

Congratulazioni Gabriele ;-)

mantrax 12 years ago

"EDIT: Make sure not to get addicted!"

Oh, no we have another Flappy Story in the making here!