Game Genres and Technology

 

There are thousands of games currently in the market, each with its own unique genre and hook, and each with its own technology it makes use of. With such a vast list of overlapping and overlaying genres and technology, this blog will hopefully clear up what’s what.

First things first…

vidyagame.jpg

Genres

There are hundreds of genres, and each can be further sub-catergorised over and over until you end up with the most extreme and niche genre names (such as a role playing, text based, horror puzzle game). This list will focus primarily on the main genres.

 

Action games

Action games are amongst one of the broadest terms in gaming genres. This can apply to most games as an action game is a game that includes physical actions being carried out (most of the time) by your player character. These usually have you control a personal character with the object of overcoming physical challenges, whether this be jumping over platforms, fighting enemies, shooting bad guys or any other physical actions. These often play in real time and test the players reaction times and reflexes, as they must control their character in a timely manner to achieve their goal.

Examples of action games include:

  • Grand Theft Auto series
  • Fortnite
  • Dark souls series

 

Adventure games

Adventure times have a large focus on exploration and adventuring. This is often in either first person, third person or top down view, but always following a character who you explore with. Some of the earliest games created were exploration games, however these were text based. Adventure games focus on the journey of the character and how/why they are getting to their destination. They can incorperate action into the adventuring to form an action-adventure game, which is a very popular title (The last of us, Tomb Raider etc.).

Adventure games can also take a less action oriented approach and include puzzles in the gameplay to provide a challenge to the player. However none of these are necessary to create an adventure, as just having the journey is what makes the game an adventure game, like the game “Journey” which has no text or story, just a simple game where you make your way across landscapes.

Examples of adventure games:

  • Minecraft
  • The Walking Dead game
  • Life Is Strange

 

 

Role playing games (RPGs)

Role playing games have a heavy focus on the story and narrative of the game. Gameplay takes a backseat to immersing the player in a world and story that lets them live out a fantasy. Role playing games can range wildly in stories as they can be about any fantasy. Most commonly role playing games take place in medieval settings, with knights and magic, but can realistically include any story element conceivable.

RPGs often have leveling and progression systems for the player to give them a sense of growing more powerful within the game. Some RPGs can also be purely for role playing, and focus on immersing the player than giving strong gameplay, and some mix role playing with action, adventure and other elements. A massive game market for RPG games is the MMORPG games, which stands for massively multiplayer online role playing game. These games provide massive world spaces for players to explore and roleplay within, an example and the biggest competitor being World Of Warcraft.

Examples of role playing games:

  • Final Fantasy series
  • Skyrim
  • Dragon Age series

 

Real time strategy (RTS)

The last game genre on this list is the real time strategy genre. As described in the title, the games play in real time (as opposed to turn based) and require strategy to play. These games often have you controlling an entire civilisation/species, you must control your armies to gather resources, build bases and other facilities, research technology for upgrades and defeat your opponents in order to claim victory.

These games provide strategical gameplay as you have to balance your time and actions to make sure your armies get the resources they need, upgrade regularly to keep on level fighting grounds with the enemy factions, and balance where and how your troops act. These games often include strength/weakness systems where certain units will be strong against one or more type of enemy, but weak against another. This creates a rock/paper/scissors dynamic where you need to anticipate and play smart to create an army that will be stronger than the enemies.

Examples of real time strategy games:

  • Starcraft series
  • Age of Empire series
  • Command and Conquer series

 

console_colours-620x349.png

Platforms for gaming

The gaming platforms have evolved and grown more sophisticated as the games became more complex. Technology has advanced from the time of Pong and Pacman to powerful hardware that is now capable of running 4K games with realistic and lifelike graphics and sound quality.

Like with genres, there are a multitude of gaming platforms, however only a select few of the newest platforms will remain relevant as newer consoles come out and push old ones into becoming obsolete, such as with the PlayStation 1-3 and first generation Xbox’s

The list for the current relevant platforms of gaming are as follows:

 

Personal Computers

The age old console, the PC is technically the only console. All other consoles are just purpose built computers that strip down the functionality a PC provides and only offer game playing and other related services (such as video streaming apps like youtube and netflix).

That’s not to say that the other consoles cannot be considered their own platform, but merely reflects that computers personal computers are in essence the same as any other console, but with the extra features of having a PC.

 

Gaming consoles

There are currently three main gaming consoles in the market; the PlayStation 4, the Xbox One X/S and the Nintendo switch. Although the last one is more of a hybrid between a gaming console and a hand held console.

These consoles all offer their own catalogs of games, and their own digital platforms to purchase and download content from. The Playstation 4 has the PS Store, the Xbox has the Microsoft store, the Switch has the Nintendo store and PC has multiple platforms the biggest being Steam.

