😗 HI,
Here is just some honest thoughts from my experiences.
I think it's great that you want to develop your own game. If you are considering this route, be prepared for a lot of learning ! ^^
Game development is the easy part, you can easily imagine what you want the storyline and characters to be like. Where, when and how the game plays off etc. Maybe even thinking about how, for example, the Alien faction are gonna look like.
The time consuming and difficult part is getting a program to do exactly what you intended, in any possible scenario or combination thereof, bugs are a commonplace in software development. Then there is the complexity of procedurally aligning your thoughts and ideas into code to be understood and interpreted by the Computer for runtime.
Before I delve into creating a game engine, you need to consider a few things. Most important, what Platform are you aiming for? What will the engine have to handle, like fast motion for a racing game or massive worlds for a MMORPG ? But I won't bore you to death with too many concepts. I just want to get you in a Game Developer mindset.
Because software is always changing and developer numbers are increasing rapidly, literally millions or even billions of applications has been written and perfected over decades of trial and error. Some early Assembler programs, one of the first, and most difficult, and very low level languages, were simple single function programs with a single mission. A example is command.com (todays cmd.exe in Windows). It's sole purpose is to allow the user to give commands to the computer by typing the desired command(s) in a command line and executing that command. But basically just a middle-man interface between you the user and the code-behind,or inner workings, taking care of technical bits like accepting keyboard input and how to output the text to the screen among others, which the user does not care about and do not want to code every time he wants to view the files on C drive. Remember MS-DOS ?
A concept was born named, Code-re-usability. Some clever people came together and created/collected some standard base-classes, or library's of code that had virtually no more bugs and where tried and tested, and standardized. This led to increased productivity as time was not wasted recreating existing code. The library's grew ever larger and more complex programs came into existence. Which in turn created higher-level languages. For example take a snippet of C language telling the computer to print a given string of text to the command prompt: <cout = "Hello user" /n>; You can think of the 'cout' word, said as "see-out", being a high level keyword invoking low level language procedures/programs that knows where the screen is and how to display text and where. All you need to know is the 'cout' function/method prints a line of text and expects at least a string of characters to be passed to it. Congratulations, you just learned your first C language syntax! There are generations of development languages growing in complexity and functionality. Some of them being Assembler, Basic, Cobol, C, C++, Java , .NET, C#, HTML and some that died out. But I'm getting a little off of scope. But get the idea ?
Thats why a great many API's(Application Programming Interfaces) have been created like DirectX from Microsoft, and OpenGL, a Open Source API, taking advantage of accelerated computer hardware like Graphic Accelerators and extended CPU instruction sets like 3D-Now! from AMD and MMX, SSE and Hyper Threading from Intel, to name a few. Other third party companies has created their own engines built on top of DirectX and OpenGL standards for example the Unreal Engine , Havok and CryEngine and more.
Sure, there are many, many, many API's available, even Open-Source tools. A nice beginner C++ library to use is Allegro. It has some handy pre-coded fuctions like blitting bitmaps to and from RAM into GFX-RAM. Support for alpha blending, drawing primitive shapes using hardware and VERY handy mathematical functions for working with complex calculations, like predicting a point target. Also includes a sound library and joystick support.
Whoo, what a mouthful.
But I really only scratched the surface here, and you also need to learn a language first. I would recommend starting with a generic Programming principals guide as all languages share some limitations and basic fundamentals. Then, Java is a good cross platform development language, as you can port your code straight into any device with Java enabled. There are oodles of documentation and tutorials available everywhere. And the best part is the syntax for C++ is very similar to Java, and C# is similar to C++.
If you do go through with this topic it can be really rewarding and competitive at the same time. Technologies are emerging so fast that if you take to long to develop your game, by the time it reaches the shelves, you are behind again. This is also the reason big game houses have vast teams of developers working months on end to create the stunning games we enjoy today!
But go google around, I gave you a quick crash course to get you started right away..
(PS. I hope I did not make many mistakes, I am very tired now and off to bed)
😴