Solitaire 3D

Get it on Google Play
A more serious development in 3D OpenGL then Snap! Klondike Solitaire is one of the most popular games in the Android Market, and yet none of them really appealed to me visually.

Latest features included High Definition graphics, an online leaderboard high score chart, user definable images of both card backings and backdrop.  The images below of the app are older than the current version, but I like to leave them here to remind me of how far the application has progressed!

I wanted a clean looking interface, that didn’t require popup columns. Basically you should be able to play it as you see it without the need for tricky interfaces. I wanted to show off some of OpenGL animation, especially with the shuffle and deal, and specifically the winning sequence.

I’m going to keep this application updated as suggestions come in. I’ve already applied the 1 suggestion I’ve had so far! I made a pay-for version as well, and will prioritise any requests from my customers.

https://play.google.com/store/apps/details?id=com.jawfin.sol3dtab

http://www.appbrain.com/app/sol3d/com.jawfin.sol3dtab

https://play.google.com/store/apps/details?id=com.jawfin.sol3dtabpro

http://www.appbrain.com/app/sol3dpro/com.jawfin.sol3dtabpro

Privacy Policy


Comments

Solitaire 3D — 169 Comments

  1. Version 3.5.12

    Minor bug fixed: on the devices which have their Home button not on the physical device but overlaid on screen were returning the wrong screen width as it was subtracting that area which the app overlaps anyway. This resulted in the clicking on the screen not to be perfectly aligned to the 3D world behind it. (The game is rendered through a view-port into 3D perspective – the touch events are Cartesian coordinates which have to be cast into that 3D world to identify the selection of card[s].

    Nougat Operating System allows for multiple languages to be installed, which are consulted in a cascade method to determine which resources to use for any app depend on what languages they support. I rewrote the routine which fetches the resource language so it chooses the correct one for on-screen dialogs. (There could be up to 3 languages at work in the top-most app, the OS language, the app’s language and the resource language – these are often different when dialects are in use.)

    I also applied fixes to bugs send in by users by the reporting mechanism. I have resolved all that I can – some have been raised by players with custom ROMs and have disabled required features (like the Gallery / Photo – then try to chose a custom image!). And others are Android Not Responding which are caused by the Operating System but fire in my app so it looks like Solitaire crashed (these are the hardest to diagnose, 100’s of lines of data and code traces and stacks, and not one of them originating from my code!!).

    Also, the option between 1 full screen or banner ad has been opened to all languages now the translation work for that setting has been finished.

    Also, also, the cause of that *new* permission: Read Phone State: has been identified and removed. An unneeded java class was being called in by a class I was using, so I managed to use the code I need and filter that sub-class out (and Java has no conditional compiler directives, making this rather a task).

  2. Version 3.5.13

    Still migrating to Nougat, removing depreciated code and putting in conditional checks of the newer SDK features. Also, all supporting libraries have been updated.

    As I cannot test all what has gone in (emulated devices barely scratch the surface of testing), I’m a bit anxious about unexpected crashes – but best I deal with them now than put it off!

  3. Version 3.5.14

    Major bug in how I was calculating the Frames Per Second, thus CPU usage. A while back I switched from using a millisecond counter to a nanosecond counter for better accuracy and smoothness. Only, I forgot to divide that difference by 1 million (nano -> milli) thus the renderer thought it was taking about 3 seconds to calculate the screen (as opposed to the 3ms it was really taking), so it never put the thread to sleep to make up for the spare time to cap my FPS to 40 – so it was running full tilt.

    I put in a couple more CPU saving routines too, after 2 seconds of not playing the game the FPS drops to 10 which cuts down on CPU usage. During this time I also skip the code which builds the image – so it’s more like that it takes a screenshot of the last known postion and shows that instead of math and rendering, and switches back to render mode when the user starts playing again.

    I finely tweaked the playing speeds so it just plays a little bit faster, which is better on the newer devices (as opposed to the devices it was being played on 5 years ago!). Ironically, animating faster uses less CPU as it gets to the sleep state quicker and has less steps (animation frames per card) to calculate.

    Full screen ads culled, now only show when starting a new game and only after an interval of 3 minutes since the last ad – so at least 3 minutes apart, and only when a new game is started. There were full screen ads in other places, but since I applied the request of a player to put a full screen ad in on the new game I neglected to remove those other ones (like on the Pause) – so now full screen is *only* on new game, nowhere else.

  4. Version 3.5.15

    The Long Press of the Android Back was also opening the menu as it did the Full Undo – fixed.

    Removed the screen flash when returning from another screen.

    The timer is now Kept running even if not showing, and subsequently doesn’t restart the game if the timer option is changed.

    Almost fixed bug which at times doesn’t always do the smart move when clicked – it misses far fewer times now, but it still doesn’t always fire (I think it may be due to the game still rendering animations).

    • Sorry for the delay in my reply, I was out of Internet range for a couple of days!

      As I’m not sure as to which aspect of sound you’re referring to I’ll cover all of them.

      Firstly, check the quick mute button on the screen, over to the right, and ensure it is blue and not grey like this: –

      If it is blue then it could be a custom sound setting, so long press it to bring up this screen: –

      (If you do not have the sound icon on the screen you can go into Options [with the Menu button], into the Graphics & Sound tab, and use the Individual Sound Effects button.)

      Ensure that the Sound switch is on (unlike mine!), the Volume bar has a value, and that the individual sound effects you want are also selected.

      Also, check the Media sound volume in your sound panel – if the media volume is zero it won’t matter what settings are in the app as media will override them.

      If I haven’t answered your issue properly please let me know and I will try to resolve it.

      Cheers
      Jonathan

      • I have just paid for Pro game and I can’t get game to down load any new card backs or anything! If this can’t be fixed please send refund!

        • Hi there.
          All the decks which you have downloaded should still be there. They are stored in same location on disk, both for Free & Pro. They are Butterflies, Flowers, Precious & Space. If they won’t load even after selecting them perhaps you could try Uninstall and Download again. Please get back to me if that still doesn’t do it!

          Cheers
          Jonathan

  5. Been playing this game for about 2 Years now and have never had ads Pop up every 2 seconds just started 2 days ago what’s up with that?

    • Oh, you know what? I had the exact same thing about a week ago. Now my battery was down to like under 15 percent, which I never allow it to get that low, and I suspected it was some battery saving device – like maybe scaling images or controls on the fly in an attempt to cut down CPU load. I’m running the latest Nougat on my Galaxy S7 so who know what cleverness they are trying to attempt.

      One thing I can state for sure is that I lock the ads to that little banner on the screen – I mean, I have a panel there which is locked in place and set size – so if a “clever” ad tried to extend an invisible border so it got clicked it would still be confined to my panel (specifically its a relative layout view). I can also state I haven’t updated the app in a couple of months, so whatever is doing it is must be coming from another update (like the operating system).

      Obviously it had me worried, but when I recharged my phone it stopped (well, it only did it twice, but that’s enough to concern). So go figure!

  6. Version 3.5.16

    Nothing immediately obvious on the surface, but many changes to keep up with Google’s development cycle. Fully compatible with the latest version, as well as fixing every reported error.

    Solitaire 3D was also fully tested by a specialist company and their findings have been incorporated this release.

    Significantly I have reduced the number of full screen ads to 1 every 5 minutes, minimum. Which means after playing for half an hour you’d be lucky to see more that 5 seconds of ads – try getting that from watching TV! If this hits the income stream too hard I many need to revise this!

    Although not documented in the Play Store, if the user chooses to have the banner ads instead, and one is clicked, the banner bar will hide for several minutes. I cannot endorse this activity on the play store listing as there is to be no compensation for clicking ads. To my mind not showing an ad is hardly a compensation – also I am worried someone may click it by accident (should not happen though) and this will at least prevent that from happening consecutively. I can state I have spoken directly to Google and AdMob about this and they agree I am not breaking the rules – but I cannot promote this as a feature. No Loss!

  7. Version 3.5.17

    I changed ad network brokers as the one I was using had an indistinct privacy policy which was unacceptable. No other significant changes (except a couple of little bugs which where reported were fixed).

  8. Version 3.5.18

    Let’s see – I removed the g+1 button as it no longer seems to support Android Play Store addresses – although there’s not a peep from Google about that – I guess they are quietly trying to undo the attempted dominance (and subsequent backlash) of social media.

    I have installed all the latest run-time libraries and replaced old legacy [deprecated] code with the modern equivalent (where possible). Applied a lot of code optimisations revealed by Lint.

    There was a bug (or more precisely an unnecessary semaphore lock) which meant at rare times a screen touch was being ignored – that signal/wait has now been removed.

    I also found a means to cut back on CPU usage when the game is idle, that is, on-screen but not being played. This kicks in after 2 seconds of not touching the screen. Note, this can [very rarely] cause the screen to flicker when coming back from a sub-activity (like Pause or the Options screen) – but it is temporary and worth the processor saving.

    • Sorry I don’t understand the point being made. All the decks, the built in ones and the extra downloadable ones all have 52 cards – or else the game could not be solved. Please let me know by what you mean “not full decks”. Thanks, Jonathan.

  9. Version 3.5.19

    Minor bug fixes, mostly from the built-in error handler but at times from players’ feedback. I also (hopefully) reduced the chance of an “Android Not Responding” (ANR – at application level, not device level [i.e. game freezes but Notifications and Home button still work]) due to the handling of the OpenGL 3D surface, specifically in reference to leaving the game (in which case it’s ANR isn’t even noticed anyway!) and screen orientation changes.

    This update also employs the latest Google libraries, the Play Store Services, and is built with the latest stable version of Android Studio 🙂

    Minor update to the privacy policy to reflect recent changes. Nothing drastic, I just took out the obsolete reference to Google+ which is now no longer supported!

  10. The automatic setting hint doer thing on the lowest setting doesn’t see the moves,which it should pick up. But I end up noticing them anyway.. So I’m really surprised that it doesn’t always work right. Thanks, Mary

    • Oh, really? Wow! I thought it was behaving properly. The thinking is it’ll suggest the move most likely to help solve the game. What you’ll see though, for instance. is it will never suggest moving a card which has no face-down cards above it unless there is a King ready to go into that column. The reason being is say, you move a red 8 onto a black 9 which frees up a column which a King could play on, it won’t suggest that unless there’s a King in waiting. Because, you may come across the other red 8 which moving it would be more advantageous. This is because potentially a King could go on any free column, whereas that other red 8 has only that 1 place (except for the base itself).

      If you find an example where it won’t suggest a legitimate advancing move (the hint rotates all useful possibilities from what it considered the most advantageous to the least, every 3 seconds) then could you please email me a screenshot of the game and the suggestion it missed – that way I can test and improve it. jawfin@gmail.com

      (Again note it won’t suggest moving a half column unless it’s freeing up a card which can be based. And finally, it will never suggest playing off the base back onto a column, although on some extremely difficult games that can be required solve it. It is only a hint after all!)

      Thanks very much for writing, it’s great to hear from you!

      Cheers
      Jonathan

  11. Hi, i have been playing this game for about 6 years now,reacently i
    Changed phones load this game on it but cannot load my scores on the game i do not want to start all over again.my old phone was htc one i have updated to a htc u11,my score was 5108379 this was over
    638 hours any help would be welcome

    • Hey 🙂
      I can restore your score! Just fire me an email jawfin@gmail.com of how much you remember of your score. What we need is number of games played, won & lost; your current score (which I do have, just being complete) and whether you play 1 or 3 card deal. With that I’ll explain how to restore your score. Cheers

  12. Version 3.5.20

    The Pause button and screen has been removed. Google’s policy is that any game which offers a Pause option in-game must activate that pause when the Android back button is pressed. That behaviour is expected, well, required, of this application. And as we use the back button to go back a move I decided to take the Pause out. After all, it was only there to stop the timer for timed games – which is equally achieved by going into any other screen!

    There is colour back in the Sort button. Some Android version changes removed it (something to do with spannable unicode characters treated as emojis [I knew you would be interested in that]) – but still they do show as black only on some devices. I’m talking about this button!!

    Coloured Sort

    As usual, bugs and errors reported by the automated error capture routines have been fixed as far as possible.

    • I didn’t change anything in the engine of the game – but I always update to the latest APIs which plug into the app.

      When you say “restart” do you mean the game undoes all your moves back to the start, or it starts a new game, or the app itself crashes and you need to re-run it?

      Is it doing this repeatedly, or just once or twice?

  13. Version 3.5.22

    Updated to all the latest Android SDK libraries.

    Changed crash handler, as recommended by Google.

    Direct reference is made to the privacy policy for those affected by the GDPR.

  14. I noticed that Solitaire 3D randomly assigns games that were lost. I won all games, but Scores show that I want only 88%. What’s up?

    • What it could be is a game was aborted, like a new game was started before the current one was finished. On an older version of Solitaire I would force start a new game if the game type was changed, like 1 to 3 card dealing, or the difficulty level, which would then consider the current game aborted and not count it as a win – so it could be a throwback from that time. I am happy to fix it for you though, if you email me a screenshot of your score screen I can apply the fix. Email: jawfin@gmail.com
      Thanks for writing 🙂
      Cheers
      Jonathan

  15. Version 3.5.23

    Google are releasing a new security protocol which compares the installed apps signature to the known generated ones.

    I had implemented a similar system years ago, but as theirs will re-sign the app mine will falsely fire, so this install now disables that layer of security.

    Another Google requirement is the app is compiled to a minimum SDK level so I am ensuring I have the latest version. Both these ideas by Google are good, if not a little late in their implementation!

    I caught a big bug too – well, not a bug in my code per se, but Google changed its policy on the handling of certain activities. In that, if a window is created full-screen, transparent, with a requested orientation (landscape = side-on), then this was not allowed. Not allowed to the extent it would crash the app. The thinking being a transparent screen should not request orientation as it must inherit from the screen behind. I was using transparent screens for the on-screen controls and individual sound effects – so now those screens have a solid background – no great loss but extremely hard to track down in the code what was causing the critical crash!

  16. Hallo, Lieber Herr Parton

    Warum bitte es gibt keine Pause Taste mehr. Ich muß Entwässerung-Tabletten nehmen u. Da muß ich deswegen
    öfters pi pi gehen. 2.,Wenns Telefon läutet sollte man ja abheben oder es läutet jemand an der Wohnungstür
    der braucht irgend was, oder ich hohle mir ein Packerl Zigaretten von der lade oder der Packet-Postler
    bringt ein Packerl usw. da habe ich immer wegen der Zeit die Pausetaste gedrückt. Mir fehlt die “SEHR”.
    3.,Kann mann die G+Share von der Spieler Seite nicht entfernen, dieße stört mich unheimlich braucht keiner.

  17. I speak English, so first I’ll use Google Translate then attempt to answer with the same! Your post: –

    Why please there is no pause button anymore. I have to take Drainage Tablets & That’s why I have to
    often pi pi go. 2nd, When the phone rings, you should pick up or someone rings the front door
    he needs something, or I’ll pack a pack of cigarettes from the store or the parcel postman
    brings a pack, etc. because I have always pressed because of time, the pause button. I miss the “VERY”.
    3., Can not remove the G + Share from the player page, that does not bother me, no one needs.
    __

    Ok, so, the Pause had to be removed as due to Google policy. If there is a Pause button on the screen then pressing the Back button must activate it. We want the Back button to undo the last move, but Google will not allow that. I had a few arguments with them about that, but I had to remove the Pause as I wanted the Back button to behave as Undo. Note that opening another screen or closing the app will pause the timer.

    Again with the Google Share button: even if you turn off the Google Play Services in the Options the Share button, the Goals and Leaderboard buttons must still show. I had another argument with Google about that too! But they say if my app offers it, it must show even if the user logs out of Google Play Services. They will not feature the app unless these conditions are met.
    __

    German/Deutsch :-
    Ok, also musste die Pause aufgrund der Google-Richtlinien entfernt werden. Wenn auf dem Bildschirm eine Pause-Schaltfläche vorhanden ist, muss diese durch Drücken der Zurück-Taste aktiviert werden. Wir möchten mit der Zurück-Taste den letzten Zug rückgängig machen, Google lässt dies jedoch nicht zu. Ich hatte ein paar Argumente mit ihnen, aber ich musste die Pause entfernen, weil ich wollte, dass sich die Zurück-Schaltfläche wie Rückgängig verhält. Beachten Sie, dass das Öffnen eines anderen Bildschirms oder das Schließen der App den Timer pausiert.

    Auch hier mit der Schaltfläche “Google Share”: Auch wenn Sie die Google Play-Dienste in der Schaltfläche “Optionen” deaktivieren, müssen die Schaltflächen “Ziele” und “Bestenliste” weiterhin angezeigt werden. Ich habe darüber auch noch mit Google gestritten! Aber sie sagen, wenn meine App es anbietet, muss es auch angezeigt werden, wenn sich der Nutzer von Google Play Services abmeldet. Sie werden die App nur dann unterstützen, wenn diese Bedingungen erfüllt sind.

    • Hallo, lieber Herr Barton

      Mit einem Wort der Sche… Google mit seiner “Macht” wirft nicht nur Ihnen als sehr Guter Programmierer die Steine vor den Füßen und macht es Ihnen die Arbeit nicht leichter. Das sich der Google über eine Pause-
      Taste die in einen Spiel nicht sein darf, da könnte mann meinen die haben keine anderen Sorgen. Und die
      Werbung Googl+Share der Google geht mir so am “Arsch” mit der Werbung und seinen Auflagen.
      Herr Barton ich muß Ihnen sagen,Ihr Sollitär Spiel ein “Spitzen” Spiel Top Sache Mann kann sogar die Kinder
      als Hintergrund Bild machen und die Mutter allein als Stappelstoß Karte setzen. “Super” ganz “Super”

      • Your’s in English: –
        Hello, dear Mr. Barton

        In a word, the Sche … Google with its “power” not only throws stones at you as a very good programmer and makes your work easier. That Google has a break-
        Key that can not be in a game, as you could think that have no other worries. And the
        Google Googl + Share Google is so “messed up” with the advertising and its editions.
        Mr. Barton I have to tell you, your Sollitar game is a “topping” game Top Thing man can even take the kids
        as a background image and put the mother alone as a stumbling card. “Super” very “great”
        ___

        Thanks for the kind words 🙂
        I have to say though, it’s their shop, and they decide what product to sell. Google can decide on the quality of the product and any other requirements. It’s no different for Samsung and Amazon – they will not let you post an app which even hints of Google, even though it’s on Google’s platform! I don’t mind, I just make the product as best as I can for the user, in a way which Google approves.
        Cheers
        Jonathan
        ___

        German/Deutsh: –
        Danke für die netten Worte 🙂
        Ich muss jedoch sagen, es ist ihr Geschäft, und sie entscheiden, welches Produkt zu verkaufen ist. Google kann über die Qualität des Produkts und andere Anforderungen entscheiden. Bei Samsung und Amazon ist das nicht anders – Sie werden keine App veröffentlichen, die sogar Hinweise von Google enthält, obwohl es auf der Google-Plattform ist! Es macht mir nichts aus, ich mache das Produkt so gut ich kann für den Benutzer, in einer Weise, die Google genehmigt.
        Prost
        Jonathan

  18. Off-topic post. I wanted to post about something I am personally proud of. I get these monthly emails from Google saying how my revenue is going. Last month I got this: –

    And just now this: –

    I want to say I am proud that may app has near half the ads as does the other apps similar to mine. If for nothing else, it shows I care for the end user twice as much as these other developers 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.