All of the dedicated gaming consoles have their own technical specifications, but they are designed to have roughly similar processing power so that gaming between consoles gives a similar experience. The only outlier for this is the PC which does not have a set list of technical specifications, as each PC can be build using a multitude of parts, including the CPU, motherboard, graphics card and more.

Newest generation consoles provide the strongest hardware, and custom build PC’s can go beyond the consoles industry standard to run games with even greater graphical definition and frame stability.

 

Hand held consoles/devices

The only real competitor in the hand held console market right now are the Nintendo 3DS family of consoles. The two variations of the 3DS are the regular and the 3DS XL, which has a larger screen than a regular 3DS.

These two consoles have two screens with the bottom one incorporating touch screen capabilities to play with the included stylus. The games on hand held consoles tend to be much smaller and graphically less intense than console games as they are running on a much smaller device. This results in the games for hand held being a lot more cartoon-ish based and mostly aimed towards the target audience of children. With massively popular hits like the Pokemon franchise, the 3DS has become a very popular console.

The main selling point for a hand held device is that it is portable, unlike a console or PC you can bring a hand held device with you to work, school, on a holiday or just with you out and about any day and anywhere you go.

The other major competitor in hand held devices is the mobile, which like a PC is not limited to a specific model of technical specifications. There are hundreds of mobile phones and new games are being created and posted to the online app stores (Google playstore and Apple store) all the time.

Mobile devices are even weaker processing wise than hand held consoles like the 3DS, as mobiles are not only smaller and more compact than 3DS’, they are also not designed solely for playing games, including many other functionalities like making phone calls, opening apps and tools etc.

 

technology in gaming.jpg

Technology used in gaming

As technology has advanced in recent years, gaming has benefited greatly by getting its hands on lots of new tech to utilize in making games and in proving more ways for players to play.

Obvious improvements include things such as improved graphics, audio and other sense producing effects of computers. This is a natural response that comes from computers growing to become faster and more efficient.

New technology also introduces other possibilities in gaming, such as advanced AI for enemies. With advanced algorithms and computer controlled AI, playing a single player game has become more immersive, the enemies will act like how you would image, rather than just following bland and basic protocols of standing around and then if they see you they might try and shoot you.

Now enemies can hear you, they notice objects being misplaced, missing comrades and other environmental factors. They can act on their own and will move about in a realistic manner.

Other pieces of technology that have been developed that have added to the way we can interact and perceive games include 3D technology (letting us see games in 3D to an extent), touch screen technology (most prevalent in mobile gaming) and even VR which is an emerging industry.

 

The Impact of Computer Games on Society

Computer games have been around for decades now, and they have only gotten more advanced and popular as time has passed. In these times computer games are mainstream and the people who don’t play games are quickly becoming the minority.

With the rise of so many computer games, how can this affect our society? In this blog post I will be discussing some of the major changes concerns that computer games pose

video-game-addiction.jpg

Concerns with gaming addictions

You see it in the headlines all the time, but not without merit. Computer games pose serious concerns for the health, social skills and other factors for a large portion of our society. Computer games can become very addictive hobbies for many, leading to lack of exercise or general socialising, since all their time is spent alone, moving their fingers and wrists at most.

The lack of exercise from time spent playing games is a large contributing factor to the unhealthiness of our generation, with more time spent playing and not enough exercising or eating healthily. There is also the factor of isolation at play, generally gaming addicts won’t get out and socialise much. Instead they’d much rather connect to friends online, through gaming platforms such as Steam, or the Playstation Network. Whilst being able to connect with friends online does boast some merits, it is not a suitable substitute for physical and emotional interaction between two humans in real life. Nothing ever will be, its in our psychological makeup.

Playing games can lead to other issues such as skipping days at school/work, either intentionally so you can stay off and play games, or unintentionally if you perhaps went to sleep too late after playing games all night, then woke up extremely late. There are even some serious health conditions that come from extended play sessions over periods of months and years, as would be the case with a gaming addict. Most common examples of health issues include carpel tunnel syndrome, problems with vision, Musculoskeletal disorders and obesity

 

education.jpg

Educational and health benefits

 

Whilst there are serious threats to gaming and its addictive qualities, games are not inherently bad. In fact some of the very first computer games to be created were educational games. for example The Oregon Trail designed in 1971 by teachers to teach kids “about the realities of 19th-century pioneer life on the Oregon Trail“.

Games can teach us things in many ways, both as physical skills and by teaching knowledge. Some games teach better hand-eye coordination skill, one of the main skills needed to play, and taught by, rhythm games. With the many different games out there, there is surely a game to train most parts of you body, if you want to learn how to move your feet better and perhaps even become a dance, why not try dance dance revolution? If you don’t feel like moving your whole body so much, and only want to train your hand eye coordination and reflexes then perhaps OSU! is for you.

As well as physical benefits that can be gained from playing games, there are also education games as well as plain and simple games that include education elements to them. It can be something as simple as a game set in a historical period, being accurate and faithful to what we know about that time period. Playing the game can give you a sense of what it is like living in that time, in a way that no amount of reading books or watching lectures can teach you about.

Some games focus solely on teaching, and incorporate some sort of fun mechanic to create a game that will hook kids into playing, essentially tricking them into learning as they are having fun whilst they learn. These sorts of games can range from basic teachings for primary school children, up to expert teachings of any kind of topic, the possibilities are endless. The only thing limiting how much these types of games go is the amount of resources put into creating them, a poorly made game might not entice anyone to play it, meaning no learning is done; or worse may provide incorrect learning, making the players knowledge even worse off than before

Another form of healthy games are brain training games, which often use puzzles and other various techniques to get your brain ticking. This can prove extremely beneficial for anyone, especially elderly people, as just a few minutes of mental workout will help keep your mind in a healthy shape.

 

Psychological factors

game-psychology_orig.jpg

Many studies have been been conducted on the psychological effect of gaming especially on young children. Many believe that children who play violent video games have higher tendencies to become violent people as they grow up. Whilst no studies have found any direct correlations between playing violent video games and the nature of the child as they grow up, some studies have shown that they promote negative traits in children. Such as a lack of self control, a decrease in moral values (as most violent games actively engage in immoral activities such as murdering, stealing, destroying property etc) and emotional desensitization; the more a child is exposed to violent and other negative behaviors, the more they become desensitized, to the point where they can even believe that violence and other similar tendencies are normal in every day life.

 

Use of sound

Games also make use of realistic sounds and music to fully immerse the players into the game. This gives the psychological effect of making the player feel like they are really in the world of the game. Different genre of games use different sounds to fit the atmosphere of what they are playing, for example with a sports game such as FIFA they will use upbeat music and the sound of thousands of fans chanting, to give an energy to the atmostphere. This will get the player in the same mood as if they were at a real football match, making the game more immersive and therefore more addictive. Another example is in horror games, such as Outlast. In this genre of game, silence and other ominous noises can be used as well as loud bang noises to produce jump scares. These all feed into the atmosphere again creating a terrifying gaming experience for the player.

 

Peer pressure

There is a lot of peer pressure surrounding this generation concerning gaming, especially with kids and students. Gaming is currently one of the most, if not the most popular hobby between younger people. The social pressures of liking the same things as your peers in school/college often lead to kids feeling like they need to purchase the newest gaming consoles and games in order to keep up. Not only does this incur a heavy financial penalty (consoles and games are not cheap!) going up to even £400 just for the console; but it also it leaves people feeling like they have to always be up to date with the current games.

Game companies have in recent years also increased the connectivity between games, almost every game produced now will have some form of online multiplayer. This constant connection between people is a familiar feeling felt from the social media craze where everybody is plugged into their social media all the time, nothing is private anymore everything is shared online. Having games feature online elements causes more pressure to play the same thing as your friends, as they will be playing together and if you don’t join in you will be the odd one out.

 

 

 

 

Demonstrating Object Oriented Tools and Techniques

During the creation of my game “Space Goblins Attack” I used Unity and Visual studios to develop, and use object oriented tools and techniques. This blog post will highlight some of these uses of tools and techniques in the code and in the development software itself.

 

Predefined methods

 

Use of methods.png

The code above demonstrates some of the use of predefined methods I included within the players “Movement” class. These methods are all called at some point in the code to reuse the same code that may need to be called multiple of times.

The first two methods are used when the player moves onto a cherry or taser pickup item, the method first removes the pick up from the map so they cannot pick it up again, and then gives the intended effect of the item to the player.

Similarly the “Die” and “Win” methods are used when the player loses and beats the level respectively. Both of them display prerendered UI text that will tell the player they either won or lost, and then set the appropriate variables to true to control the flow of the script to either restart the level or start the next upon any user input.

Finally the “ToNextLevel” method is used to load the next scene, i.e. the next level in the game.

 

Screen designs and Unity

Screen designs in Unity.png

The screenshot above shows how I used Unity to design the screen within the scene/game levels. I have outlined the different sections of Unity using colour coded boxes to help with explaining what I used.

Red – the red section is the scene view, in which I could see what the scene will look like with all the behind the scenes details that the game view would hide, such as gridlines and the outlining of the canvas (where the UI is placed). I could move around the sprites and other objects in the scene view to lay out the level as I wanted

