
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 2017
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 Scott!,
I added some extra quests, but when i put 2 on the same spot it only showed the new one (i added them only by creating it in world and adding it to the location)
Hello!
To do this, you’d need to start by change the Location QuestAvailableHere property’s datatype from “Quest” to “List” (and probably rename it to “QuestsAvailableHere”, to make it clear it can hold multiple quests).
Then, in the World PopulateLocation function, instead of saying “farmhouse.QuestAvailableHere = QuestByID(QUEST_ID_CLEAR_FARMERS_FIELD);”, you’d say “farmhouse.QuestsAvailableHere.Add(QuestByID(QUEST_ID_CLEAR_FARMERS_FIELD));”. You could add as many Quest objects to that list as you want.
Finally, in the movement code (when the player moves to a new location), you’d need to loop through the list of Quest objects to see if the player should receive the Quest, or if they can complete an existing quest.
Let me know if that wasn’t clear.
WOW! amazing tutorial, this helped me so much to learn more about programming with C#. I would LOVE you to expand on a few things with tutorials if you have the time though. I’m pretty sure it would be great tutorials for others to learn as extras for their games also.
1. A tutorial for an Advanced Bag system, something similar to how you did the World Map but instead for a bag holding all the items you have collected and amounts you have. So, push a button and another screen opens with all your bag items and amounts in. It would use icon pics for the item and not text for item name and then the amount maybe in one of the corners of the picture. The picture could be grayed out until you have collected it maybe?
2. Maybe add a picture box to the main SuperAdventure design view window that shows a single picture of the location you are currently in when you enter a new area.
3. Maybe in the text information window have options.. for example the text says.. “you have entered a house, there are two people here” then it gives option to say “talk to person 1 or talk to person 2”. The ‘person 1’ and ‘person 2’ could maybe be different colors and cickable for choosing option to talk to them. Or maybe that’s already available and you could give a tutorial on how to do that?
In any case, thanks again for these awesome tutorials, ive learned a lot to this point from these.
You’re welcome, Sylar.
I’m not doing much more with these lessons, but am doing a new version in WPF at https://scottlilly.com/build-a-cwpf-rpg/.
There is a bit more graphics in the WPF version, showing a picture of the location you’re at and the monster you’re fighting. Adding an inventory bag would be a cool feature to add. Adding conversations with NPCs would be another cool feature. I’ll put your suggestions on my notes for new lessons to add to the WPF course. There’s some more cleanup I want to do with the code in those lessons, once I finish a business project that’s been using up more of my time than I wish it was.