Is a computer game anything other than a very large program?

Edit: The reason I made this topic was the start a discussion about the often understated, nitty gritty details of how games are made. As I said, I feel that I’ve wasted years that should have been spent learning to code. Nobody ever told me that games are basically no different than any other programs. I thought that some magical program was going to come along and that it would make my game for me, I thought that was what Unity and Unreal Engine were… Nobody ever said this was going to be work. I’m
passionate about telling newbies “Look, it’s not fun. But if you’re serious, this is what it’s going to take…” And I would tell every one of them that you sukrainehould start by learning C because you will have to understand computer memory to ever be a programmer worth a damn. Until you understand computer memory, it’s pointless to even try to learn C# because you’re going to get so many Null Reference Exceptions you’re going to need a therapist. The industry has one common entry path… education system, I get that. But for those of us who grew up poor or came from areas where kids carried more weapons and drugs than school supplies, it would be great to have a sign posted that says, “You must be this competent to ride.”

Original:
Here’s the thing, I’ve been circling the task of “making my game” for so many years now and I just haven’t been able to get my arms all the way around it. I’ve started a lot of little projects but then they always tend to bloat and become overly complex and then die on the operating table. Granted, I’ve spent the most of the last decade focusing on other things (family, my job, etc.) but in the last few months I’ve buckled down and done a lot of reading and study on the subject of games, programming.

I’ve gotten to the point where I think I get it.

Games are just very large pieces of software that don’t conform to the same rules as other software. Instead of a static interface whereby users manipulate data, you have a moving interface where all data manipulation is done behind the scenes, or is in effect “hidden” from the user so as to allow for the illusion of some simulated world view. Sounds complicated, but its actually simpler when I view it this way.

What I have struggled with is that computer games do not serve a functional purpose and therefore do not follow the whole “everything is a solution to a problem” paradigm. Which sucks, because that’s exactly what 100% of all programming languages are designed to do. Solve problems for businesses. Compute. Manipulate data.

It’s almost humorous to me, though, to think that every single person who ever built a computer game is basically abusing the computer. We’ve taken the most sophisticated piece of equipment mankind has ever devised and turned it into a slave for our own amusement.

But I digress, I am specifically considering the large number of games I have seen over the years that never made it to project completion or saw any sort of successful commercial release. I don’t think the designers were lazy or anything, but that the common view of game development as being something you just “dive into” and learn as you go is perhaps a bit misguided… its like diving into the construction of a jet fighter. It’ll work out, if there’s any problems just “wing it”… amiright?

Anyway. I just recently got done learning about the origins of c, where c++ came from, other programming languages and just computer software development in general and I think there’s a huge lack of appreciation for how blessed we are to have OOP languages, extension methods, lists and arrays, dictionaries… binary serialization with a few simple lines of code.

I believe I have found the solution to my problem in finally viewing the entire game as just a piece of software and nothing else, at all. No different than any other kind of software (except that it doesn’t yield any useful output).

I looked up software layout and found a way of designing a piece of large, confusing software in modules, through a process known as step-wise refinement. Just so happens to be a perfect fit for C#, which I’ll be using.

I’ll accept any thoughts, advice or whatever I’m seeking additional tips as well as I prepare to tackle this beast.

1 Like

Yup, that’s actually correct. Thus the scripts you create are generally not based on anything real, and you literally have to make stuff up as you go (Player script, Enemy script, etc).

1 Like

Yes, computer games are exactly “very large programs”.

If you don’t feel that your game serves a purpose or yields any form of useful output, though, I don’t think you’re making the right game for you. Sure, the computations performed might not be directly of use, but there’s so many other layers to what you’re doing.

There’s plenty of abstract ways a game can provide value - it can provoke thought, entertain, change perceptions, teach people, be a social medium, etc. etc. Even with all of that aside, though, the vast majority of games I’ve made fall under the “serious game” category and are primarily and directly about training and learning outcomes. Aside from that I also do a lot of simulation work, which is the same tech as games and also with concrete outcomes.

As above, I think that games can serve a functional purpose. Moving on from that, though, I absolutely see game design, development and programming as 100% “everything is a solution to a problem”. Every piece of software I write, including the games, starts as a definition of something I want to achieve - something that can easily be stated as a “problem”. The process from there, starting at design and going through to release, can be considered entirely as an iterative cycle of identifying problems and proposing solutions.

Whenever in doubt about anything at any point, one of the first things to do is take a step back and consider “what is the problem that I am trying to solve?” If I can’t state the problem then I know immediately that I don’t properly understand the task I am performing. And that goes for anything - UI design, programming, game mechanics, level design, character design, story, audio… Everything serves a purpose, and all of the components build towards the greater purpose which is the reason you’re making the game - to entertain, to teach, to train, to provoke…

