
If you want to write a Role Playing Game, but don’t know how to program, or just want to learn how to program in C#, then you’re at right the place.
These lessons will take you from a complete beginner, to being an author of a Role Playing Game, for free.
This isn’t the world’s greatest game. In fact, it’s very short and kind of ugly.
However, as you create it, you’ll learn the most common C# programming practices and techniques. Then, if you want, you can improve the game, adding more features and your own special touch to it.
NOTE: If you already know the basics of C# programming (classes, properties, functions, “if” statements, etc.), you might want to look at the newer “Build a C#/WPF RPG” lessons. The code in those lessons is more like how I would write a “real” professional program – using better design and architecture.
One of the awesome students here created a PDF document of the lessons. You can get a copy of it here. You can also download the source code files for the lessons here. Thank you, Mark!
SECTIONS
Lesson 00.1 – What is in these lessons?
Lesson 00.2 – General information about programming in C#
Lesson 00.3 – The parts of Visual Studio
Lesson 01.1 – Defining classes and objects for the game
Lesson 02.1 – Installing Visual Studio Community Edition
Lesson 02.2 – Building the solution for the game
Lesson 03.1 – Building the first screen
Lesson 04.1 – Creating the Player class and its properties
Lesson 05.1 – Creating objects from classes
Lesson 06.1 – Creating the remaining classes
Lesson 07.1 – Inheritance and base classes
Lesson 08.1 – Setting properties with a class constructor
Lesson 08.2 – Using class constructors with derived classes
Lesson 09.1 – Using your classes as datatypes
Lesson 10.1 – Creating collections of objects
Lesson 11.1 – Using a static class
Lesson 12.1 – Add the remaining UI controls
Lesson 13.1 – Functions, procedures, and methods
Lesson 13.2 – Creating functions to handle user input
Lesson 15.1 – Getting random numbers for the game
Lesson 16.1 – Writing the function to move the player
Lesson 16.2 – Refactoring the player movement function
Lesson 16.3 – Functions to use weapons and potions
Lesson 17.1 – Running the game on another computer
Lesson 18.1 – Future enhancements for the game
Bonus lessons (enhancements to the game)
Lesson 19.1 – Scroll to the bottom of a rich text box
Lesson 19.2 – Use a calculated value for a property
Lesson 19.3 – Clean up the source code by converting foreach to LINQ
Lesson 19.4 – Saving and loading the player information
Lesson 19.5 – Changing dropdown default values
Lesson 19.6 – Increase maximum hit points when the player gains a level
Improving SuperAdventure’s code quality by refactoring
Lesson 20.1 – Refactoring the SuperAdventure program
Lesson 20.2 – Binding a custom object’s properties to UI controls
Lesson 20.3 – Binding list properties to datagridviews
Lesson 20.4 – Binding child list properties to a combobox
Lesson 20.5 – Moving the game logic functions from the UI project to the Engine project
Adding a vendor to locations (with buying and selling items)
Lesson 21.0 – Plans for adding a vendor to locations
Lesson 21.1 – Adding a price to game items
Lesson 21.2 – Create the vendor class and add it to locations
Lesson 21.3 – Add a button and create its eventhandler in code, without the UI design screen
Lesson 21.4 – Completing the trading screen
Use SQL to save and restore player’s game data
Lesson 22.1 – Installing MS SQL Server on your computer
Lesson 22.2 – Creating database tables from classes
Lesson 22.3 – Creating the SQL to save and load the saved game data
Creating a console UI for SuperAdventure
Lesson 23.1 – Creating a console front-end for the game
Final refactoring (cleanup) of the SuperAdventure source code
Lesson 24.1 – Make the SuperAdventure source code easier to understand and modify
New game features
Lesson 25.1 – Select a random monster at a location
Lesson 26.1 Displaying a World Map
Lesson 26.2 – Hiding Unvisited Locations on the World Map
Bug Fixes
Lesson 99.1 – Preventing duplicate quests
Lesson 99.2 – Setting CurrentWeapon when the player has multiple weapons
Hey,
I just got to chapter 18 and started doing some “free-coding”. I’m trying to add images when a weapon/healing changes or when a monster appears but I can’t get it to work. Am I just not good enough or is this something that can’t be done?
Love this tutorial btw
Hi Rens,
Can you upload your solution (including the directories under it, and all the files in those directories) to GitHub, Dropbox, or some other file-sharing location so I can look at it?
Can you also tell me more about the change you’re trying to make? What images are you trying to change (monsters, locations, new types of images)? Do you get an error message, or are the images not displaying?
I might not be able to look at the code until Monday. I’m working on some changes for a client this weekend.
Hi Scott
I would like a picture of that monster to appear when that monster appears (a rat appears a picture of a rat appears, …). Same for the locations, healing items and weapons (maybe Items too but I’m not sure what use that would be).
Yesterday when I sent my previous message, I had uploaded the weapons pictures to Properties.Resources in Engine. I didn’t get any errors then, but the picture didn’t appear. I thought ‘That’s a Future me problem’, deleted the code and continued with your guide.
Now that I’ve seen your reply, I’ve put that code back but I get an error (I’ve put this in comment and it’s in UpdateWeaponListInUI())
Thank you for your reply and no problem if you can’t look directly at my code. (I’m already happy that you want to help tbh)
LINK REMOVED FOR PRIVACY
Hi Rens,
I made some changes and have them at: https://gist.github.com/ScottLilly/6d85bc4ad81595bca520dc60da0dbc25
The World.cs and HealingPotion.cs changes are only to add the potion’s image.
In Form1.cs, the basic changes were to make sure the weapon and healing potion images were dropped when the player’s selected weapon selected healing potion are changed.
Line 281: Populates the player’s CurrentWeapon property.
Line 286: Sets the picture box’s Image property to the player’s CurrentWeapon’s Picture. The “?” prevents an error if the player’s CurrentWeapon is null.
Line 307: Clears the healing potion’s picture if there are no healing potions in the player’s inventory.
Line 316: Populates the healing potion’s picture if there is a healing potion in the player’s inventory.
Line 495: Populates the weapon’s image when the player selects a different weapon from the weapons combobox.
Please let me know if there are any problems with those changes, or if you have any questions about them.
Hey scott
Sorry for the late reply, some school work got in the way.
I’ve included your code in my solution, but since I’ve already continued working on the tutorial, the logic code is now separated from the UI, so the img code doesn’t work 100% anymore. I’d be very happy if you could take another look. I accidentally broke my Git so here’s the new link: https://github.com/gwnrens/RPG_Try
thanks in advance
Rens
Hi Rens,
I have an update at: https://gist.github.com/ScottLilly/fd52a3ae64fe8962ac2d641b7d98e97c
Check lines 74-105 and the new event handling function for cboPotions.SelectedIndexChanged on lines 228-231.
The basic idea is that the eventhandlers for the combobox SelectedIndexChanged events are set up before populating the comboboxes’ DataSource properties. When you set the DataSource, if there are any items, then the first one is “selected” by default. If the event handlers are not setup before setting the DataSource, then the SelectedIndexChanged is not detected when the default (first) option is selected.
Hello, how can I add sound effects to the game. I want the game to play various sound effects when performing different actions. Thanks for the tutorial. It helped me a lot to learn C#. Sorry, my English is not very good, there may be places that are not clear.
Hello,
You can play sound by adding “using System.Media;” at the top of your class and loading the .wav (sound) file into a SoundPlayer object.
There is information on how to do this at: https://docs.microsoft.com/en-us/dotnet/desktop/winforms/controls/how-to-play-a-sound-from-a-windows-form?view=netframeworkdesktop-4.8