Excellent, thank you. I stand corrected and have removed/edited my previous posts. This information helps me a great deal despite the troll like point bashing and the "you don't know what your talking about" responses. I need more than, "I don't know what I'm talking about". That's just a long way of calling someone stupid. Remember, you can be confident and humble at the same time. This site is about a community, and a community is about helping each other. Being confident and cocky looks belligerent, which is why I prefer humility, especially for something so... correctable. But then again, I'm not the one correcting someone, so it's not my choice and thus, shame on me. Have a good day.
Subtle_WondersMember Since 10 Feb 2013
Offline Last Active Feb 17 2014 09:29 AM
- Group Members
- Active Posts 35
- Profile Views 2,505
- Submitted Links 0
- Member Title Member
- Age 38 years old
- Birthday January 16, 1978
J2SE (Java Core), J2EE, J2ME, JOGL, JSP, Servlets, jQuery, Struts, Hibernate, Eclipse, Netbeans IDE, Hadoop, MySQL, Oracle DB 10g, Red Hat Enterprise, Android, C++, Game Development, Stocks, Indonesia, Singapore, Canada, Games, E3, Full Sail, GIMP, Blender, Scribus, Audacity, Dia, Inkscape, LibreOffice, My Wife, etc...
Posted by Subtle_Wonders on 16 February 2014 - 10:37 PM
The GPL FAQ clearly states that the output of a program is only covered by the licence if the program copies part of itself into the output
To insure that the words "copy" and "introspecting" are not being confused with each other, I pose the following question to you:
Could you please clarify this, specifically what Blender is referring to as a "standalone"? No assumptions please.
So I can make games without having to worry about the GPL, right?
Games created in Blender (.blend files) are program output and therefore not covered by the GPL. You can consider them your property, and license or sell them freely.
With stand-alone games however, any data that is included inside the actual stand-alone executable is covered by the GPL. If this is a problem then you should set up the stand-alone player so it reads from external .blend files. A common practice is to include a "please wait, loading..." scene in the standalone, and read level files externally.
The Blender standalone player or the game player can be sold commercially too, but you have to make it available under the GPL conditions.
I'm assuming you are incorrect. However, if you are indeed correct, you'll be helping me a great deal in the long run. Please provide reliable citations to the answer regarding the question I pose to you. Thank you.
Posted by Subtle_Wonders on 16 February 2014 - 08:37 PM
Removed/Edited due to errors found in my statement.
Posted by Subtle_Wonders on 12 February 2014 - 10:32 AM
Removed/edited due to errors found in my statement.
Posted by Subtle_Wonders on 04 February 2014 - 12:59 PM
To understand OOP (Object Oriented Programming), it's likely best to understand what an Object is when referring to programming.
Consider the following:
You are a car mechanic.
A car is delivered to you, and it requires a tune up.
You find that several nuts and bolts are lose on examination.
You search for and acquire an adjustable wrench.
Using the adjustable wrench, you tighten the nuts and bolts.
The result of using the adjustable wrench returns a task completed.
Since there are no other tasks associated with this tune up, the tuneup is completed.
A second car comes in.
The car requires a replacement radiator.
On examination of the radiator, you determine that an array of tools are required, including an adjustable wrench.
You search for and acquire an adjustable wrench.
You use the adjustable wrench to loosen bolts.
You use other tools to further allow the removal and replacement of the radiator.
A new radiator is installed.
You use a combination of tools to again mount the radiator.
You again use the adjustable wrench to tighten the bolts.
The result of using the adjustable wrench returns a completed task (as with the other tools).
Since there are no other tasks associated with this radiator replacement, the replacement is completed.
An object seen in the two examples above would be the adjustable wrench.
In programming, a object is essentially a class that gets instantiated, meets a criteria, and can be reused. For proper object creation, it must meet these four requirements:
It must support polymorphism.
It must support overloading.
It should support overriding (for consistency).
It should support encapsulation (for security).
Much like the adjustable wrench in the above example, the adjustable wrench was performed on both a tune up and a radiator replacement. It essentially was used to remove and tighten bolts and nuts in two different scenarios. The nuts and bolts between the two cars were different, but were classified as the same type of property of which an adjustable wrench be used with. Likewise, two different sets of code may require the use of a class for different reasons, but pass a similar type of peropty and require a similar return value. This is essentially polymorphism, because the same object was used for the same reason with a different set or properties in two different scenarios (you had to adjust the wrench size for different size nuts/bolts two separate jobs, but got the job done with one adjustable wrench).
The biggest challenge in OOP is thinking outside of primitives. As novice programmers, we tend to think int, float, double... and the associated values to such. But OOP is both similar and different. An object is a container of values/properties. The easiest way to truly understand an object is to understand a structure in C. You have an entity, and that entity has properties. When you use that entity, you can call one property, a set of properties, or all properties stored. If you want to get more complicated, you can stored objects within objects, and would have to iterate through the first object to access the nested objects, for the values stored in the desired object. Tricky, huh? To further understand this, I would highly recommend studying data structures.
Overload is hard to explain without confusing people. I would recommend researching it. In simplest definition, overloading is when you call the same function/method of a class, pass a different set of parameters. The parameters define which of the identically named function/methods you are calling.
Overriding is when you are quite literately calling a method of identical name and parameter, but of a child class, which invokes the use of that method over the identical method of a super class. A clean example of this is when you define a default constructor which is required in instantiating a class (for Java and C#). Another way to look at this is saying you have two classes, class 1, and class 2. You have a function/method called public int GetMe(int i) in both. To get to class 2, you must first instantiate class 1, then using that object, instantiate class 2. But instead of using GetMe(int i) in class 1, you use it in Class 2. You are overriding the GetMe(int i) method of class 1 with the GetMe(int i) method of class 2.
Encapsulation is when you use access modifiers like private, protected, etc to hide variables from super classes, but give access to change such values through methods like setters/getters.
Again, if you truly want to understand OOP, study polymorphism, overloading, overriding and encapsulation. I would also advise studying further into containers and data structures, and learn how to use iterators. You'll never ask this question again if you know these key aspects. Best of luck to you.
Posted by Subtle_Wonders on 26 January 2014 - 01:39 AM
GPU will definitely be the most important consideration, although I'm not sure less than $500 is realistic for a development laptop. Usually you spend extra on development computers so you can save time. Getting a cheaper development machine means you'll need to run release builds instead of debug builds far more often, and that's harder for debugging. You'll also have to optimize earlier and more often, which will probably lead to development effort that later gets thrown away anyways.
To help provide guidance:
The only time a GPU becomes essentially important is when you are considering cross platform support or are pushing graphics to the very limit of it's hardware capabilities. For example, when tackling code in a Mac/Linux/UNIX environment, OpenGL will be used, over DirectX, Direct3D which is exclusive for Windows. This fundamental difference would decide whether or not it would be safe to go ATI or nVidia alone. When pushing hard on graphic hardware, that'll narrow the choice of the GPU even further. However, for a lesser hardware critical game, it's better to go toward a middle ground, such as an Intel or nVidia simply for the sake of compatibility. Computer animators on the other hand, have a vigorous requirement, but that's a different subject altogether.
Now, while a GPU can be the most important feature for gamers, and are important for programmers, it is not the most important role for developers. In fact, if we had to talk about hardware at such a low level, I would say, in that low level requirement, a CPU and associated BUS on the mother board would hold a greater importance because of the compatibility needs of the compiler. But frankly, even that's not true for a higher level design paradigm because essentially, the OS takes care of almost all of that for you, even on Linux.
To the point at hand:
What I would do is focus on something with a strong processor, that has as many threads as you can get, and has a proven track record for reliability. Games are typically designed to be thread dependent. I would suggest an Intel Processor within the i series for the sake of running fast compilations and executions. You want loads of RAM and a fast hard drive because nothing sucks more than a IDE that crawls and crashes. Don't worry too much about HD space though, as you should get in the habit of backing up your data on portable media, a CVS or SVN regularly, all of which should not be on your system to begin with.
For a GPU, I would highly suggest staying away from anything that is ATI simply due to cross compatibility reasons. While nVidia is a wise choice for a GPU brand, adding a reasonably good nVidia GPU along side with a i series CPU on any laptop usually brings the cost fairly high because the i series CPU's have built in graphics support, essentially having 2 GPU's in one system (a luxury or in your case, a feature as a programmer depending on your role and needs).
For more information on nVidia GPU's, I would suggest visiting this site, and narrowing your search down further to what you need: http://en.wikipedia.org/wiki/GeForce
Remember, you want to cross check the GPU you are interested in with any platform you may be interested in focusing on. A simple Google search for a GPU type and a Linux Distribution can bring up a lot of information for you just for developing on Linux alone.
For CPU, I recommend an Intel iSeries. However, you can review a list of CPU's and get a genuine idea of which one ideally works for you by going here: http://www.cpubenchmark.net/
I don't do game design, but I do play games, and I do develop code in Java. I wanted a cheap laptop that was a good middle ground for all of this. I found that a AMD A8 Quad Core with a ATI Radeon GPU stood on equal ground for gaming to a i3 and some i5's, met my requirements for coding, and dropped the cost by $300. Plus, I got even more than I could have expected. I honestly thought League of Legends wouldn't run on it, but I was proven horrible wrong when it rocked the game.
As for laptop brands, that could be important as well due to driver support and general reliability. In such cases I would suggest a Lenovo, HP or in some cases a Dell. I personally got a Samsung, but my focus is not game development so I can't suggest that.
Unfortunately, I can not give you any recommendations on sound support, as that is way outside my support and interest scopes. Hope this helps, best of luck.
Posted by Subtle_Wonders on 25 January 2014 - 11:14 PM
I may get shot down for this but... What are your thoughts on Unreal?
That is a seriously good question in my opinion, one of which I would like an answer to as well. My programming experience doesn't fall within games, but I am very much interested in knowing if this does or does not work as a suggestion, and why. Skwee seems to know his stuff, and what he's looking for, as well as why. Getting some feed back from him, if not someone who has worked with Unreal Engine would be nice.
Per wiki comments:
EDIT: Whoops, looks like I didn't see their were 2 additional pages full of comments after Godmil's post. Sorry about that.
Posted by Subtle_Wonders on 04 January 2014 - 06:35 PM
I just got a new book about C and I am excited to learn the language that is used in most games, but the book says I need to install GCC. I found the GCC website, but it doesn't seem to have any download link anywhere. The only link it has leads to cygwin.com, and I don't see how that is related to C. Can anyone give me the link to download GCC for windows?
I am happy to see you have found a strong interest in learning a new language.
One final addendum: C is hardly used in games anymore; it tends to be the language of the lower-level kernel hackers. C++, however, is still widely used. C# also is making a strong showing, and if you go that route then Visual Studio is a good choice as it supports both C++ and C#.
What JTippetts says is true. However, I feel it is still important to learn the C programming language as it gives you an appreciation, if not a better understanding of what goes on in higher level languages like C++ and C#. Also, by understanding the differences between a low, mid and high level language, you have the needed awareness of what to be cautious about in programming high level applications (such as some games). C++ is, in my opinion, one of the most powerful languages around. This is essentially because C++ can be used in a C like low level paradigms or in a C# like high level paradigm. But with that power, comes the dangerous practice of mixing a low level and high level paradigm in a single application. This should be avoided. Not knowing the difference could get you in a lot of trouble, which recaps why I feel you should learn C.
Also, remember that since C++ is backwards compatible to C, you could simply install a C++ compiler, its libraries, and an IDE to support it while still learn C through use of it.
Or you can download Visual Studio, like JTippets suggested, which is probably the better option! Note: By "Express version" of Visual Studio, that doesn't mean it's limited or useless or slimmed down. It's fully functional with everything you need - including if you later want to sell your programs commercially.
What Servant of the Lord refers to is also correct and vitally important. As novice programmers, many people tend to not realize the vital importance of understanding the complexity behind copy right laws, and where copy left laws associate. It is important to understand the clear definition of what GNU means, and how it applies to anything you create. For more reading, see here: http://en.wikipedia.org/wiki/GNU_General_Public_License
Now, all methods of setting up your IDE listed from Servant of the Lord and JTippetts are correct and are very useful. But both methods will also come with the proprietary development of Windows programming (some exceptions with Qt and Cygwin). Assuming that you one day wish to expand to other operating systems, another option for you is to use the Eclipse IDE. For right now, I would avoid using it in Windows as it requires some greater knowledge in configuring it with a C++ compiler. However, when you do feel ready, it can be setup to use MinGW, Cygwin, Linux/UNIX or the same compiler used by Visual Studios! And because Eclipse is not GNU licensed, you could also program on a Mac and still sell the game!
If you want to get a feel for how it works in a different OS environment, you could do it by simply following the below steps:
1.Download/Install the Oracle VM here: https://www.virtualbox.org/
2.Download CentOS here: http://www.centos.org/
3.Run Oracle VM and install the CentOS in a virtual environment. Here's a tutorial on installing CentOS:
NOTE: When installing CentOS, choose the prepackage option (step 19 on the tutorial) of a Software Development Workstation.
4.Run the OS, Log in, and start the Eclipse IDE (The Linux C/C++ compiler is already configured for you).
5.Follow the steps normally taken in creating a C++ project, and start coding away.
NOTE: 3D programming may require additional Linux RPMs and may not run properly in a VM environment. Additionally, 3D programming frameworks associating to DirectX and Direct3D will not work on Linux without WINE bindings. Finally, when you develop using Eclipse on a Mac, you'll be using a different compiler, which may require a manual configuration in the Eclipse IDE.
To make full use of my recommendation, learn how to use preprocessor directives, and make your code very efficient for cross-platform execution (an advantage of learning C). The preprocessor directives can judgement whether to use Direct3D or OpenGL based on which compiler is detected. In essence, a solid application will only need to be compiled multiple times between different compilers generating multiple executables. Thus, all you would do is create a script that decides which executable to run based on which operating system is detected and you have a cross-platform package with multiple executable that were compiled with absolutely no coding differences.
Posted by Subtle_Wonders on 01 January 2014 - 01:47 AM
Great post Subtle_Wonders. That is the reason I like posting here on Gamedev. I like lengthy and informative responses (yes, I do read them). I always reference my posts, and I don't post unless I can benefit from the responses as well. Also it helps people who are coming here looking for information. Nice variety here too.
I like how you say don't go to another phase until I finish one. That is one of my issues. I jump around to and fro. I never really have had a plan for a full project yet (tried to wing it once). Of course, I haven't had an idea that is attainable that I am interested in completing.
Right now I am only testing ideas because I still need to work on my 3d modeling, texturing, programming and animation skills (all on my own on this). I am going to check out the SDLC model right now. Thanks!
Edit: Thanks for that Wikipedia link! Lots of good information there, and it is almost just what I needed to read! I am excited about it though, because I needed some educated information on how to get a project started and how to follow through with it.
I like the part about the feasibility study. Going to look int RAD and XP also. Thanks again.
Glad I could help. I used to work on voluntary game projects at Hard Light Productions found here: http://www.hard-light.net/. They made ready use of the donated Freespace 2 game engine from Volitation: http://en.wikipedia.org/wiki/Volition,_Inc. I wasn't a programmer back then but what I often saw were really great idea's crush or projects completed but not nearly to the expectation it was set to because of poor control over the project. Management over a project is just as important, if not by far more important than the programmer him/her self.
The one group who really achieved much at Hard Light Productions was the Wing Commander Group backed by Tolwyn. Their game could be found here: http://www.wcsaga.com/. You can quite literately feel the work and professionalism in their product. Tolwyn made full use of project management. He was very organized. He had a bug tracker, a story script, he broken down teams and assigned them small tasks. It may have taken him well over 4 years, but he produced a really top notch game because he was very well disciplined with the development model he was using.
Posted by Subtle_Wonders on 31 December 2013 - 08:20 PM
One of the rules for programmers is to pre-test their own code before submitting it for integration with other tasks and passing it to QA (Quality Assurance) testing. For example, in Java, this is done using JUnit.
Also, if you are working on a project yourself, you need to incorporate a great deal of self disciplined. For example, in my line of work, I must adhere to the SDLC (System Development Life Cycle). http://en.wikipedia.org/wiki/Systems_development_life-cycle
To further clarify, a perfect world example would be as follows. And please, I'm only including the part related to this thread:
As a designer, you need to develop a flow chart, UML or other form of plan'o'gram that gives you a general idea of what you need to make the most basic, working application possible. Once you have this, you need to break it down in tasks. Normally, tasks are broken down in classes. You only further add to the design after you reach the criteria of the current design. You stop at each level of your design. Assuming you planned out your most basic working application, you stop here for now.
As a developer, you need to give yourself one task at a time as if you were taking the tasks from a basket offered to you. When you work on your task, you must pre-test your results. You should not work on another task until you are confident that the task you took responsibility for, works. You continue doing this until you have no more tasks left. If you find a problem that prevents you from finishing that task, you document and move on to the next task. If you have any incomplete tasks due to problems, you then revert back to a designer to amend then return back as a developer to apply the change. Assuming you have no further tasks and no problems, you switch to QA..
As a QA (Quality Assurance) tester, you need to spend hours, if not days trying to break your program. Don't fix anything as this is micro management and a bad habit. You document, and you do A LOT OF DOCUMENTATION. Make sure what you document is well defined and well coupled with a bug. Create severity levels to associate with the bug. (e.g., Understand the difference from a hard crash (CTD [crash to desktop]), a soft lock (endless loop resulting in a unusable program), and partial lack of functionality but a running program none the less). Once you can't find any more bugs, you stop here. If their are bugs in your quota, or the project is not ready to move into the implementation phase, you go back to your developing phase to apply the fix and/or designing phase to move into the next design model of your program.
You repeat this cycle until either you reach your time quota or the achieve your design expectation; which ever one comes first. Then you move to the implementation phase; that's where you often see games moved into beta, for public testing.
To summarize, if you want to make a game unbreakable, you need to adhere heavily on the SDLC model, and you must practice extreme disciplined on yourself since its likely your doing it yourself. The two things that cause a game to be breakable is a deviation of the SDLC model or a time restraint. Remember that.
Hope this helps. Feel free to amend anywhere I'm wrong or add further in areas I am weak on. Thanks.
Posted by Subtle_Wonders on 31 December 2013 - 12:53 PM
Yeah... And IBM didn't impose the requirement that lead to the myth of Bill Gates quoting that no one would come close to using more than 640kb of memory in the DOS age. [http://en.wikiquote.org/wiki/Talk:Bill_Gates]. Yet, here we are again confining one of the most fastest growing technologies in a web browser and calling it the future. No punts directed at you Buster2000 as I've hard this too.
1) User credentials will be heavily vulnerable to 3rd party interceptions.
2) Customer support will have no clear scope of support because the game is in a browser that doesn't belong to the developing company.
3) Confusion of responsibility for some issues (browser development or game development).
3) Changes to web browsers via updates (and their are many of them) may inject compatibility conflicts, resulting in higher maintenance costs.
4) Web Browsers will increase the need for minimal specifications, reducing sale volumes.
5) A potential of reaching a maximum specification scope defined by a web browser.
And since a web browser is also used for practically everything else, you'll be running into tool bar conflicts, plug in conflicts, spyware, viruses, antivirus conflicts, etc... There's just way too much liability for any serious financial investment.
SIDE NOTE: Thanks TheChubu for the clarification on Bill Gates.
Posted by Subtle_Wonders on 30 December 2013 - 10:34 PM
You sound passionate and extremely determined. After reading at least half of your opening statement, I couldn't help but feel over whelmed myself.
A lot of people here have given you some really good advise, except for perhaps the most important one you need. You're recreating the wheal and you're not realizing it. You need to take a step back and research what you're actually doing, and what you really want for the work your dishing out. Don't get me wrong, what your doing now is great. You're teaching yourself a great deal about the mechanics that goes on deep inside a game. However, if your desire is simply to get the result of a game and not a game engine, you're going about it the wrong way.
Just like frameworks are used to simplify your tasks and project needs, so are game engines and game engine SDKs. See below to get an idea of what paths their are, and which one you believe your taking:
There are three options below that I know of:
You can create a game engine
You can create a game using a legacy design paradigm (creating a proprietary game engine for the game you're designing)
You can create a game using a more current design paradigm (using frameworks, game engines and game engine SDKs).
From my perspective, you are either creating a game engine or creating a game using a legacy design paradigm. However, from what I read, it sounds like you simply wanted to create a game; preferably one in 3D.
The current design paradigm for most game developing industries, is to use a game engine, and program around it. The biggest bulk of math is already done, SDL/OpenGL (low to mid level frameworks) are already implemented. You simply need to understand the core language and the game engine's frameworks in order to get the results you are aiming for. Look at this game as this would be an example of a professional grade game in development: https://robertsspaceindustries.com/
Now, their are several game engines out there:
Cry Engine http://www.crytek.com/cryengine
... and so much more (wiki has them for Java, I'm sure it has them for C++ too!)
Now, if you do plan to go into making a game from the bottom up using the legacy design paradigm, there is no shame in this. However, let me stress this:
Full Sail University has a 22 month BS degree for game development. Approximately 10 months through the degree, students are assembled in a team of 3 to 5 people and are required to make a fully working 2D game in under one month. The work load is shared. A 3D game is not worked on until the 19th month where a team of 5 people focus on making a 3D game in 3 months. Again, the work load is shared. The average work load per day and per student is 12 hours (4 hours lecture, 4 hours lab, 4 hours homework) every day for the 22 months. Also account for the fact that the layout of education is already done for you, and you don't have to research what you need to learn next (e.g., You need SDL for user input, OpenGL for rendering [except on MS Windows!]).
Now, I'm not trying to discourage you, but if you plan to make a game from the bottom up and wish to incorporate 3D, you need to consider comparing your self to students who go to that school. So, I throw this question at you again. What are you really aiming for?
I hope this is helpful to you, as I honestly feel you deserve a break. For others reading, please feel free to add to this, or correct where I am wrong as this guy truly deserves some healthy direction.
NOTE: You do not have to change your programming language to achieve your goals. That only occurs if their are no frameworks you can use to achieve the result, and you can't afford making the framework yourself.
For the record, I program in Java, not C++.
Posted by Subtle_Wonders on 29 December 2013 - 12:47 PM
But we're talking about video games and I don't believe the reason you listed is why it's used in most (maybe just most AAA) video games. I was trying to list why most video games use it.
I listed the reasons that seem irrelevant because games are being developed with far more complex mobile paradigms than they did in the past. Greater mobility requires complex networking and database accessing strategies. In addition, greater mobility also accounts for an array of hardware/OS platform requirements to design on. Now, judgement the factor of a greater need for security, and a insane amount of recreating the wheal for several different hardware/OS platforms, and you have a huge gap in liability and practicality. But that's just my honest opinion.
The company I work for favors .NET but we have many of the apps that you speak of. I don't mind the Java language but I think the slow startup for Java just kills it for me. That's just my opinion through my experience though.
Ditto. I won't hesitate to admit that Java has its weaknesses. What frustrates me is, weaknesses can be overcome, yet their is just not enough marketing power backing up Java in the areas where it could greatly enhance its 3D and game based frameworks. Yet, Java's strengths are without a doubt what the mobile entertainment industry needs and is looking for. It's plainly a double edged sword.
You saying that c++ is used by those who don't know any better sounds like either you've never used the language or you couldn't learn it or you were looking for something easier.
C++ is without a doubt a great language. My problem is not with this great language. It's the human factor and a lack of reliable frameworks used for secure networking and database accessing. Making a great AAA game that's fast, fun, graphically and audibly awesome is great. Making no money off of it because of database injections and piracy due to mixing low level and high level paradigms is not.
Translation: "It is a fact that what I don't like is terrible, and everyone who likes what I don't like is stupid".
Which is precisely what we are saying when individuals inside the C++ box can't think outside of it, and for reasons that would otherwise benefit them.
I don't appreciate you putting words in my mouth.
I speak in generalities, not universal truths, and I would hope you'd be attentive enough to notice that. I'm not saying anything about "everyone" I'm saying that there is a definitive trend. Which means there will be exceptions.
I also never said C++ wasn't the best available choice for some applications. I just happen to think that that's a damned shame.
Posted by Subtle_Wonders on 29 December 2013 - 03:37 AM
The sad truth is C++ has many benefits when compared to many other languages and we are sort of "forced" to use it if we want to have fast programs that can run on any hardware and we know will still be around in 20+ years. I would love if C# ruled the world myself, but sadly it doesn't.
That fast process you are talking about my friend is primarily the pass by reference part of C++, which is a huge trade-off to security and portability. The part of C++ that I feel makes that language shine is it's ability to be a low level, mid level and high level programming language. However, valuing the low/mid level part of the language for the speed, in a high level development paradigm is a design weakness. Best be careful with that logic. ;)
Editorial note: Sorry, I just realized I posted twice on the same thread. lol Silly me.
Posted by Subtle_Wonders on 29 December 2013 - 03:25 AM
I don't believe any language is truly superior to the other. That's unless, you start talking about targeted platforms and design paradigms. This is because you're also now talking about frameworks. The biggest void I find in debates like this is the confusion between what works better versus what is more convenient, practical and cost efficient to code with. With that said, I completely agree with ApochPiQ. People who like C++ typically are the ones lacking experience in other languages and development paradigms.
Moving to something more personal, I would favor Java. With so much mobility, I feel that .NET and the JVM rain dominant as a mobile developmental option. However, Java is free, as is learning it and having access to all Java SE APIs. Also, Java is practically the preferred language for developing standard programs on the Android OS as their are not one, but two very powerful APIs for it (Oracle's Java ME and Google's Android SDK). If Java had a 3D framework that was by far more competitively scalable, economically efficient, simpler, and maintainable, there would be a lot more threads about gaming in Java in comparison to C#. Think about it: Java has it's roots well planted in network scalability and mobility, while C# has it's roots well planted in mobile presentation. They both can perform just as good as their counterpart, but Java lacks in presentation. That's why when you compare game engines like Unity versus jMonkey, it doesn't take much to figure out that Unity looks a hell of a lot nicer. However, start talking about business logic with Apache Hadoop, Oracle Weblogic, IBM Websphere, what ever SAP uses, or the Android SDK, and you pretty much talking about Java.