So, a question then: can you give an example of something you’ve tried to do that’s not derived from a problem to be solved?

5 Likes

You have to understand the #1 rule for any game (or program). People go to work, and they work using Excel or Microsoft Word. The reason you exist, is to put that behind them. The reason you should make a “game” is to allow people to have fun with the program you are making. I have made 100 programs, only recently have I made games. You have to come to the realization, that the game you are making is not so people have to work. The entire goal of my company, which makes games, is to make the application you start (via windows or android or whatever platform)

FUN@@@@@@@@@@@@@@!!!

That’s why you exist.

To make programs fun.

You are certainly correct in realizing that a game is just another application. But you have missed the bottomline point. Make it enjoyable for someone to sit down, and enjoy the creativity you are bringing them. Don’t make it a …

… CHORE.

1 Like

Coming from the olden days, where computer games were things where you had to type in “go west”, “take ladder”, “go north”, “use ladder”, it may have been more obvious that computer games are just programs.

It never occurred to me that in these days with modern computer graphics that the difference between say Batman Arkham Asylum and Microsoft Excel would be so stark that only one of them would be considered a “program”.

But then again, is a game just a long program? Not really. It is also art, creative writing, music, acting, imagination, animation, directing, and many other things that are not found in a typical office spreadsheet program.

So is a game just a long program? Technically, yes, you can express a whole game as a binary number to be interpreted by a computer. But is a human just a bunch of cells, or is it so much more than that…?

1 Like

Sorry Misterselmo, but

“It’s almost humorous to me, though, to think that every single person who ever built a computer game is basically abusing the computer.”

No. You aren’t making any sense at all, nor is that correct. Game programming is problem solving. If you don’t think so, you’re probably doing it wrong.

To program a game you need to solve problems.

Computers have gotten faster and cheaper due to people buying them mostly for entertainment. They (especially with GPUs / Carmack etc) have evolved very well in order to run games and entertainment. That’s not abuse, that’s design.

In fact most of the performance innovation in computers is strictly down to games. Games actually advanced the entire computing industry, created cash flow where there wasn’t any, and is the prime reason we are where we are today, thanks to consumers and… games.

Games are the reason why we can afford a PS4. They’re the reason anyone can afford a laptop. They’re the reason you even HAVE a computer that powerful.

So yeah, you’ve got this back to front.

9 Likes

I think it does yield an useful output.

Think about the entertainment industry. What does it do for the people? It doesn’t provide food or shelter, it doesn’t save lives.

Sports, music, movies, traditional theater, travelling & tourism, etc. None of that is essential. Nor are video-games.

BUT, without any of those, life would be less interesting. And video-games belong to the entertainment industry. So don’t think they’re just big programs with no purpose.

“Step-wise refinement” says not much about the architecture you use. And how you architect, aka organize your code is very important above a certain size.
You should probably read some game dev architecture books and articles about component based design (not one, many), if you haven’t already. There are many good articles where AAA studios explain their lessons learned from specific titles with regard to architecture. There is also a huge ogre3d forum thread about component based design (but more about implementations of these, still you can learn a lot), but for that you should probably read many articles first.

If you are coming from a normal software development mentality, yeah, game development is kind of weird. Most to all of the problems are of your own making, and a good chuck of features are added purely on the rationale that it would be cool.

The philosophies of the two are more often than not diametrically opposed. Games strive toward grandeur, constantly expanding feature sets to squeeze every ounce of performance out of a machine to do something. The ultimate goal for software however is to solve a problem so perfectly that you will never have to work on it again.

Really, a game is like any other program. It simply presents a large dataset that the user wants to view and edit in a certain way. Its a polished and intuitive way, to be sure, but the Legend of Zelda is the same as Microsoft Word in that regard.

That is only true in the sense that both are huge software projects. But in game design today almost everything is component based design (because of flexibility and for rapid iterations), while that cannot be said about business software design.
Read some AAA studios report about component based design, you will quickly see why a “standard” design with fixed interfaces like you would probably use it for MS Word would kill your productivity fast.
Game design requires agility and flexibility, so better choose an architecture that supports that well.

I agree about the part where it’s difficult to get a sense of what problem is being solved by this piece of software. It seems so vague, like, as if the problem is ‘how to solve people’s unhappiness’? ‘how to entertain people’?. … and then it seems so nebulous like you’re trying to do it for the sake of something that isn’t really a problem to begin with. I’ve definitely found it much much easier and more productive to make an app or tool where it’s clear and obvious what the problem is and what you can do to solve it or make things easier… but when it comes to ‘people’ being the problem - it’s as if games are trying to solve human psychological needs, which are all over the place and unpredictable and difficult to understand. Makes it a real shot in the dark it seems… but probably I guess you can get more of a sense of what works and what doesn’t with experience.

