Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 12 Mar 2005
Offline Last Active Today, 04:43 PM

#5272900 Are design patterns crucial for game development at the beginning?

Posted by frob on 27 January 2016 - 05:20 PM

Is there something specific you are trying to learn about?


My own general c++ book recommendation list is located here.


Be aware that there are many tutorials, guides, and books that have terrible errors and major flaws. Others cover the language well but are difficult to read or present the material poorly.


There are also many outdated books that no longer apply. The history of C++ goes back to around 1979 as a C compiler, the name changed to "C++" in 1983. If you pick up a book describing C++ as it existed in 1983 or 1989 or 1995 the code will probably not build on a modern c++ compiler.





As Josh mentioned, design patterns are just names for common things. Like "Peer to peer", or "shared blackboard", or "event driven system", or "factory method". They are common patterns encountered all the time in software that people give names to easier communication.  


It is like a mechanic talking about "skew gears", "reduction gears", "miter gears", "worm gears", "rack and pinion gears", etc.  You don't have to use all of them in projects, but they are useful to know so everyone can mean the same thing when they talk about it.  They can say "Rack and pinion" and you know "a wheel on one side, a bar or track on the other".  


The are things you will eventually learn, but it is not essential that you learn all the common patterns up front. You will learn about them, see them, and have them described to you often enough as you learn. Eventually you'll probably want to read some books to ensure you've got the basics covered, but it isn't necessary for the beginner.

#5272849 Dungeon Crawler [WIP]

Posted by frob on 27 January 2016 - 10:42 AM

Good luck on your project. It sounds ambitious.


Usually it is best to learn on the PC directly rather than learning on a mobile device.  You will have a learning curve naturally, but adding the complexity of mobile development -- build and deployment chains, remote debugging, and less-functional tools than are on PC -- it makes the learning curve that much more difficult.



You might consider starting much smaller for your first game.  Start with games like "guess the number", and a text-based tic-tac-toe. These are good for learning and gaining skill. Dungeon crawlers are certainly smaller than large 3D productions, but they still are major works.


Even so, dream big.

#5272778 Beginner-friendly language implementations with great portability, performanc...

Posted by frob on 26 January 2016 - 07:11 PM

I'll just quote the well-written FAQ on this rather than trying to wordsmith it myself:

C++, although a popular language in the production of commercial games you'll see on store shelves, is generally considered to be an extremely poor choice for a first language, largely due to its advancing age, cumbersome nature, and most importantly its cultural design bias towards the idea that the programmer is always correct -- which is an assumption that is almost never true for a beginning programmer. Such traits can complicate the learning process, and while it is certainly possible to learn C++ first, it tends to be sub-optimal.

The amount of things you need to know in order to follow c++ idioms is rather large and highly technical. It is generally easier to learn the basics of programming in a language that is far more forgiving of errors.

#5272760 Beginner-friendly language implementations with great portability, performanc...

Posted by frob on 26 January 2016 - 03:50 PM

Would it be helpful to explain why LuaJIT, C#, etc. don't meet this criteria, or what I consider development practice red flags?



C# and Python are frequently given as good languages for beginners. They have relatively shallow learning curves, plenty of documentation and learning materials, and are quite capable.


Lua is popular in games as a tool for people not trained as programmers to do some light programming and scripting.



What specifically about them don't you like?  


Whatever you choose, recognize that there will be work involved.  For some reason, most people balk when they discover that opportunity is dressed in overalls and looks like work.

#5272741 Software that use Component Based Architecture

Posted by frob on 26 January 2016 - 11:44 AM



I don't have one. There probably isn't an official source on such things.


But it's hard to find an enterprise Java application from that period that doesn't use Javabeans in some capacity, and all the relevant features of Javabeans are now included in the Java standard library. COM is used by literally every Windows application of any note - for example, DirectX is a COM API, as is the Windows Shell (desktop environment), and ActiveX. The core concepts from COM are included in .NET these days.



I'd also give a very high ad-hoc estimate. I'd give much higher than 90%.



All Java-language business software I've seen or worked with makes extensive use of beans. Even very small projects based on toolkits like Spring rely heavily on beans because the toolkits rely on them.  Database engines similarly are modular components.


When it comes to Windows-based apps, I'm not aware of any window-management or form-management UI system that is not designed around modular components. Database access again is modular with components and standardized interfaces. Everything networked is based around component-ized modules and frameworks.


Every library I can think of off the top of my head uses component-based designs. Even things like language standard libraries rely heavily on components-based designs. 


