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


Comments

Solitaire 3D — 141 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

  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!

Leave a Reply

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