1 Like

My game definitely serves a purpose, to entertain.

Software doesn’t have to “solve problems.”

High-level programming languages aren’t designed to “solve problems.”

They’re designed to represent digital logic circuits and allow you to interact with them, organize them, and manipulate their stored data in an intuitive way. That is literally all. Assembly exists because binary register manipulation is too labor-intensive to do as a human, and C++ exists because Assembly is also too labor-intensive for most design goals. You can write software that creates problems, just as easily as you can imagine: Step 1) “I get the eggs out of the fridge” … Step 2) “I intentionally drop all the eggs (and upload it to YouTube)”.

(writes a batch file that deletes system32)

Ha, ha ha; I don’t know how much programming background some of you have, but no.

The Legend of Zelda isn’t a massive pile of text parsing and I/O functions. It is a video game. It accepts inputs and makes draw calls.

They are both software in the same way that a motorcycle and an airplane are both vehicles. They are completely different and can be objectively differentiated on a basis of their logical operation. They are not the same just because they are both made of aluminium. One does not design an Oracle server database in the same way one designs the Legend of Zelda.

Games involve much more artwork and deserve the title of works of art. Microsoft word is a tool. No matter how well designed a tool is, that’s what it is: an object designed to serve a practical purpose. Now, the definition of art is a nebulous term; and certainly some of the most sophisticated tools could be considered works of art in their own design merits, but video games fall squarely into the most pure and early interpretation of the term, they exist for no ulterior motive than to captivate us.

This is why video games are so impressive to me, it requires both artistic sense and logical grounding in game theory.

Zelda is a massive pile of text parsing (all the conversations, inventory, etc plus localization) and I/O functions - streaming, object management, data management and so on.

Some of the replies in this thread are making me baffled at the complete naive innocence on display.

Maybe it’s because Unity hides a lot of this you assume it’s not there…?

So one dives into game development with no planning whatsoever and no respect for the issues that require robust bug free code? I’m sensing a lot of arrogance here. I’m pretty sure some games are bigger than some operating systems. Take World of Warcraft for example.

5 Likes

Really? Must be joking. Reading conversations and inventory names is like 20 lines of code out of a million lines of code in Zelda. 100 lines if they chose some stupid approach for the localization. But I think they are on the lower end, they did not even check for buffer overflows (that’s how I hacked my Wii, creating a horse name that is too long).
If you think the code architecture of business software and the gamplay code of larger games like Zelda is the same then you have some reading to do. There are countless articles of game studios that tried business software like architectures first to realize this is just a bad idea. There are many reasons why Unity uses component based game objects. Many other approaches just fail miserably.
Edit: and if you think MS software is component based (in game object system component sense) because of MS COM usage, then you miss that there are many different usages of the word component.

Saying that game programming does not serve a functional purpose is kind of like saying an artist is abusing his pencils because a painting is useless and he should stick to painting his walls instead.

2 Likes

Such a philosophical topic. Of course your games will bloat as you add more stuff. I think your problem is that COMPUTERS are stupid and you have to tell them everything down to the smallest detail. It’s easy to tell yourself “Ok so I want to have a drunk piranha collecting old gum in the sewers in my game” but when you actually start making it you have to set everything, speed, color, sound, animation, lights, mechanics, systems, menu, farts etc. So yeah on the surface it’s just a simple game but there’s a lot of stuff to set up.

If you don’t like coding try Playmaker, but even though it has a good idea, it too can get bloated. Are you following good coding practices? Maybe that;s why it’s all bloated. The more compartmentalized code you have the easier it is to maintain. I’ll b honest I haven’t read your entire post, cuz frankly what does it matter if a game is a program by definition or not. Behavior = some kind logic. Best stuff around for working with logic is programming languages. They aren’t designed to solve problems, programming languages do what you want them to do.

Example:

x + 5 = 100 therefore x is 95. You can achieve this through code. Problem solved.

Spawn 5 chihuahuas and set them loose to hunt the player. You can achieve this through code. Problem solved.

The solution doesn’t have to be in numbers. The above example would solve “How to endanger the player”. And it’s only 1 solution. And lets not forget there are a lot of paradigms out there, OOP is only one of them. you have functional, procedural, and aspect oriented programming styles. So pick and choose and make do. My 2 cents.

1 Like

A game is a feeling dude, a feeeeeling duuude!

Very true. Have yet to find a game that is a feeling dudette. #yesallcartridges