Even the C++ language itself, the 'virtual' keyword and functionality was built to provide a common built-in way to provide common interfaces to modular objects.  Before that in the 1960s and 1970s nearly every program would use a structure with function pointers to accomplish exactly the same component-based swapping of parts.




About the only thing I've seen in the past few decades that DOESN'T follow component-based architectures are the tiny little 'hello world' learning programs, or quick-and-dirty five-line scripts that don't touch any major libraries.

#5272656 Software that use Component Based Architecture

Posted by frob on 25 January 2016 - 09:16 PM

I've worked both inside and outside the game industry.

Pretty much all well-designed software I've worked on has used composition, and hence components, to good effect.

Any time you want to swap out behavior or build things out of other things, composition is probably the right tool.

Probably the most boring work of all I've worked on, various ETL software I've worked with, uses components. ETL is Extract / Transform / Load. Basically boring software that selects values from one database, runs a simple transformation to rename fields or run some calculations, then loads it into another database, still uses composition and components. An ETL job can chose from bunches of pre-written transformation components to map from one type to another.

Most of the good AI libraries and machine learning tools I've worked on have used composition well. Compose a network from a collection of algorithm components taking input and giving output.

Most of the image processing tools I've worked with have been based on component models, adding in kernels of various types.

The family history processing tools I've worked with have used component-based designs for how each step of the process worked through their process from name extraction and indexing through searching and tree building. Even though each team had radically different software each of the many tools used a component design to allow for service discovery, for workflow across the various systems, for continuous deployment, and so on.

And well-written games use it all over the place. Composing game objects out of smaller blocks of logic and behavior and actions.

Composition is a core facet of good software design, but sadly one that many students fail to study and too few teachers teach well.

#5272587 Online RPG Game Programming

Posted by frob on 25 January 2016 - 11:00 AM

Moving to For Beginners.


Online games are much harder than local games. Since you're talking about basics like rendering frameworks I suggest you don't worry about online play until you've mastered the basics of creating a game.


I heard that libGDX and LWJGL are such good things and quite enough to develop the kind of game that I want, but I'm not sure that if it's better to me to start working with C# and tryout a better engine like Unity or that kind.

All of them are good options, but they have different types of work needed.


If you go with either of the libraries you will need to build most of the game-related systems yourself. That will mean you spend a lot of time learning about low-level systems. If you don't have a good guide or mentor it can also mean a lot of time floundering, or not knowing about standard practices and instead building whatever you can imagine which may be more difficult to build or difficult to use than necessary.


Tools like Unity, GameSalad or GameMaker Studio provide a lot of pre-built game functionality letting you spend more time building your game rather than building infrastructure. However, as a side effect you will likely know less about the details of how things work under the hood. You get your game built far more quickly using off-the-shelf parts, but you may not have a good understanding of how those parts work.


Neither is wrong, and a lot depends on your goals.  Some options can help you reach your goals -- whatever they are -- faster than others.

#5272437 C++ design advice

Posted by frob on 23 January 2016 - 11:14 PM

Games like that are classic state machines. Rooms are states with transitions between rooms. Objects either are in states or have states, or sometimes both.

Classes generally should only have a single responsibility. In the case of this type of text based game, manipulation of state is a single responsibility, and it is something that tends to get reused many times. You can have a state machine of the world and location in it, another state machine (or multiple) for the objects in the game, another state machine for the flow of the story. When designing code it is good to identify responsibilities, especially responsibilities that are duplicated in many times or places that may not be immediately obvious. Identifying how things work, the responsibilities involved, is a critical skill.

You might get some ideas for the code by reading this article and reviewing the code.

#5272319 Free & good multi-platform framework (any language)

Posted by frob on 22 January 2016 - 06:41 PM

So you don't care what language, you don't care what platform. You don't want an engine, you don't want Unity.

X Window System

I imagine if you want a better list you'll need to refine your requirements, listing specifically what platforms you want to target and what languages you want to target. You probably don't want something with Cobol or Fortran as the language of choice

#5272254 Will launch game on PC first ruin the console sale rate in future?

Posted by frob on 22 January 2016 - 09:11 AM

Staggered launches tend to have a more difficult time for major games.  They cannot share a marketing and social media push, cannot share the 'network effect' of people talking about it with their friends. Depending on the brand and product lifetime that may not be an issue, or it may be a critical issue. 


Staggered launches for hobby projects with no marketing behind them may get a slight benefit. Since mobile app stores have around 1000 launches per day, there is a very slightly higher chance they will get noticed if they've got multiple staggered releases. 



If you're working with the major publishers for a console release, your contacts at the companies can discuss release dates in depth, with concerns about what other products are releasing on the same date or nearby dates.

#5272252 How to customize the animations generated from mocap?

Posted by frob on 22 January 2016 - 08:58 AM

Depends on your mocap system and the data files being used.


Assuming your data can be loaded into Maya or something, you would edit the data there.


for "reaching for an item" there are several options.  One is to use an IK (Inverse Kinematics) system to mathematically solve for the final adjustments. Another common solutions is to have several predetermined heights and distances used through the game. For example, you might have predetermined heights of "floor height", "knee height", "waist height / countertop height" and "head height'.  Then use those heights and object placements everywhere.

#5272190 Do I need a Laptop or a PC?

Posted by frob on 21 January 2016 - 04:16 PM

Someone in my office just made a relevant quip, so quoting them:


The difference between a $3000 computer and a $600 computer is about six months.

#5272189 Python for 1st language?

Posted by frob on 21 January 2016 - 04:05 PM

I don't like JavaScript, I find a lot of the scripting things are an abomination.... but I know several people who recommend it for a first language.  


There are great debugging tools in Chrome and most budding young programmers already have it installed. Tutorials are easy to come by.


For a beginner, someone who is just learning to understand the basics of programming, I can see the appeal. Free hosts are everywhere, it takes about five minutes to get a WordPress site working. Inside that you can immediately drop in a bunch of HTML elements and script them on the same page.


For the newcomer there are no worries at this point about memory leaks, or buffer overruns, or seemingly-complex function calls, or inclusion from other files and libraries.  It takes a lot of hacking and experimentation, but if you get it wrong nothing is going to break. You don't get the jokes about undefined behavior doing 'anything including maybe crashing or formatting your computer'.  At worst your web page doesn't display.


So while I dislike a lot of the more advanced things --- for example I just spent four hours today fighting stupid variations on box models on different handhelds --- for the beginner JavaScript is approachable and relatively friendly.


Also, it is a language most programmers are going to need to work with eventually. It is one of the first five languages I recommend programmers get exposed to.  Those are Python, JavaScript + HTML, C++, C#, Java. You don't need to know them well, but if you are going into games you'll likely be exposed to them all, and they are closely related to each other to the point where learning the last few will come quite quickly.

#5272163 C++

Posted by frob on 21 January 2016 - 10:53 AM

I've removed some personal attacks and issued some warnings to a few individuals.


Insults and personal attacks will not be tolerated. Please keep it classy.


Also, remember that this is the For Beginners form, where additional rules apply:  "This forum is for beginners to ask questions without being harassed because somebody more experienced thinks the answer should be obvious. Make sure your replies are helpful and guiding the beginner in the right direction, not taunting or flaming or insulting them."

#5272158 Do I need a Laptop or a PC?

Posted by frob on 21 January 2016 - 10:22 AM

They can handle it but, not comfortably.  On my MBP 16GB Unity is fine no problems.
We've got a bunch of computers approaching the end of their 5-year duty cycle with 4GB that run Unity-based games just fine.


We've had designers and producers on machines less power than what was described but running just fine on AAA games.



Reading over the original submitters posts we've got this:


My parents are arguing that Laptops are better than Desktops in the sense that they think that Laptops are cheaper and easier to use comparing to a desktop which isn't portable. I want a desktop because even if its true that Laptops are just as good as a desktop, The fact that desktops have more processing power than laptops further proves that the latter simply isn't ideal for not just gaming but also for trying out various software. 
Now that I'm a junior game designer, I want to know whether game designers need a powerful PC or are just fine with some inferior laptop if they are to do work even outside of just playing games?


Then for running such game engines like Unity 3D or Unreal Engine or Havok engine and playing games with high specs, Laptops can do such things?



Currently I don't use software that requires much of raw power. But I have a feeling that sooner or later I would need such power to work on various softwares such as game engines and its for that reason that I feel that I need a desktop in the long run.


The quote from his parents is not wrong.  Commodity laptops generally are cheaper and they are portable.  However, commodity laptops typically have far less powerful parts because of the costs involved, and typically game developer desktop machines and "gaming rigs" are far more powerful than typical commodity hardware. Desktop machines can have components swapped out, the boxes don't take abuse of being portable, and they tend to have a longer service lifetime. 


Today's commodity laptops are able to run modern games just fine. They will run game engines just fine. I just spent the last two years at a company where many developers were assigned laptops for their primary development machines. 




And as he wrote, "currently I don't use software that requires much of raw power. But I have a feeling that sooner or later I would need such power ". In other words, "a commodity laptop works just fine for me, but I really want a fancy gaming rig".  Save the money, since hardware depreciates very quickly. If you don't need it now, don't spend the premium costs.