Where can I learn how to program/create games such as Path of Exile?
" " I didn't start the post but I have been interested in programming and developing games for quite a while and with the resources you both gave I can start and have it not seem so menacing (programming always seemed menacing to me because everyone always suggest java as a first language because its "simple" idk who in the hell thinks that's simple for a first language), anyway I hope to go to college for computer science, game design, and or graphic design as I am 16 now and decided I should start doing what I love (computers and anything to do with games) to also start building a career, so thank you both very much. Last edited by Artificed#4503 on Apr 4, 2014, 2:20:15 AM
|
![]() |
In my school we learned Visual Basic first, and then Java the next year.
I liked it, the code was straightforward and the GUI was easy to manipulate (unlike Java *cough*.) Although I am a noob at programming (you lose what you do not use, etc.), so I've forgotten most of what I've learned in the past.. Heck I can barely speak Spanish anymore.. But my favorite language, and I think a nice language for newer programmers, is FORTH. It's a stack-based programming language, and I personally feel that it is THE most intuitive language you will find. It is so cool/amazing! :O Also, what about Flash ActionScript? That could be another option, if one wanted to start by making Flash games.. What about iPod/Phone games? I believe they use SDK and/or Object-C or whatnot.. iPhone games are pretty big right now, and can be easier to make for your first game. ~.^ EA IGN: We_Have_Monk_at_Home
*Burnt out and waiting for either PoE1 League or new PoE2 Classes.* |
![]() |
" I'm biased about plugins - which is why I love HTML5 so much and hate Flash, but that's just me. I still think mobile game development and web game development is stretching it too far for a beginner. My suggestion would be to stick to developing console applications until you're familiar with all the data manipulation abilities of the language/syntax. Creating a Text-Based game is a great way to go about doing this, something like Zork: 1. Create a couple of rooms with descriptions, and commands to move from room to room that the player can enter. 2. Create a character customization/creator screen at the beginning of the game, holding textual information about race/class selection, physical attributes, a biography, etc. 3. Think about how you can hold this information for future plays. Writing it to a text file and then reading that text file everytime the application runs to obtain the character again is a good simple way of doing this. 4. Once you're familiar with saving simple, plain text data - start making an inventory that you can populate items into that will persist through multiple plays. 5. Begin populating the rooms you created in Step 1 with items that can be picked up by the player, and held within the inventory. 6. Work on creating an equipment setup where the player can take the items that they've picked up in the rooms and equip them or consume them. 7. Give the player stats like Health, Mana, etc. What stats should persist via multiple plays and what stats should be refilled at the start of play? (If I logout my Strength should remain the same value until modified permanently in the game but my Health should be refilled to full.) 8. Start adding stats to the items in your world that supplement the stats you've given your character - Like +1 Sword of Laziness or something. 9. Add monsters to your level that has challenging, but beatable stats. 10. Allow the character to initiate combat with these monsters, start doing random rolls for damage and stat checking. (Combat System) 11. Next, begin having some monsters automatically attack or have aggro to the player when he walks into the room (Basic Monster AI). Once you have the basics of the game down, go back through your code and look at ways to improve it. How can I make this code simpler, how can I make my code reusable. Next, look at ways to improve or extend the game. Is plain-text files the best way to save information about the player, could I extend this to being held in an external database. Can I add an item compendium to the database so that this information is stored externally, so that the player doesn't cheat and just edit the text file. How can I go about storing encrypted passwords, instead of storing them in plain text. If a player walks into a room, should the monster immediately begin attacking them or can they interact in a different way with the monster. All of this can be done without doing one bit of graphical coding, and all of these are things that you'll have to think about with any type of game you work to create. Start out with the simple stuff first. |
![]() |
First language, Python
Big Boy Language, C++ Additional amazing thing to have: Unreal Engine 4's Blueprint. It's almost as easy as using RPG Maker, and can be compressed down to very readable parts: https://scontent-a.xx.fbcdn.net/hphotos-prn1/t31.0-8/1614020_10152731209403761_186537627_o.jpg https://scontent-a.xx.fbcdn.net/hphotos-prn1/t31.0-8/1540502_10152731209233761_353194872_o.jpg https://scontent-a.xx.fbcdn.net/hphotos-frc3/t31.0-8/1400510_10152731209068761_1255194118_o.jpg |
![]() |
if one wants to learn how to program, there are TONS of avenues to take. But most of these suggestions are for learning how to *start to code*, rather than using something for which one could create a commercial-quality game right off the bat.
1. Chances are, since the OP posted their query on a Web forum, they have a Web browser. JavaScript is supported by (practically!) all Web browsers. There's a case for starting here - all you need is Notepad (ie, a text editor), some resource (there are TONS on the Web), and a browser. Off you go. (NOTE: yes, this is a serious suggestion. NOTE 2: JavaScript has very little relation to Java, aside from the name!!) Do this for a month, then move on to something for stand-alone programming. 2. Learn Python (as others have suggested). Only question - use a 2.x or a 3.x branch? Hmm... incompatibilities, much? But it doesn't matter, because we're looking at first steps. 3. Java (as others have suggested). It's actually NOT BAD... but it's not great, either. However, with Java one can certainly grow to become quite proficient and score an uber-job with it. 4. Like JavaScript, here's another serious suggestion: if one already has MS Office, they could try their hand at learning Visual Basic for Applications. It's very useful to be able to create routines to be used in their day-to-day job (even if it's not coding-oriented) - I'm no stranger to creating functions in VBA in MS-Access that can be called by Access queries. This goes FAR BEYOND merely "recording" macros. It's a great, friendly way to be introduced to coding concepts while at the same time gaining skills to help in near-any semi-professional job (or higher). 5. If you're on Windows, you can acquire the free version of Microsoft's Visual Studio (VS) - Visual Studio Express. You can learn all the fun + fancy (and sometimes frustrating) .NET stuff (C#, VB.Net, ASP.Net, C++ - both managed + unmanaged). Tons of resources available, and you can "migrate-up" the code you create to more professional versions of VS. Not a bad way to go. Ultimately however, when you ARE ready for a big project program, yes, you probably will find yourself using C++. However, call me "old sk00l", I still believe there's PLENTY of life left in the good-ol' traditional, non-OOP C language. Which I strongly encourage people to at least spend a little time with BEFORE going to C++. If the OP is interested in game dev, they should also try modding existing games. But in the course of their learning-to-program adventure, they may change their mind and realise that it's far easier to get real money making boring productivity software [insert Kappa face here!!]. Alrightie. That's my 2-cents worth :) ooh! 'member when PoE was good and fun? i 'member!
|
![]() |
Here's my input:
First Language: Python Why: As other people have mentioned, Python is easy to learn and very quick to become somewhat proficient in. Some languages (particularly if learned through a formal class) take a while before you feel like you can do anything useful in them. In my experience (being entirely self-taught using online tutorials), Python feels entirely differently - every day I use Python and try to learn more, I feel like it becomes that much more useful in all applications of the language, not just the context of the tutorial (because I really need to make fancy designs in the command prompt, etc xD). On top of that, I feel like you can very quickly learn enough Python to make something you enjoy. When I first learned Python, I had made a text-based RPG within a month without ever even looking up any tutorials geared towards it. Since then, I've expanded the scope of what I can do with Python by a lot, getting into full-blown 3D games (though the vast majority of what I've done has been 2D :P) Pros: - Quick to learn - Quick to feel proficient (which, to me, is even more important than actually BEING proficient) - Straightforward syntax - Dynamically typed (less headache for new users) - Object-oriented (which is rather common nowadays anyway, but still) - Requires little understanding of programming/computers prior to learning it - Enforces readable code through interpreted indentation/formatting - Pythonic! (Well-written code is elegant, clear, and clever (while still avoiding confusion), and there is almost always a clear "best practice" for approaching a particular problem) - Quick development Cons: - Interpreted (as opposed to compiled, which makes it slower in some ways) - 2.7 vs 3.X (explained below) - Not exceptionally common to get a "real job" using Python (though this has been changing over the last few years) - Requires (more or less) use of game engines built in other languages for large-scale games (EVE being a great example) - explained below
2.7 vs 3.X
While this is a very common debate within the Python community, I find that the answer is quite straightforward right now. 3.X is new. It's "the future" of the language. It has a few new toys that are definitely good additions/alterations to the language. However, it is still rather young and has pretty terrible compatibility for a lot of third-party libraries/modules. The language itself isn't much different, but until 3.X matures a little more and developers port their libraries over, 2.7 is going to be the best bet in my book. I plan to switch to 3.X when that time comes, but there is nothing wrong with using 2.7 until then. We're getting to a point where a fair bit of the popular libraries are ported to 3.X, though, so I can't say how much longer this will be the case.
Game Development
I've developed quite a few small games with Python without any issues. However, I can't ignore the fact that some parts simply won't scale well into larger games. For example, Path of Exile simply couldn't be written in pure Python and still run as it does now. However, what many people (EVE Online being the best example) have done is use Python for game logic, interface, and other more intricate things while they pass off the rendering and heavy calculations to C/C++ (using Cython, Numpy, etc). Doing so allows for use of Python in most of the places where you would want to without suffering from the speed drawback that you will see in some areas of the language. Also, to clarify, Python is not a ridiculously slow language, but it does have a few things that hinder it noticeably. Here's a good summary of how it breaks down:
Taken from StackOverflow
I think you're reading those stats incorrectly. They show that Python is up to about 400 times slower than C++ and with the exception of a single case, Python is more of a memory hog. When it comes to source size though, Python wins flat out. My experiences with Python show the same definite trend that Python is on the order of between 10 and 100 times slower than C++ when doing any serious number crunching. There are many reasons for this, the major ones being: a) Python is interpreted, while C++ is compiled; b) Python has no primitives, everything including the builtin types (int, float, etc.) are objects; c) a Python list can hold objects of different type, so each entry has to store additional data about its type. These all severely hinder both runtime and memory consumption. This is no reason to ignore Python though. A lot of software doesn't require much time or memory even with the 100 time slowness factor. Development cost is where Python wins with the simple and concise style. This improvement on development cost often outweighs the cost of additional cpu and memory resources. When it doesn't, however, then C++ wins. To which someone immediately added:
Also taken from StackOverflow
Also, people who speak of Python being slow for serious number crunching haven't used the Numpy and Scipy modules. Python is really taking off in scientific computing these days. Of course, the speed comes from using modules written in C or libraries written in Fortran, but that's the beauty of a scripting language in my opinion. The speed problems associated with using a language like Python are only really problems if you don't attempt to handle them. While I love Python, there are other good options as well. I'm not going to go into as much depth here, but I'll list off some other options for various uses.
Other Stuff
Web (including the obvious stuff) HTML5, CSS, JavaScript (these are more or less essential for all approaches) Coffeescript (Language that is similar to Ruby/Python/JavaScript that compiles to JavaScript) node.js (JavaScript-based web framework) Django/Pyramid (Python based web frameworks) Rails (Ruby-based web framework) General purpose programming Ruby (Also very easy and has similar syntax, though it is based on different philosophies) C# (Allows use of .NET and allows for easy UI design for simple apps) Java (Not TOO difficult to learn, is fast, and avoids the headache induced by low-level management in C/C++) C/C++ (Probably the fastest and most powerful options, but not very beginner friendly in my opinion. Low-level management requires more in-depth understanding of what you're doing before you actually able to do anything) In the end, I very much think that Python is probably the best option for your first programming language. Python has picked up a lot in popularity over the past few years, and as more schools adopt it we'll only see it more in the business world. I've already been able to use it multiple times in my current job even though it isn't our main development language, so it will always be useful in my book. As for web stuff, js + HTML5 + CSS are pretty much all musts, and CoffeeScript can make learning javascript that much easier by allowing you to use syntax more akin to Python (but I still suggest learning/understanding vanilla javascript). As for the backend (framework), node.js is great, and Django/Pyramid are also great options if you want to use Python. Rails is also a solid (and rather common) option, though I personally prefer Python over Ruby. Do some research on the different languages you've seen here and pick the one that makes the most sense to you. The biggest hurtle is getting started, so just pick a language that looks like you'll enjoy it and get going with it! If you change your mind about it, try another. IGN: iAreNubcake - PM me on here otherwise Note: If you whisper me and someone responds with a stupid IGN, it's probably me. Last edited by iAreNubcake#2833 on Apr 8, 2014, 11:50:48 AM
|
![]() |
An interesting site for anyone wanting a plain comparison of syntax might be this:
http://www.99-bottles-of-beer.net/ For the record, complex programs written for emulation of certain circumstances or additional compatibility might always look more bloated than straightforward, simple ones just addressing execution of the core problem. On the link given users often enough enhance the core problem so they can show off features for their favorite programming language. If you want to see the results for just the core problem, you can use the version overview to select the "standard version". :) Last edited by Nightmare90#4217 on Apr 10, 2014, 7:54:12 AM
|
![]() |
Once you get the basics of programming down, i would suggest you play around with others fully fledged programs. MUDs are a great entry point into the world of networked virtual realms. They dont have all the baggage which comes with a 3D engine and/or client and are fairly well commented. They are likely the closest thing to a MMORPG a solo person can handle. In fact MUDs were the precursor to the modern day MMORPG which simply offer a visual display and GUI.
Check out http://www.mudconnect.com. You may be able to collaborate with others. Or simply use the linked resources: codebases, FAQs, coders forum. Also you might want to familiarize yourself with a graphicless game. Even just playing can offer many insights into the inner workings of a virtual world. Once youve got a grasp of MUDs you should only then attempt to write client software with graphics and GUI. 3d engines are very complex and require a great deal of expertise. I would absolutely not recommend attempting such a feat yourself without a masters degree. But we can still use such engines without fully understanding them. 2 popular opensource engines are; OGRE 3d- http://www.ogre3d.org/ JMonkeyEngine- http://jmonkeyengine.org/ You will also need ways to create assets such as models: Blenderhttp://www.blender.org/ is the defacto opensource 3d modeller. But i think you will find that doing EVERYTHING yourself is simply beyond the capabilities of a single person. Enjoy. For years i searched for deep truths. A thousand revelations. At the very edge...the ability to think itself dissolves away.Thinking in human language is the problem. Any separation from 'the whole truth' is incomplete.My incomplete concepts may add to your 'whole truth', accept it or think about it
|
![]() |
I reckon c# is a pretty good one.
"Minions of your minions are your minion's minions, not your minions." - Mark
|
![]() |
One note, you can script in Blueprint with absolutely zero programming knowledge if you are good at working with logic flow. It takes a bit to learn the different nodes, but it is VASTLY easier than learning syntax.
If you want to do JUST the functionality aspect of games though, also work towards learning C++ becuase you may run into a situation where you need it. If you are primarily focused on the actual creation and balancing of game mechanics, however, and want to be able to have an easier entry barrier into creating functionality, go with Unreal 4 using Blueprint and get another person doing dedicated or prioritized programming. You do mechanics + BP Scripting, he/she does C++ + BP Scripting |
![]() |