Blue – The blue section is the console, which I used to help me debug by telling me what the errors were when I tested the game by pressing the play button

Pink – The buttons in the pink section allowed me to test the game in Unity, pressing the play button switched Unity to the game view and ran the project as if it were an application.

Green – The green section highlights the “hierarchy” in Unity, which is a list of all the objects in the scene, whether they are active (visible) or not. The hierarchy let me create new objects by right clicking on it and selecting the new type of object I wanted to create (e.g. sprite). It also let me rearrange the listing order and sort them into other objects to keep things more organised. I put all of the walls and all of the floor objects into a “walls” and “floors” object, as they were cluttering the hierarchy since there were 50+ of each

Orange – The orange section shows the projects folder, which contains all of the files and assets in the game. This is where I could access the assets which I created, such as the sprites for the objects and the scripts which were created.

Purple – The purple section is the inspector which shows all of the components and their settings for an object when you select it. I used this to fine tune the settings for each of my objects and also to create new components for them. For example when creating the Player object, I set its position using exact numbers in the “transform” component. Then I added other components like the Rigidbody2D, SpriteRenderer and the 2D Box Collider.

 

Integrated Development Environment (IDE)

Use of IDE.png

The screenshot above shows how I used Visual Studios write scripts and create breakpoints to test within Unity. I have outlined the different sections of Visual Studios using colour coded boxes to help with explaining what I used.

Red – The red section is the main feature of Visual studios, the text editor. Using this to write code is easier because the syntax is highlighted using colour coded meanings such as data types in blue. The text editor also helps with formatting by auto filling in certain repeated aspects of code, such as writing the ending curly brackets for a method, or suggesting the next word being typed. It also highlights code that will give errors by underlining it in red, letting you know that there will be an exception thrown at this line.

Blue – The blue section is the solution explorer, which shows all of the scripts that are in the solution (the game), giving easy access to open other scripts and see the structure of the files.

Green –  the green section is the “Attach to Unity” button which when activated makes the scripts in Unity run from Visual studios. This allowed me to look at data during run time by creating break points in the code and then stepping through line by line. This helped immensely during testing as I could use this method of stepping through lines to locate which line caused errors. Then when I knew where the error occurred from, I only had to figure out the logic of why the line didn’t work, e.g. it was calling the wrong variable.

 

Global/Static variables

There were no global variables used in my programming as it is generally acknowledged that using global variables is bad practice. However to demonstrate knowledge of how they work I have shown a screenshot of declaring a global variable. Global variables are variables that can be accessed anywhere in the script

Global variable example.png

In Unity there are no global variables, instead static variables are used. These can be accessed across all scripts, and therefore act in the same way as a global variable. The screenshot above shows the declaration of an example static variable. I simply attached “static” before the data type of the variable.

 

Local variables

local variables examples.png

The screenshot above shows all of the local variables or “attributes” created within the players movement class. There are examples of different types of variables, such as public and private, static, GameObject, Text, int, Rigidbody2D and more.

I have also included a local variable within the “Start()” method to showcase a variable that is declared within a limited scope such as the start Method. This example variable “startLocalVariable” is only accessible within the start method, and to access it somewhere else would either need to be set to static or passed through as a parameter to another method.

 

 

Instances

Several instances of objects of the same class are used throughout my program. One of the most common uses of instances was to create multiple wall tiles for the game. Since there are more walls than anything else in the game, it was important that each wall object was its own distinct instance of the class. This meant that each one had its own coordinates, but they all had the same sprite and hit box property that detected if the player was moving into them. They also all had the same script so that they would act in the same way, in that the player couldn’t move into them at any angle or direction.

Instances of walls.png

The screenshot above shows the multitude of wall instances created for level one. I named each one according to its coordinates on the level and then grouped them together in an empty object called “Walls” to keep the hierarchy more organised.

Each of these walls is its own instance of the wall object, but each has their own coordinates and position on the map

 

 

 

A review of Binding of Isaac: Rebirth’s visual design and game play elements

Binding of Isaac: Rebirth is a very unique game both in its simplistic yet gruesome details in its art style and the shooter-slash-roguelike elements of gameplay. You would be hard pressed to find a game which gives a similar experience to Isaac, both the frustration of a run ruining mistake and the high of finding an over powered item on one of the earlier floors.

In this review I will be going over several aspects to the visual style and also several aspects to do with the gameplay. Without further ado here is my review of Binding of Isaac: Rebirth, or BoI for short

Visual Style

the first thing to note is the unique aesthetic of BoI. It is important to note there is actually an option to swap from the pixel like arcade art style of Rebirth, to a smoother curved lines art style as a throwback to the original BoI, this review will focus on the newer pixel like style.

Firstly the games world in BoI is procedurally generated, meaning you will get a different level layout every single time you play a game. This lends well to the cartoon-ish art style and top down camera view design. Because the game uses repeating assets such as textures for the same sets of floor tiles, environment details like walls and rocks etc. The game can feel unique each run by looking different without having to store millions of different map layouts and take up far too much memory.

Binding of isaac room
“The lost” entering a room with several items and pickups

 

The characters themselves whilst all based around Isaac have their own unique feel that show off what makes their character unique in terms of gameplay. For example Azazel has wings and a demon like form, showing that he can both fly and instead of shooting tears he can shoot brimstone beams.

Azazel sprite
Azazel’s character sprite

The feedback interface is customisable, but on the default settings shows the player all they need to know for any run. The map shown in the upper corner lays the map outline in squares and rectangles based on the size of the room. it will also display items that are in those rooms so you can easily navigate around and find items that you may need. The interface on the left shows your health and how many bombs keys and coins you have, and your active item AND any other information you may need! All essential information for any basement dweller.  For advanced players you can enable stats, letting you up your game by seeing exactly how well tuned your character is, as well as a quick view of the items collected eliminating the need to go to the menu to check what item combinations you have.

BoI interface
Red: Active item and collectibles   —   Blue: player stats   —   Green: map

All in all the visual style of the game is appealing for both retro gamers and those who enjoy a softer touch, due to the ability to swap art styles. The procedurally generated levels never feel boring as there are hundreds of different room types and millions of combinations of textures, enemies, items, literally any part of the game you can name can be thrown in the mix. The characters themselves give off a distinct vibe so you always know who you are dealing with and how best to approach the gameplay, it also helps to make the player feel the danger when your character is a tiny child wandering through the vast halls full of giant deformed bodies. Finally the interface splendidly displays all the necessary info to the player, and has extra options tucked away in the settings, for an even more detailed look into the statistics of your character. The interface manages to do all this without cluttering the screen and leaving you free to look around the level without being distracted. And even on the off chance you decide that the interface actually is too intrusive for your liking, there is even an option to scale it up or down to fit your needs.

QkXLSHB

Isaac approves of the visual style!

 

Gameplay

The Binding Of Isaac follows the story of a boy, chased by his religiously crazed mother who is trying to murder him (in the name of god) into descending into the basement below. Down in the depths he must face his worst nightmares and fears, using his never-ending flow of projectile tears as his only weapon. The game follows Isaac as he delves through floor after floor defeating a boss on each layer until he cracks the bottom of the basement and can escape his mother. Or so it seems.

The beginning about the religiously obsessed mother is true, but whilst Isaac does run away from his mother he actually climbs into a chest in his room and locks himself inside so he can hide. The rest of the game takes place in Isaacs imagination as he sees himself face all the nightmares his tiny brain can conjour up until he finally dies of suffocation locked inside the chest.

The lore sadly is too deep to go into here, it would need its own essay to cover all of it, so for now we’ll leave this as the backstory for the gameplay.

Isaac hiding in chest.jpg
Isaac getting into his chest to hide from his mother

regarding the gameplay the goal for the player is to get to the end of the floors and defeat the final boss. There are multiple floor paths you can take which all lead to different final bosses, but the concept stays the same. Each floor has a random layout of rooms, one of which will contain the boss you need to defeat to get to the next floor. This concept of floor layouts were based on the roguelike genre, a genre of games spawned from the classic game “rogue” in which the levels are procedurally generated. It was also inspired by the dungeon crawls of the original Zelda games, in which the player traversed through separated rooms in a maze like fashion.

Isaac also utilises the ‘perma-death’ system where if you die once, then the run will be over and you will have to start the game out again. Gameplay wise this would be frustrating for players if the game were longer and linear, as they would have to play through the same bits over and over if they died. However because it is a roguelike and no two runs are the same, it is a new experience for the players every time. Having a perma-death system actually makes the game more interesting and fun as the stakes are higher for dying. Unlike other games where if you die you can just respawn at a save point, in Isaac you need to think before you act.

Isaac death screen.jpg
The menu that shows when you die, reminding you of all the items you had and what killed you

Do you have good items right now? Is it worth rushing through those enemies for the item and risk dying and losing this powerful run, or should you play it safe?
these sort of questions will pop up in your head a lot whilst playing Isaac

Controlling isaac is refreshingly simple compared complicated gameplay that can ensue with such little agency the player actually has in controlling Isaac. To play you can move in all four cardinal directions by using the WASD keys and shoot in the same directions using the up, down, left and right keys. Pressing e will allow you to drop a bomb provided you have one in your inventory, and pressing space will use your active item, once again provided you are carrying one.

This small set of controls while simple in nature can be transformed through gameplay through pickups and items, which is what makes Isaac so simple and yet so addictive. Items are rewarded to players every time they beat a boss, but they can also find an item in a special room every floor, as well as through many other mechanics such as secret rooms, devil deals, shops and many other ways. Learning how and where to find items turns you from a good Isaac player to a great one.

Angel item room.jpg
Finding a wooden stake a.k.a “stigmata” in an angel room

 

Normally isaac cannot go through debris that is laid out around the map, or over holes. However with an item that grants flying, you can now go straight over any floor based hazards. This is one small example that transforms your controls to allow you to do more but with the same set of buttons you were using before

Even the tears that you shoot can be transformed into other means of attacks by means of items. Different combinations can lead to very strange interactions and create wacky gameplay which keeps you coming back for me.

For example, you normally start out with your attacks shooting tears out of isaac’s eyes like this:

Isaac shooting tears.jpg
the white balls are the tears shooting out of Isaac’s eyes

 

However you can get an item called Brimstone that turns your tears into laser beams that shoot all the way across the room after you charge it up, like so:

Brimstone default.jpg
Just your average Brimstone laser

The laser seems pretty normal until you start mixing it with other items that change the shape of your attacks, make them bounce of walls, or even make your attacks separated from your body and just floating around the room. With brimstone and many other items you can go from the above to this:

Several brimstones.jpg
Several lasers means bad news for anybody you look at

to this:

Brimstone Tammys head.jpg
At this point Isaac has become a walking ball of death, you can barely see him underneath all those beams 

 

While you get stronger as you pick up items through the floors, the enemies also get more powerful and less predictable. Each floor has its own set of monsters that you will face, some showing up on several floors.

Each enemy has its own unique attack pattern which gives the player the chance to learn its pattern over the many defeats you will surely suffer to each enemy. But learning the enemies and getting better is one of the most satisfying parts of BoI. The variety in enemies mixed with the randomly generated rooms and of course randomly generated enemies keep the player on their toes at all times.

You may think you know how to counter a group of yellow flies chasing you, but can you evade the hoard of bugs while you have a (very bloodshot) eye homing in on you with a giant laser beam of a gaze?

Fighting Hush.png
Have fun learning how to dodge all of those blue and yellow (and green) orbs

 

The difficulty of the game depends on two factors:

  • your luck in finding powerful items
  • and your knowledge of enemies and skills in dodging and hitting your own shots

Mastering knowledge of the enemies is all great but if you can’t actually maneuver yourself to dodge and attack yourself then it’s all for naught. While the skill determines how far you can go in your run, the randomness of finding items keeps each run fresh.

You aren’t guaranteed to get any good items at all, meaning you will have to lean more on your skills than good items, but the opposite can also happen. Sometimes you get lucky and have the perfect combination of items so that the game becomes a breeze.

This polarising gameplay is so fun and frustrating and addictive that you cannot help but love the variety of it. You may lose a run with what seemed like the perfect set of items and you may get angry, but 5 minutes later it’s almost guaranteed you’ll be back on gearing up for another go.

3000000000% save.jpg
The file select screen of some poor soul who no doubt spent  1000+ hours on unlocking 100% of the items and achievements on three separate files

It is easy to sink hundreds of hours on BoI and still not be done with it, fun is in abundance with BoI. What else is in abundance is achievements and unlocks. Both of these factors of unlocking something play on the human psychology of wanting to collect EVERYTHING, which is another reason why many people just can’t seem to put down Isaac and his crazy imaginary adventures.

 

 

Demonstration of procedural programming tools and techniques

For my demonstration of procedural programming I created a small console application that would greet the user, ask them for their name and then take the users input as their name. From then on there would be a menu that allows the user to tell the computer to greet them, or to show how many times the computer has greeted so far or to close the app.

PP program menu

In this blog post I will go through the following points I this application demonstrates

  • Functions
  • Global variables
  • Procedures and parameter passing
  • Static variables
  • programming libraries
  • Local variables
  • Debugging

 

Functions

Firstly is functions, the function that I used in my program was named “HowManyGreets”, following the camal case notation, however starting the first letter as capital as well because it is a function.

PP programming function example

The function shown above has no parameters. instead it uses the global variable “greetCounter” which will be shown next. The function creates the string “sentence” that will be the message saying how many times the computer has greeted you today.

When the function is ran, it creates this variable and then returns it, so that when it is called that returned sentence can be written to the console

Global variables

The global variable in my program was named “greetCounter” as it was used to store the amount of greets the computer has given.

PP programming global variable example

greetCounter is a global variable because it has been declared within the Program class scope, meaning it can be accessed anywhere in the Program class. This includes access within the Main method, as well as any other functions and Procedures.

 

Procedures and parameter passing

The procedure I used in my program was called “GreetUser” it was used to write a greeting to the user whenever it is called

PP programming procedure example

The procedure passes in the string “name” whenever it is called, allowing the procedure access to the users name which is defined outside of its scope.

The procedure will then write to the console a message greeting the user by their name and then telling them its name by accessing a static variable from the computer class, which will be elaborated on in the next part

 

static variables

I used a static variable called “cpuName” within the Computer class I created

PP programming static variable example

As explained by the comments within the code, I used the two key words “public” and “static” when declaring this variable. Public was used so that other classes (such as the Program class where my main method resides) could have access to this variable.

The static keyword was used so that I could access this variable without having to instantiate an object from the class. Otherwise I would have had to create a “Computer” object just so that I could call its cpuName attribute

 

Programming libraries

Within my program I accessed the “console” library many times. One example is shown below

PP programming program libraries example

The three separate lines all call the console library in order to access its WriteLine, ReadLine and Clear function. These functions

  1. write a string to the console
  2. read the consoles line
  3. clear the console of all strings

respectively

 

Local variables

within my programs main method I have declared the local variable “name” to store the users input when they are asked for their name

PP programming local variable example

the string is a local variable because it is defined within the main method, therefore it can only be access within this scope unless it is passed through as a parameter.

Debugging

In the screenshot below I have demonstrated my use of the debugging tools within Visual Studios

PP programming debugging example

Here I am using the debugging tool to run through my program and test all of its features to ensure they are giving the correct outputs. When a bug is found I can run through the code step by step using the line stopper tool to see which line of code the bug stems from.

 

Object oriented programmings suitability for graphical applications

Object oriented programming is a framework for building a program by splitting it up into objects and then manipulating these objects to achieve the purpose of the program.

Graphical applications are user friendly by nature and look for a way to display graphically all of the interactions the user can make with the system. Objects can be utilised to work in the background as well as representing the controls that the user will interact with.

Objects work very well at representing graphical interfaces. most applications will have some sort of button or clickable object that the user interacts with, the key word here being “object”. The button itself is an object that can store all of the data needed by the button itself and any methods it uses.

Because objects can be easily mapped to the graphical interfaces, it keeps the code very modular and easily maintained. As with all object oriented programs, code is split into the objects mostly, therefore if a bug occurs, it will only affect the one object, and will not spread through the program. this allows developers to more easily find the sources of bugs as they are isolated to small portions of the code.

Another benefit of programming in OOP for a graphical application is the scalability potential, with graphical applications you will want to scale up constantly and add new buttons and interfaces as the application grows. These new graphical elements only require a new object to create which makes expanding the application easy as not everything has to be planned before it is integrated.

Finally, the nature of graphical applications is that they are very dependent on user inputs to function. A lot of the time the application will be sat idle waiting for the users input as a computer can process instructions far faster than a user can give commands. OOP works better with this kind of processing flow, as opposed to a procedural program, which would want to be constantly going through the code line by line. With an OOP program, the objects will only kick into action and process when the user gives an input, and when this does happen, only the objects concerned with the input will act, increasing efficiency. If a procedural program were waiting on a users input, when it finally received it the program would have to loop around and go through many lines of code before it got to the actual portion that would deal with the input of the user.

 

 

Encapsulation, Polymorphism and Inheritance: What makes an object an object

Encapsulation, polymorphism and inheritance are all features of OOP that make classes and objects as versatile as they are. They are all important in letting the developer manipulate and organize their objects to keep the code modular and efficient. Let’s begin with Inheritance because that’s where everything begins when creating classes.

Inheritance

As you know classes hold the ‘blueprints’ for an object, any information stored in a class (be it attributes or methods) will be inherited by any object created from that class. This inheritance allows for quick production of new objects, without making the developer type out the same code again and again if they wanted to produce multiple of similar objects.

Because inheritance is what powers classes, it means it also powers the ability to keep the program modular as classes are the building blocks that create the objects that make OOP progrmas modular.

Polymorphism

naturally building off of inheritance, polymorphism comes next. Polymorphism is the ability to change an object from its classes design. Sometimes you may want an object to have most of a classes attributes and methods, but have one or a few details changed. With polymorphism you can redefine a method or change an attributes value when you create an object, so that it is not an exact copy of the class.

Using animals again as they are one of the easiest to apply examples, imagine building a database for dogs in a shelter. Most dogs will have 4 legs and a tail, however there may be an exception where a dog only has 3 legs or is missing a tail. If we were storing these dogs as objects created using a class, the class would automatically say the dog has 4 legs and a tail. This is not what we want if we have an exception though, but with polymorphism we can change the attributes of this object when it is created from the class.

Encapsulation

Finally encapsulation is the idea of creating classes to ‘encapsulate’ all of the data common to that class. Creating the class is also a way of keeping the data within it safe as the you can only interact with the data within through special methods that you create also within the class.

The methods themselves will be designed so that the data can never become manipulated and altered into an invalid piece of data. This greatly reduces unstable code as there’s no way for data to be changed so that it breaks the code.

 

 

 

Key features of Object Oriented Programming (OOP)

There are a lot of OOP programming languages out there, some of the most famous languages of all are included. C++, C#, JAVA and PHP  all come to mind when thinking of OOP languages.  But what is Object Oriented Programming?

OOP is a programming paradigm used by many for its extensive application and flexibility. The style of programming that OOP allows lets the developer create objects and classes which will store data and be able to manipulate data in itself, and across other objects.

These objects are at the core of OOP and are what allows OOP to be developed efficiently and to run effectively. Objects are virtual representations of data, they can hold both attributes (data) and methods (reusable code that can manipulate data and perform functions)

Take for example a dog and a cat. Both the dog and the cat have a tail, so if we were to represent them as virtual “objects”, they would both have the attribute “tail = true”.  However while a dog barks, a cat will meow instead. Therefore we can create a different method for the dog and cat object, a bark method for the dog and a meow method for the cat.

 

Objects are awesome because they are discrete and also reusable parts. Each object is its own separate entity, one can be fiddled with without changing the other objects and no two objects will be the same (unless that’s what you want). They are also reusable as an object will always stick around, it won’t get deleted after it has ran its one method or anything like that.

They can also be made very easily using classes. Classes are like blueprints for objects, they hold all of the basic information that the object will include without including any specific details towards any object in particular.

For example with the dogs and cats again we could classify both of these objects as “animals” due to their common traits of tails, legs etc. This is called classification. Therefore we can create a class called “animals”, and put in all of the common information that is the same across our “animals”. Since we are only talking about cats and dogs here, we can use 4 legs as a constant across all animals, we can also include tails and fluffiness as part of the class.

Dogs and cats start to differ when it comes to being happy or grumpy, so we would leave this data out of the class, and when it comes to making the cat or dog object we would add in their specific details.

That brief description of objects and classes outlines the core feature of what makes OOP, OOP. There are many other features and benefits of programming in this paradigm though, here is a list of these features:

Identification of objects

As I mentioned briefly before, each object is different just like in real life, they each have their own “identity”. In real life, objects have their own “identity” as there are no two of the same things, two different chairs might both be chairs but they will never be the same chair composed of the exact same atoms. In OOP, objects are stored in memory, and the different places that the objects are stored give them their “identity”, no two objects can occupy the same space in memory at the same time.

Data Abstraction

Another useful feature of objects is data abstraction, in order to make the code as streamlined as possible you can remove all unnecessary data from objects if they aren’t needed for a certain part of the code. They can be added back later if you need but to keep the program working as efficient as possible, objects should be skimmed down to the bare minimum of data required at the current portion of the code.

Inheritance 

Going back to the classes that were mentioned before, objects can be created based on classes which act as ‘blueprints’. When an object is created from a class, it will ‘inherit’ all of the attributes and methods. This feature is what makes classes useful as you can quickly produce objects pre-loaded with all of the data needed.

Polymorphism

Sometimes when you are creating a new objects from a class you want it to differ slightly from being an exact copy of the class. This is where polymorphism comes in, it lets you alter the blueprint of the class for just one object, so you can keep your class the same for future objects but change the one object you wanted to be different.

Encapsulation

Encapsulation is the process of creating classes by bundling its data and methods together under a single class. When employing encapsulation you keep your attributes within the classes and objects private, so that they can only be accessed by code within the class itself. The only way left to interact with the attributes then is to use methods set within the class itself. This way of limiting your way of access to the attributes ensures that no code ever affects the data within a class in a way that would break the code.

For example if a class was holding several integers (whole numbers), which are always treated as such, if they were mistreated and divided so that they turn into a decimal number, then the code would break. Encapsulation avoids this by making sure the methods that deal with the integers will never result in a decimal

Parameter passing

Because some data is hidden from other parts of code (as mentioned in encapsulation), data sometimes is not available for methods that need it. To get past this barrier, developers will use ‘parameter passing’. We can send data through to a method that needs it even if the data itself is hidden, as long as we specify during the creation of that method that we will be needing the data.

Modularity

Modularity refers to keeping a programs structure broken down into smaller ‘modules’ of code that all deal with their own separate portion of the program. Bringing all of these modules together builds the program as a whole, whilst keeping the code from becoming a tangled mess. Modularity makes debugging code much less of a hassle for developers.