C++ Boot Camp: Game Development

Posted by on in Programming

C++ Game Development

11-August-2016 / Day 4 of C++ Boot Camp is C++ Game Development hosted by Eli M., MVP, Developer and Entrepreneur from FMXExpress.com

Four different games with classic game mechanics will be demonstrated.

We will be also be covering topics such as App Tethering, utilizing TFrames to build your UI, using TRectangle as a light weight image object, accessing the device motion sensor, simple object pooling, cross platform sound, sprite sheet animation, and building a high score system with SQLite across Android, IOS, OSX, and Windows with a single source code.


 

 

Source code is available now at: 

https://github.com/EmbarcaderoPublic/CppArcadeGames

 

In Alien Invasion you will learn how we used TRectangle as a light weight image object and about utilizing TFrames to build your UI.

In Mars Rocket you will learn accessing the device motion sensor and building a high score system with SQLite and LiveBindings.

In Rocket Ship Delta you will learn how we used simple object pooling and sprite sheet animation.

Finally, in Space Rocks you will learn how we used App Tethering to build a gamepad for playing the games on a remote device and built a cross platform sound class.

 

Bio

Eli has deployed over 300 mobile games across Google Play, Apple App Store, Amazon Appstore, and Samsung Apps. He has also aggregated over 80,000+ flash games to 120+ million players worldwide reaching over 210+ million gameplays. And he has reached over 400,000 developers with hundreds of tips and tricks for Firemonkey through FMXExpress.com.

 

Q&A Logs

Q: Do you have sample games projects?

A: Yes! And they will be available for download soon, we'll have a link in the blog post for today's session - keep an eye on blogs.embarcadero.com and https://github.com/EmbarcaderoPublic/CppArcadeGames

 

Q: Are there any books that any of the experts recommend we get if we want to create a game in the future? If so what are they?

A: I mainly use blogs. This one is good. Not Delphi specific but the information transfers over. http://www.emanueleferonato.com/

 

Q: Yes. It's an excellent intro. Are there ways to create using C++ Builder & OpenGL for 3D Games?

A: FMX uses DirectX on Windows (Direct3D or Direct2D, depending what you want) and OpenGL on other platforms

 

Q: I may have missed this question... what are the requirements to develop ios device?

A: You need the Pro+Mobile edition of C++Builder. You also a Mac and an iOS device, and an Apple dev account if you want to put your app on the App Store. We often run C++Builder in a Windows VM on a Mac. http://docwiki.embarcadero.com/RADStudio/Berlin/en/Supported_Target_Platforms http://docwiki.embarcadero.com/RADStudio/Berlin/en/IOS_Mobile_Application_Development

 

Q: FireDAC is not available in the starter?

A: FireDAC is not available in Starter. you'll need to update to Professional at least.

 

Q: The source code for these games are available?

A: Available on GitHub - https://github.com/EmbarcaderoPublic/CppArcadeGames

 

Q: Excuse me if this was already asked, but what if you want to just deploy on desktop (Win|Mac) how does one code for game controllers?

A: That would depend on the game controller. In our case, we use Android and IOS devices as the game controller. But you could connect to controllers via serial port if they supported that.

 

Q: what it is better to useTStringList or TDictionary for store objects

A: I like TStringList. I use it for everything. Maybe too much.

 

Q: Sprite sheet explanation confusing.  How big can they be?

A: The sprite sheet needs to be the width of each frame times the number of frames. Same goes for the height. The height of each frame times the number of frames. In this case, it is 3 frames by 3 games. So if the frames are 50px it would be 150x150.

 

Q: Very nice examples. Will there be Steam SDK support ? Or examples soon ? We highly need that.

A: As long as the Stream SDK has normal Windows bindings it should integrate without much of a problem. May take some work.

 

Q: how to handle irregular shapes?

A: Irregular shape collision detection is expensive. You could use a TRectangle until an entity gets closer. And then you could switch to a more expensive (pixel to pixel collection detection). Generally, in these games I just use a TRectangle for all collisions.

 

Q: Can you use a different database other than SQLite? Oracle, MySQL, SqlServer?

A: SQLite and InterBase are the only databases available on all platforms. You could use DataSnap to talk to a remote database, or you could use the REST components to talk to a web service. Starter doesn't include databases though.

 

Q: What modules or libraries do you use for game development in C++?

A: These games just use the Firemonkey (FMX) which is a layer on top of OpenGL/OpenGL ES/Direct 2D/GDI+. Box2D (a physics engine) also comes with the product.

 

Q: does the starter edition provide disk access?  I know published database integration requires pro for local and higher more expensive editions are required for multi-computer database support, however, could one create their own limited database access with starter?

A: Yes, you can certainly write to file

 

Q: Can Starter version use boost library through GetIt package manager?

A: Yes, Boost should be in GetIt. I saw a report a couple of days ago it wasn't showing for uses of Starter but does for Pro and above, but you can always manually install it : http://docwiki.embarcadero.com/RADStudio/Berlin/en/Boost_Libraries

 

Q: Thank you for offering complete games as part of the bootcamp because this helps us to understand the range of techniques needed for game development.  It's a good demonstration of C++ Builder capabilities.

A: You're welcome. We have a lot of demos and samples, not just for games - see games here: github.com/EmbarcaderoPublic but also other demos here: https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RADStudio_Berlin/

 

Q: According to your roadmap, when will C++ Builder support Linux? I will keep the secret if you tell me :)

A: Linux Server support will be in the next release!

 

Q: do the games exists as Delphi too?

A: Yes they do - C++ and Delphi versions of these games can call be downloaded here: https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RADStudio_Berlin/

 

Q: Can you also create 3D games with C++ Builder?

A: Yes, sure :)  FMX has 3D support, and you could use any game engine too if you want

 

Q: What about loading times in games?

A: These ones have no level loading time, all the resources are built in. The apps will start quite quickly on mobile, too, as in the live demo of using them

 

Q: Can you read/write to other game engines? Blender? Unreal?

A: We don't ship with Blender or Unreal currently, but are investigating it... No reason you can't do so yourself though, our compilers are very standards-compliant so should work fine

 

Q: Can you have multiple tablets/devices tethered as controllers at the same time?

A: Yes

 

Q: What are the restrictions on reusing the sound and graphics?

A: They can be re-used just like any other Embarcadero demo. The license on those covers these sounds, graphics, and music.

 

Q: I created a small program in Starter. When the project was opened in RAD XE8, only system32 was possible. All other platforms were no longer there. Do I have to create the project again?

A: create a new project and add your source code files.

 



About
Gold User, Rank: 90, Points: 5
600+ blog posts about Delphi Firemonkey.

Comments

  • Roland Hülsmann
    Roland Hülsmann Saturday, 13 August 2016

    Thank you very much! Now it works!

  • Roland Hülsmann
    Roland Hülsmann Friday, 12 August 2016

    Hello,
    which Options are to set or unset to get an executable, that runs on every windows pc?
    When I uncheck the option "Mit Runtime-Packages linken" (= link with Runtime-Packages), I always get the error "[ilink32 Fehler] Error: Nicht auflösbares externes 'IsValidURL' referenziert von F:\ENTW\EMBARCADERO\STUDIO\18.0\LIB\WIN32\RELEASE\DE\FMX.LIB|FMX.Media.Win". (If on the other side, the option is checked, there will be an error, if i try to start the program on the other machine, missing the runtime.)

  • Eli M
    Eli M Friday, 12 August 2016

    "In the project options, uncheck the linker option "Dynamic RTL".
    In the packages options, uncheck "Link with runtime packages"."

    https://stackoverflow.com/questions/7787267/how-create-an-standalone-without-dll-file-dependencies-cbuilder-console-appl

  • Roland Hülsmann
    Roland Hülsmann Friday, 12 August 2016

    Thank you for your fast answer.
    That is, what I've done, but this don't help! (I'm using the Starter-Edition of C++ Builder.)

  • Roland Hülsmann
    Roland Hülsmann Friday, 12 August 2016

    I forgot to mention: With the other demo projects all works fine! I have no problems, to generate standalone executables. The error occurs only, if I try to build one of the games.

  • Eli M
    Eli M Saturday, 13 August 2016

    Go to Project|View Source

    Add this line:
    #pragma comment (lib, "urlmon.lib")

    Like this:
    #pragma hdrstop
    #pragma comment (lib, "urlmon.lib")
    #include

    Basically IsValidUrl is in the Windows urlmon library through Winapi.UrlMon.dcu. The new line links it in.

  • Please login first in order for you to submit comments
  • Page :
  • 1

Check out more tips and tricks in this development video: