Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Charlie Chiarelli

Video games are on our computers, our consoles and our phones. Lots of people play them and every year more people are making them. If you have ever played a computer game and thought, “I wonder how they do that?” or, better yet, “I want to make something like that,” then this course will get you started. Game development is what got many developers into programming. But how many of us actually ever learned how to create games? Creating games can be challenging, but it doesn’t have to be that way.

Read more

Video games are on our computers, our consoles and our phones. Lots of people play them and every year more people are making them. If you have ever played a computer game and thought, “I wonder how they do that?” or, better yet, “I want to make something like that,” then this course will get you started. Game development is what got many developers into programming. But how many of us actually ever learned how to create games? Creating games can be challenging, but it doesn’t have to be that way.

MonoGame is a cross platform gaming framework based on Microsoft’s XNA framework that’s extremely easy to learn. MonoGame is a simple and powerful  framework for creating games for desktop PCs, video game consoles, and mobile devices using the C# programming language. Best of all, games you build with MonoGame will run on iOS, Android, Mac OS X, tvOS, Windows, Linux, PlayStation 4, and more—write once, play anywhere.  It has been succesfully used to create games such as Streets of Rage 4, Carrion, Celeste, Stardew Valley, and many other.

It is a re-implementation of the discontinued Microsoft's XNA Framework, and it provides the following features:

  • Game framework

  • 2D and 3D rendering

  • Sound effect and music playback

  • Keyboard, mouse, touch, and controller inputs

  • Content building and optimization

  • Math library optimized for games

There’s no shortage of options when it comes to game development environments. From full-featured engines like Unity to comprehensive and complex multimedia APIs like DirectX, it can be hard to know where to start. MonoGame is a set of tools, with a level of complexity falling somewhere between a game engine and a grittier API like DirectX. It provides an easy-to-use content pipeline, and all the functionality required to create lightweight games that run on a wide variety of platforms.

MonoGame is a "bring your own tools" kind of framework, which means that it provides the building blocks to build your own engine and tools, but it isn't quite an engine itself.

If you are expecting a scene editor (like Unity or Unreal), MonoGame is not that.

If you love coding and understanding how things work under the hood, MonoGame might be what you are looking for. And fear not, getting a game running with MonoGame only takes a few minutes.

Best of all, MonoGame apps are written in pure C#, and you can distribute them quickly via the Microsoft Store or other similar distribution platforms.

Our focus will be working with Visual Studio Community (Compatible with Versions 2019/2022) on Windows machines

Update 2023 All MonoGame Demos have now been updated to Version 3.8 (released late 2022) Previously MonoGame installed on your machine through an installer, but from 3.8 onwards everything is installed through NuGet packages and Visual Studio Extensions. The most notable change for existing users is that MonoGame will only support .NET 6 and Visual Studio 2022 moving forward.

Note:MonoGame 3.8 project templates are not compatible with earlier versions of MonoGame. If you wish to work on or build older MonoGame projects, then you will still need to install MonoGame 3.7.1 or earlier to open them. WindowsDX and DesktopGL templates now use SDK-style projects in MonoGame 3.8 The 3.7.1 demos are still maintained in the course.

This course assumes that you’ve done a little bit of  programming in C# but  all the material starts at the most basic level. That means that anyone should be able to join in and work their way through the material. That’s the good news.The bad news is that programming is hard work, especially at first. If you truly want to learn how to program, you’ll need to write programs yourself and struggle through some rough spots before some topics really click for you. Just as you can’t learn how to ride a bicycle by reading about it – you have to actually do it, probably with some spills along the way – you can’t learn to program just by reading about it or watching a video. If you were hoping to watch and  learn how to program without doing any programming yourself, it’s not going to happen... But having said that don't feel you are alone, I will be available daily for extra help should you need it. 

This course is project-based, so you will not just be learning dry programming concepts, but applying them immediately to real games as you go. All the project files will be included, as well as additional references and resources 

Here's how I will help you to succeed:

o    Each lecture starts with a list of objectives/speaking notes

o    Every example covered in the lecture is available for download in the resources section  … including the objectives/speaking notes

o    Almost every lecture has a set of Practice problems with full solutions provided

o    My style of writing and teaching follows the KISS principle : Keep It Super Simple.   I try to stay away from fancy computer terminology and try to teach like am speaking to a brand new user with little to no previous knowledge on the subject matter.... and  I am always available for help … replying most times within a day.

.... And finally please do not judge a book by it's cover ... don't judge the course by the title or this small description section, if you want to know exactly all the topics covered please go to:

.. This will open up literally thousands of lines of very detailed lecture descriptions leaving no doubt what is and what is not covered.

... So are you ready to start making your first games ? Lets get started .

Enroll now

What's inside

Syllabus

At the end of this section students should have a good overview of the course and have all necessary software to follow the material

In this Lecture we will 

  • Learn about the instructor for this course ... Charlie Chiarelli
  • Learn about the instructors educational background
  • Learn about the instructors educational philosphy
Read more

In this Lecture we will 

  • Highlight the historical development of Monogame and why you should want to learn it
  • Learn that Microsoft C# and .Net are my favorite development tools. 
    • For creating Windows desktop and web-based applications, they are unsurpassed. 
    • However, one area where C# fell short, was in game development. Using the .Net API’s it is not possible to get the high performance required for gaming. DirectX, which is used by virtually all professional games on Windows, requires the use of the C++ language. DirectX allows low-level access of the Video Card, which makes it the fastest method of drawing on the screen for the PC.  Many people find  C++ to be a difficult language to learn and use, fraught with many of the same pitfalls that plague developing with C.
  • Learn that In 2006, Microsoft provided a solution: 
    • Microsoft XNA Framework. XNA allows C# developers to access DirectX from C#. 
    • XNA, which is a set of tools and code libraries (with a level of complexity falling somewhere between a game engine and a grittier API like DirectX) that made it easy to make games that could be run on Windows desktop and laptop computers, plus their Xbox 360 console. Soon after, they updated it to be able to also run on their Windows smart phones. For many programmers, this was the thing we had been waiting for. A system where you could create games that ran all over the place, and without an insane amount of trouble or work. 
    • For years, Microsoft did a great job of supporting and growing XNA, and it became an exciting approach to game development. C++ is still the go-to solution if you need to squeeze the absolute last bit of performance out of a PC, but C# is now a very credible solution for gaming development. In fact, it has been used by many commercial games today. For many people, getting your game on a console like the 360 was several heaping teaspoons full of pure awesome. There's no way you could not be excited about that. But still, there were more platforms that people wanted to be able to target: iPhones, Android phones, other consoles, and Macs and Linux machines as well.
    • Unfortunately, Microsoft discontinued XNA development in 2013. But, thanks to the open source community, all was not lost. MonoGame is a compatible open source version of XNA, that is still being supported. Even better, MonoGame is extremely easy to learn and  is cross-platform, so you can develop games in C# for iOS, Android, Mac OS X, Linux and Windows.
  • Learn that MonoGame is an open-source port of XNA. It's not run by Microsoft, but rather a group of independent software developers (including you, if you wanted to join) who wanted to build a version of XNA that allows people to use the exact same code, but run everywhere. (On these other platforms, instead of running on Microsoft's .NET Framework, the games run on Mono.NET, which is an open-source port of the .NET Framework itself.)
    • Learn that MonoGame far better than its XNA heritage
    • MonoGame is built from the ground up to be multi-platform, supporting many of today's modern platforms, including:
      • Android
      • iOS / MacOS
      • Windows 8 / Windows 10
      • Linux
      • Even Consoles
      • And many more (still growing)
    • Learn that MonoGame has even extended the Content pipeline that XNA introduced (an asset management system) to also make assets like Art, Textures, Models and so on, work for every platform from a single configuration / building platform.
  • Raise the issue ... Why not Unity, Unreal or any other  Game Maker
    • When you are picking the Game Development framework or engine to start with (or jump to), it's important to choose what you want to build your game / project in using something that suits your development style.
      • Unity and Unreal have a great editor / GUI experience with some coding required, so it's a good fit if you like drag and drop.
      • Scratch / Game maker and others offer a much more stripped down and basic experience meant to wet your appetite. Although I have seen some serious projects built with these 
      • XNA / MonoGame on the other hand, are a full coded experience. So if you prefer to control all the bits of your game and not rely on things being done for you, it's a better fit.
  • Showcase games created with Monogame : https://www.youtube.com/watch?v=i8h5u5BgoJY

In this Lecture we will

  • Highlight the software you need to participate in the course

    • Visual Studio 2015 2017 2019 2022  Express or Community

    • MonoGame Version 3.6 or 3.71

    • 7zip

  • *** Update ***

    • Migrating from 3.7

      Previously MonoGame installed on your machine through an installer, but from 3.8 onwards everything is installed through NuGet packages and Visual Studio Extensions.

      Note MonoGame 3.8 project templates are not compatible with earlier versions of MonoGame. If you wish to work on or build older MonoGame projects, then you will still need to install MonoGame 3.7.1 or earlier to open them.

In this Lecture we will

Learn about some of the concepts and applications we will create .. here is a sampling

  • Create a Graphics program which simulates an "Etch-A-Sketch" drawing program
  • Create Graphics applications which incorporate drag and drop events
  • Create a simple object animation then use it as the basis for a car race game
  • Create a slot machine game
  • Create a falling objects games ... where you move an object around with the keyboard and catch objects falling from the sky for points
  • Create a Space shooter game
  • Create several 2d Game Applications which incorporate flicker free animation and allow the user to use the keyboard and mouse to control movement.
  • Create a Scrolling Game
  • Create a game which incorporates Game State Management
  • .... and Much More 
  • .... Now its your turn !

In this Lecture we will

  • Learn about the graphics coordinates of the screen
  • Learn how to access (instantiate) and use the C# graphics class to draw lines,rectangles,ellipses and load images from a file on the form
  • Create a simple dice roll graphical simulation

In this Lecture we will

  • First review the concepts of the previous lecture by using an example which implements a user created Class that draws Faces on the screen
  • Learn how to draw on a Panel control
  • Learn about using the Color.FromArgb(alpha,r,g,b) command
  • Learn how to scroll the contents of a panel

In this Lecture we will

  • Challenge you to create a program that generates an 8x8 red and black checkerboard

In this Lecture we will

  • Learn about the Mouse Events MouseDown, MouseUp and MouseMove
  • Write several programs that incorporate mouse movement including a drawing program.
    • MouseProblem ... multiple forms
    • UpdatedBlackboard

In this Lecture we will

  • Create several applications incorporating the mouse and using classes
    • SimpleHouse ... note the use of the Point class
    • CsharpDraw ... note the use of ArrayList
  • Demo a simulated version of dragging and dropping ...MouseMove

In this Lecture we will

  • Create a program which simulates a drag and drop application
  • Challenge you to create your own application

In this Lecture we will

  • Learn what timers are and how to use them
  • Learn how to use an array of images
    • using images placed in pictureboxes on the form
    • using images stored in an external files
  • Using Threads instead of Timers

In this Lecture we will

  • Learn how to extract frames of images from animated gifs (using GifFrame) that can be used in your animations
  • Learn to create (draw) your own images that will become the individual frames of your animation
    • FlipBook
    • EyeAnimation (uses forward and reverse animation)

In this Lecture we will

  • Look at two applications of in place computer animation
  • Look at the Dice Roll Game
  • Look at the Slot Machine Game

In this Lecture we will

  • Make our objects move across the screen using the .Top and .Left properties
    • Discover how to check for the screen edges (top,bottom,left and right)
    • Discover how to make an object bounce off the wall or reappear around the other side
  • Demonstrate several racing applications

In this Lecture we will

  • Give you the challenge to create a simple two car race ... with some hints (help) of course !

In this Lecture we will

  • Learn about another way to move objects across the screen using the DrawImage command

In this Lecture we will

  • Learn how to create transparent gifs/png

In this Lecture we will

  • Learn about the 4 requirements for collision
  • Learn how to detect keyboard events using the KeyDown Event
  • Create a simple application to implement both of these concepts
    • Learn how to animate without using pictureboxes
    • Learn that everything is an image object including the background
    • Learn that instead of wiping the screen with the backcolor we now redraw the background graphic over the current state of the animation

In this Lecture we will

  • Learn how to incorporate sound into a C# program
  • Learn how to use two techniques to create sound , the System.Media technique and using the Windows Media Player

In this Lecture we will

  • Learn how to create a simple Falling Objects game
  • Learn how to incorporate image arrays for the falling objects to reduce coding
  • If you have taken the "Beginners Version of this Course" ... how about the extra challenge
    • keep track of a top 10 best scores (names and scores)  in sorted order
    • store the scores in a data files 

In the Lecture we will

  • Learn to use some advanced animation techniques including using "double buffering" to reduce screen flicker during game creation
  • Create some simple animations incorporating double buffering

In this Lecture we will

  • Learn to use the mouse with double buffering
  • Learn about double buffering on a panel

In this Lecture we will

  • Learn about the concept of scrolling
  • Create a program to simulate scrolling

In this Lecture we will

  • Learn that game development is driven by polling for events, rather than waiting to hear that an event has taken place. Instead of the system telling the game that the user has moved the mouse, for example, your game will have to ask the system if the mouse has moved. In the meantime, the application is always performing actions, regardless of user input
  • Learn about the basic game loop (polling)
    • While (game is runing)
      • check for input (keyboard/mouse)
      • update all objects in the game (position)
      • draw all the objects in the game
      • refresh the screen (force a repaint)
  • Work through several sample games making incremental improvements as we go along

In this Lecture we will

  • Create a Space Shooter Game
  • Leave you with the challenge to create your own game

In this Lecture you will

  • Learn to use the MonoGame Windows Project Template

  • Run your first MonoGame program

  • Understanding the underlying Template code

    • Directives (using)

    • Game1 Class

    • Instance Variables (SpriteBatch)

    • The Constructor ... Game1()

    • The Initialize Method

    • The LoadContent Method

    • The Update Method

    • The Draw Method

  • public Game1() The constructor. We aren’t going to change this method at all for this tutorial.

  • protected override void Initialize() Here we initialize any class variables that are used. This method is called once at the start of the game. 

  • protected override void LoadContent() This method loads content (eg. textures, audio, fonts) into memory before the game starts. Like Initialize, it’s called once when the app starts. 

  • protected override void UnloadContent() This method is used to unload non content-manager content. We don’t use this one at all. 

  • protected override void Update(GameTime gameTIme) This method is called once for every cycle of the game loop. Here we update the states of any object or variable used in the game. This includes things like an object’s position, speed, or color. This is also where use input is handled. In short, this method handles every part of the game logic except drawing objects on screen. 

  • protected override void Draw(GameTime gameTime) This is where objects are drawn on the screen, using the positions given by the Update method.

  • Update!

    • Migrating from 3.7

      Previously MonoGame installed on your machine through an installer, but from 3.8 onwards everything is installed through NuGet packages and Visual Studio Extensions. The most notable change for existing users is that MonoGame will only support .NET 6 or greater and Visual Studio 2022 moving forward.

      Note MonoGame 3.8 project templates are not compatible with earlier versions of MonoGame. If you wish to work on or build older MonoGame projects, then you will still need to install MonoGame 3.7.1 or earlier to open them.

    • WindowsDX and DesktopGL templates now use SDK-style projects.

    • MonoGame tools (MGCB, 2MGFX, and the Pipeline Tool) are now distributed as .NET Tools automatically when using any of the MonoGame 3.8.1 templates.

      The Pipeline Tool has been renamed MonoGame Content Builder Editor (MGCB Editor) and does not require an installation anymore (providing that you are using the MonoGame 3.8.1 templates). The Visual Studio 2022 extensions make .mgcb files within your solution clickable and will open the MGCB Editor on them.

    • Choose:

      • MonoGame Windows Desktop Application (uses DirectX)

      • MonoGame Cross-Platform Desktop Application (uses OpenGL)

In this Lecture we will

  • Set up the Pipeline Tool 
  • Learn to add assets to our project using the Pipeline Tool
    • images ... bmp, jpg, png (best)
    • audio ... wav , mp3
  • Organize content into folders 

In this Lecture we will

  • Create a place to store the images (instance variable of type Texture2D)
  • Load the images into the instance variables
  • Draw the images using SpriteBatch (object used to do drawing)
    • using the Draw command

In this Lecture we will

  • Introduce the concept motion in Monogame
  • Learn how to use the Vector2 class to create objects which indicate the sprite location of our images
  • Use the Update method to change our Sprite Location
  • Use the Draw Method to redisplay our sprite at its new location

In this Lecture we will

  • Introduce the concept of velocity
    • we add a velocity instance variable from the Vector2 class which will be used to move our image , instead of using a constant
  • Introduce/Review some basic Vector addition concepts from mathematics

In this Lecture we will

  • Discuss the screen constraints
    • where exactly (X location ) is the right and left walls
    • where exactly (Y location ) is the top and bottom walls
  • Create a program which has the image bounce off any part of the walls it encounters

In this Lecture we will

  • Learn how to create a Sprite Font using the Pipeline Tool
    • Edit the Font (XML)
  • Use the Sprite Font to display a count of the number of wall collisions
    • Using the DrawString command

In this Lecture we will

  • How to add sounds to your Mono Game Project
  • First we add directives 
    • using Microsoft.Xna.Framework.Media
    • using Microsoft.Xna.Framework.Audio
  • Next add instance variables of the Song and SoundEffect classes
  • Next we load the sounds
  • Lastly we Play the sounds at the desired location in the program 
    • Background music (songs) can be started  right at the beginning
      • mp3s work best with songs ...
        • but can use wavs ... need to force pipeline tool to change processor type from wav to song
      • can't play two songs at same time one will cancel out the other
    • SoundEffects are activated at a specified point in your game like hitting an object 
      • wavs are used for Sound Effects
      • multiple sound effects can play at the same time... can play over the background music 

A recap of the concepts learned in this section

In this Lecture we/you will

  • Be introduced to the "Big Green Head" problem set
    • a series of exercises to review, reinforce and extend the knowledge gathered in the previous Section
  • Place a number of similar static images of differing colors at various locations on screen 

In this Lecture we/you will

  • Create a Vector2 object to store sprite locations instead of using constants
  • using the sprite location object have an image move across the screen

In this Lecture we/you will

  • Determine when an object (image) hits one of the four walls  (left/right/top/bottom)
  • Reverse the direction of the object off the wall (make it bounce off the wall)

In this Lecture we will

  • Start the implementation of a BoucingHead class
    • Create the BouncingHead class
    • Create an instance of the class
    • Update the instance
    • Display the instance
  • Begin to appreciate how this implementation will ... eventually make the program more structured and shorter

In this Lecture we/you will

  • Update the BouncingHead Class 
    • add static fields to easily access the Sprite Texture Object
    • add a parameterized Constructor
    • add an Update method to be called from the main Game
    • add a Draw method to be called from the main Game

In this Lecture we/you will

  • Update the BouncingHead Class
    • add accessors and mutators for the Position and Velocity of the image object
    • now enforce encapsulation

In this Lecture we will

  • Add one more feature to the BouncingHead class
    • add a color property  
  • In the main Game modify the image objects color in several ways

In this Lecture we will

  • Learn to add a background, instead of using the standard blue screen
  • Learn to implement the Rectangle class by creating an object that matches the exact dimensions of the screen
  • Learn that the order the background is drawn is very important
  • Learn to use a different version of the Draw command
    • Instead of using the regular draw which takes a vector specifying X,Y
    • Use a draw technique that takes a Rectangle object specifying the X,Y, Width and Height of the bounding rectangle of the destination sprite.
    • By specifying the width and height the SpriteBatch knows how to scale the sprite from its original size to the size specified.

In this Lecture we/you will

  • Implement the Song class to play background music
  • Recall the importance of the directive accessing Media  in the XNA Framework

In this Lecture we will

  • Implement an array of BouncingHead objects  to show the power of Object Oriented Programming and arrays.
    • Because we are using an array of objects we must instantiate each individual array object
    • Update all the objects using a foreach for efficiency
    • Draw all the objects using a foreach for efficiency
  • Have some fun watching a bunch of crazy looking heads bouncing everywhere

In this Lecture we will

  • Learn how to have an object rotate around a central point
  • Introduce another form of the Draw command which incorporates angles

In this Lecture we will

  • Learn one of the techniques used to display character animation
    • Find or create a group of related images
    • Declare an array of type Texture2d and store the images in the array
    • Cycle through the images and draw them each time the screen is updated
    • Discuss how to control the speed of the update

In this Lecture we will

  • Cover how to use texture sprite strips , which are single images with multiple textures on it. 
    • Look at how we can do 2D animation using these sprite strips 
    • Look at how these strips are much more efficient then using multiple images
  • Look at how our strip has 16 different images (frames) evenly spaced on a 4x4 grid
    • Determine the width and height of each individual frame by taking the Sprite Strip Width/4  and Height/4
  • Learn how to create an AnimatedSprite class to handle most of the calculations, updating and drawing

In this Lecture we will

  • Look at the basics of getting player input from the keyboard
    • The Keyboard class has a method that returns the current state of the keyboard whenever it is called. The current state of the keyboard is stored in a KeyboardState object
    • KeyboardState state = Keyboard.GetState();
  • Look at how to control the movement of an object on screen using the keyboard state
    • To determine whether a key is pressed down or not, we can use the method IsKeyDown() in the KeyboardState class
    • if(state.IsKeyDown(Keys.Left))
      { // do something here } 

In this Lecture we will

  • Take a look at another simple application of Keyboard detection and character movement ... with a twist
    • The character we are trying to control is already is motion 
    • When the character collides with the wall it changes its shape

In this Lecture we will

  • Revisit the first Lecture in this section and develop a technique to determine when the ball has collided with the earth
    • We take a look at the concept of bounding rectangles
    • We apply the Intersect property of rectangles
  • We introduce the concept of a hit flag to control scoring

In this Lecture we will

  • Begin a step by step development of a simple game incorporating Keyboard movement and Collision detection
    • ... Don't want to "Build it with me" ... then jump to the RECAP Lecture
  • Collect our assets and add them via the Content Pipeline Tool
    • two images ... a ball and a man/women (transparent/png)
    • two wav files
    • a sprite font
  • Add a couple of new directives for Sound Effects and Music
  • Declare all our variables
  • Load our content
  • Make Mouse Visible
  • Code the Draw method ... display the ball, the man and the score

In this Lecture we will

  • Complete our simple game creation
  • Focus on the Update method and all the necessary logic
    • Tracking keyboard movement left and right
    • updating the position of the falling ball
    • checking when the ball hits the walls or the ground
    • check for a collision between the man and the ball 
      • update the score
      • play a sound
      • reverse the direction of the ball

In this Lecture we will

  • Look at a simple application of  Keyboard input and Collision detection
    • ... already "Built It With Me ? " .... then you can skip this lecture
  • Create simple falling object game with a character along the bottom of the screen trying to make contact with the object for points
    • note the use of IsMouseVisible=true in Initialize
    • note the use of the Intersects method and the additional condition for collision

In this Lecture we will

  • Learn how to get player input from the mouse
    • The first thing we are going to do is to get the current state of the mouse. 
    • The natural place to put our code is in the Update() method. 
    • Add the following lines of code to get the current mouse state:
      MouseState mouseState = Mouse.GetState();
    • The MouseState class contains all of the information that we could possibly want to know about the current state of the mouse.
      To do this, we just add the following code: 
    • if(mouseState.LeftButton == ButtonState.Pressed) { // Do whatever you want here }
  • Learn that the mouse location and button clicks are kept up to date in your Monogame, however, by default, the mouse is not displayed. One solution to this is to just draw an image at the location of the mouse.
  • Learn how to simulate an explosion when the mouse is clicked at a particular location

In this Lecture we will

  • Offer you the challenge of creating your first game in MonoGame
  • Suggest that as a start you possibly redo a previous game created in plain C#
  • Demonstrate an instructor created sample game
    • Space Shooter Game
  • Demonstrate how to change the screen startup size for your game... including going Full Screen

An overview of Keyboard, Mouse input and Collision Detection

In this Lecture you will

  • Learn the concept of Game State Management
    •  Every game starts off in an introduction state, then moves to a menu of some kind, and finally play begins. When you're finally defeated, the game moves to a game-over state, usually followed by a return to the menu. In most games it is possible to be in more than one state at a time. For example, you can usually bring up the menu during game play.
    • The traditional way of handling multiple states is with a series of if statements, switches, and loops. The program begins in the intro state and loops until a key is pressed. Then the menu is displayed until a selection is made. Then the game begins, and loops until the game is over. Everytime through the game loop, the program must check to see if it should display the menu or simply draw the next frame. Also, the part of the program that handles events must check to see if your input should affect the menu or the game. 
  • Learn to implement a simple Game State Management technique in Monogame 

In this Lecture we will

  • Discuss and Overview the look and feel of the Cannon Shooter Game we want to create
  • Create a GameObject class which will be used by the main program to create the enemies and the cannonballs
  • Make all our declarations
    • Texture2D
    • Rectangles
    • GameObjects
    • SpriteFont
  • Load all the content

In the Lecture we will

  • Draw the content
  • Create the Update method
    • delve into the cannon rotation calculation which constrains the cannon to 90 degree movement ... using the Clamp function
  • Create the UpdateEnemies method
    • delve into the respawning calculation which uses the Lerp Function and Random numbers

In this Lecture we will

  • Complete the Cannon Shooter Game
  • Create the FireCannonBalls method which involves some Trig calculations to determine the velocity (x,y) components
  • Create the UpdateCannonBalls method which checks for collisions and updates the score
  • Challenge you to create a new game which incorporates Games State Management and mirrors the new skills developed in the Cannon Shooter Game
    • using Class objects
    • firing at objects with some sort of rotational element ... how about the cannon at the bottom centre of the screen with full 180 degree movement

Recap of the Next Step in Game Development

In this Lecture we will

  • Learn how to implement a simple side scrolling technique in MonoGame
    • Declare an array of Textures ... a series of related images 
    • Position each Texture in a horizontal line... one on screen the rest off screen to the right
    • Start an infinite loop (Update method) where each texture's x position is decremented , until its x position is totally off screen to the left
    • Move the offscreen texture to the end of the line back on the right side by updating is x position 

In this Lecture we will

  • Create a vertical scroller that is controlled by the keyboard
  • Demonstrate how to create a scrolling screen by using one image that is redrawn in strips down and across the screen (tiled)

In this Lecture we will

  • Extend our knowledge of scrolling by introducing a rotating shooting object in the center of the screen
  • Incorporate the use of a Struct to define our bullets
  • Make use of a Sprite Strip to contain our scrolling background,bullet, and firing object
  • Change the frame rate of the game using TargetElapsedTime and TimeSpan
  • Highlight the Update routine 
    • Turning the ship ... keyboard detection
    • TurnShip() Method
  • Highlight the Draw routine and its exclusive use of calls to methods
    • Look at the DrawShip method
    • Look at the DrawBackground method used to tile the background  ... To be continued in next Lecture

In this Lecture we will

  • Continue our look at our newest scrolling application
  • Focus on the Update method and its associated calls 
    • MoveShip
      • Revisit DrawBackground
    • Shoot
    • DrawBullets
    • UpdateBullets

In this Lecture we will

  • Look at a simple game which incorporates scrolling ... in this case  ... vertical scrolling
    • Drive Fast and Avoid Obstacles... Vertical Scroller
  • Challenge you to create a new game which incorporates a scrolling component

In this Lecture we will

  • Demonstrate a variety of games created by students 
  • Look closely at the code of the "Jungle Runner Game"
  • Showcase games created with Monogame : https://www.youtube.com/watch?v=i8h5u5BgoJY

In this Lecture we will

  • Discuss where to go from here
  • Why not Unity, Unreal or Other Game thing X?
    • When you are picking the Game Development framework or engine to start with (or jump to), it's important to choose what you want to build your game / project in using something that suits your development style
      • Unity and Unreal have a great editor / GUI experience with some coding required, so it's a good fit if you like drag and drop.
      • Scratch / Game maker and others offer a much more stripped down and basic experience meant to wet your appetite. Although I have seen some serious projects built with these 
      • There are those who then also like to go even lower but we shall not mention such things so as not to scare the birds, lest they fly away. 
  • My advice is to choose what is the right fit for YOU and go with it. If you end up getting lost, then try something else until you find the right home for YOU. Game Development is a very personal thing and the tool you choose should be your choice!

In this Lecture we will

  • discuss future options for students interested in game development

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Uses MonoGame, which allows developers to write code once and deploy games on multiple platforms, including iOS, Android, Mac OS X, tvOS, Windows, Linux, and PlayStation 4
Focuses on Visual Studio Community (2019/2022) on Windows, which is a widely used and accessible development environment for C# programmers
Updated to MonoGame version 3.8, released in late 2022, which ensures that learners are working with a relatively recent version of the framework
Requires Visual Studio 2022 and .NET 6 or greater for MonoGame 3.8, which may necessitate upgrading software for some users
Assumes some prior C# programming knowledge, which may require beginners to acquire basic C# skills before starting this course
Includes demos maintained in MonoGame 3.7.1, which may require installing an older version of MonoGame to work on or build older projects

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Intro game dev c# monogame

According to learners, this course offers a solid foundation in game development using C# and MonoGame. Many appreciate the project-based approach and find the instructor's explanations clear and follow the KISS principle. The course effectively covers graphics basics, animation, collision detection, and user input. Some reviewers mention initial challenges with software setup, particularly with different MonoGame versions, although the instructor has provided updates to address this. While some note that MonoGame is a framework requiring more coding compared to engines like Unity, those who prefer understanding things under the hood find it a rewarding experience.
Suits learners who prefer coding over GUI engines.
"If you like coding and understanding how things work, this is a great course."
"MonoGame requires more coding than Unity, which is exactly what I was looking for."
"This course is ideal for those who want to build their own game framework from code."
Course updated to address technical changes.
"Glad to see the course was updated to cover MonoGame 3.8 and .NET 6 changes."
"The instructor included sections on migrating from older versions, which was helpful."
"Updates show the instructor is maintaining the course and responding to changes."
Instructor is clear and easy to follow.
"The instructor explains concepts clearly and uses simple language."
"I appreciate the instructor's teaching style and his use of the KISS principle."
"Lectures are well-structured and easy to understand, even for complex topics."
Effective hands-on learning through projects.
"The project-based structure is very helpful for applying concepts immediately."
"I really liked building actual games as I went through the material."
"The exercises and projects reinforce the lecture content effectively."
Provides a strong base in 2D game development.
"This course gives you a good start in the world of game development."
"I felt that the course provided a solid foundation in 2D game development using C# and MonoGame."
"The course gives you the basics you need to start making simple games."
Potential initial challenges with software setup.
"Setting up MonoGame with Visual Studio was a bit tricky initially."
"I encountered some issues getting the correct version installed and configured."
"Need to pay close attention to the instructions for installing MonoGame, especially version differences."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in A Gentle Intro To Game Development Using C# and MonoGame with these activities:
Review C# Fundamentals
Reinforce your understanding of C# syntax, data types, and control flow, which are essential for game development with MonoGame.
Show steps
  • Review C# documentation and tutorials.
  • Practice writing simple C# programs.
  • Complete online C# coding challenges.
Review: C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development
Gain a deeper understanding of the C# language and .NET framework, which are the foundation of MonoGame development.
Show steps
  • Read the chapters on C# syntax and .NET Core fundamentals.
  • Work through the code examples provided in the book.
  • Experiment with different C# features and .NET APIs.
Follow MonoGame Tutorials
Learn the basics of MonoGame by following step-by-step tutorials that cover topics such as creating a new project, loading assets, and drawing sprites.
Show steps
  • Find beginner-friendly MonoGame tutorials online.
  • Follow the instructions carefully and try to understand each step.
  • Experiment with the code and modify it to see what happens.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Sprite Movement Exercises
Practice moving sprites around the screen using different techniques, such as keyboard input, mouse input, and timers.
Show steps
  • Create a new MonoGame project.
  • Load a sprite into the project.
  • Implement keyboard input to move the sprite.
  • Implement collision detection with the screen boundaries.
Simple 2D Game Prototype
Start a small game project to apply the concepts learned in the course, such as sprite animation, collision detection, and game state management.
Show steps
  • Choose a simple game idea, such as a platformer or a shooter.
  • Create a basic game loop and implement sprite rendering.
  • Add player input and movement.
  • Implement basic collision detection.
Create a Game Development Blog
Document your game development journey by creating a blog where you share your progress, challenges, and solutions.
Show steps
  • Set up a blog on a platform like WordPress or Medium.
  • Write regular posts about your game development projects.
  • Share your code, assets, and design ideas.
  • Engage with other game developers in the community.
Review: MonoGame Cross-Platform Development Cookbook
Explore advanced MonoGame techniques and solutions to common game development challenges.
Show steps
  • Browse the table of contents and identify topics of interest.
  • Read the recipes related to those topics.
  • Implement the code examples in your own projects.
  • Experiment with different approaches and techniques.

Career center

Learners who complete A Gentle Intro To Game Development Using C# and MonoGame will develop knowledge and skills that may be useful to these careers:
Indie Game Developer
An indie game developer works independently or in a small team to create and publish their own games. This role allows for creative freedom and control over the entire game development process. Considering that indie developers often have limited resources, a framework that allows for creating cross-platform games is invaluable. MonoGame enables this. This course may be useful for prospective indie game developers by providing them with the means to quickly and easily create cross-platform games. The course may also give them the ability to distribute them fast via Microsoft Store or similar platforms. This will allow many people to get started in game development.
Game Programmer
A game programmer brings video game ideas to life through code. This role involves writing the logic that controls game mechanics, artificial intelligence, and user interfaces. Skills in C# and familiarity with game frameworks like MonoGame, which is 'a bring your own tools' kind of framework, are particularly valuable. This course helps build a foundation for game programming by introducing C# and MonoGame as well as showing you how to make use of Visual Studio Community 2019 and 2022. By learning how to develop games using C# and MonoGame in this course, aspiring game programmers gain experience that may be helpful in entering the field. They may become familiar with cross platform development for iOs, Android, MacOS, Linux, and Windows.
Mobile Game Developer
Mobile game developers specialize in creating games for smartphones and tablets. This role requires experience with cross-platform development and optimization for mobile devices. The use of MonoGame is highly relevant, as it allows for C# development of games that can be deployed on both iOS and Android. This course may be useful because it focuses on MonoGame, a framework used to create mobile games with C#. The course provides exposure to C# and cross-platform game development. Specifically, the course's use of MonoGame, which allows the user to write once and play anywhere on a variety of mobile and desktop platforms, should prove useful to those interested in this career.
Software Engineer
Software engineers design, develop, and test software applications. While not exclusively focused on games, a software engineer with game development experience has a unique and valuable skill set. The C# skills taught in the course are directly transferable to software engineering. This person needs to love to code and understand how things work under the hood. Also, the course emphasizes a project based approach. It may be helpful for software engineers who are seeking to pivot as it utilizes skills in C#, and applies them immediately to real games as you go.
Tools Programmer
Tools programmers create software that helps game developers make games more efficiently. This might include level editors, animation tools, or build automation systems. This area of game development often requires strong programming skills and a deep understanding of the game development pipeline. The fact that MonoGame is a 'bring your own tools' kind of framework may make this course helpful. After taking the course, the tools programmer may be able to build their own engine and tools. They can then use this personal engine to build their own games.
Game Designer
Game designers are the creative force behind video games. They conceptualize game mechanics, create storyboards, and define the overall player experience. While this role doesn't always require coding skills, a basic understanding of game development helps designers communicate their ideas effectively with programmers. This course helps designers who want to learn how to program, and design, computer games. They may learn how to use C# and the MonoGame framework. The course can also show you how to create simple games, which is where the design process begins.
Multimedia Programmer
Multimedia programmers develop interactive software that incorporates audio, video, and graphics. The skills of multimedia programmers may be applicable to development across a variety of media. This course provides the foundation for careers in multimedia. The course's incorporation of audio and visual elements can be valuable for multimedia programmers. Also, the project-based approach can assist in the development of interactive software.
Simulation Developer
Simulation developers create software that simulates real-world systems or environments for training, research, or entertainment purposes. Familiarity with game development concepts is a plus. The techniques learned in the course such as the C# language and the MonoGame framework are very valuable for creating simulations. The course introduces the user to the gaming environment and provides projects that may be useful in a related setting. It is not a game engine, but a foundation for creating simulations.
Virtual Reality Developer
Virtual reality developers create immersive experiences for VR headsets. Skills in 3D graphics, game development, and user interface design are essential for this role. While the course focuses on 2D game development, the C# programming skills and game development concepts taught can be transferable to VR development. Also, the fact that games built with MonoGame run on Windows and Linux can be useful. By building a strong foundation in game development, you may be better prepared to transition to VR development.
Augmented Reality Developer
Augmented reality developers create applications that overlay digital content onto the real world using smartphones, tablets, or AR glasses. This role requires experience with mobile development, computer vision, and user interface design. Augmented games can make use of ideas in the course. The cross-platform development skills learned through MonoGame in C# may prove useful in Augmented Reality development. The skills are directly transferable and may be easily learned.
Quality Assurance Tester
Quality assurance testers play a crucial role in ensuring the quality of video games. They test games for bugs, glitches, and gameplay issues, providing feedback to the development team. While this role doesn't require extensive programming knowledge, familiarity with game development concepts can be advantageous. Also, the course offers additional references and resources which may be useful. By taking the course, QA testers may be able to better understand the game from the developers' perspective. The testers may also be able to see issues beyond the surface level and come up with better resolutions.
Technical Artist
A technical artist bridges the gap between art and programming in game development. This role requires both artistic skills and technical knowledge to optimize assets for performance and create visual effects. This role works with artists to work on building their own games while getting the most out of their resources. Technical artists may find value in understanding C# and MonoGame and they might find it valuable in their work. By learning the basics of programming, technical artists may be able to work more efficiently with programmers and provide more effective feedback.
Curriculum Developer
Curriculum developers design educational materials and courses. A background in game development can be valuable for creating courses that teach programming or game design. By taking the course, future curriculum developers may learn new ways of teaching. This exposure might then be used to help others learn about game development. The fact that the course is project-based may provide a strong foundation for teaching. Game development is what got many developers into programming. This course may be useful in creating an engaging curriculum.
Web Developer
Web developers create and maintain websites and web applications. While seemingly unrelated to game development, the C# programming skills learned in this course are applicable to web development using the ASP.NET framework. The course states that Microsoft C# and .Net are the instructor's favorite development tools, and that for creating Windows desktop and web-based applications, they are unsurpassed. This provides a strong connection between web development and skills taught in the course. The C# skills taught in the course are transferable to web development.
Data Scientist
Data scientists analyze large datasets to extract insights and inform decision-making. While data science is not directly related to game development, the programming skills gained in the course can be valuable for data analysis and visualization. This course is helpful to gain some programming skills. The course also takes a project based approach, and this may lead to a greater ability to focus on details. The course is designed for future career advancement.

Featured in The Course Notes

This course is mentioned in our blog, The Course Notes. Read one article that features A Gentle Intro To Game Development Using C# and MonoGame:

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in A Gentle Intro To Game Development Using C# and MonoGame.
This cookbook provides practical solutions to common game development problems using MonoGame. It covers a wide range of topics, from basic rendering to advanced techniques like shaders and networking. It's a valuable resource for expanding your knowledge and skills in MonoGame development. is best used as additional reading to deepen your understanding of the course.
Provides a comprehensive guide to C# and .NET Core, covering the fundamentals and advanced topics. It's particularly useful for understanding the underlying framework used by MonoGame. While not specifically about game development, it provides a strong foundation in C# and .NET, which are essential for success in this course. It can be used as a reference text throughout the course.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser