Introduction

This is the solution document for the challenge called ChallengeHeroMonsterClasses Part 1. The purpose of this challenge is to test your knowledge on creating classes and creating properties and methods for those classes. As always, look through only as much of this solution as you need in order to solve the issue you’re having.

Step 1: Creating the Character Class and Properties

To begin, create a new ASP.NET Web Application called ‘ChallengeHeroMonsterClassesPart1’ and add a Default.aspx page as we’ve done many times in this series. Once added, navigate to Default.aspx.cs and add a new Character class underneath the Default class’ definition:

cs-asp-036-challengeheromonsterclassespart1-001

The challenge specifies that this class should have a series of properties within its definition: Name, Health, DamageMaximum and AttackBonus. While no data types were specifically given, we’ll initialize these properties with the following:

  1. String Name
  2. Int Health
  3. Int DamageMaximum
  4. Bool AttackBonus

In order to add these properties to the class, we can make use of IntelliSense to generate property stubs. Inside the opening and closing brackets for the Character class, type the word ‘prop’ and press the Tab key twice to have the following stub generated for you:

cs-asp-036-challengeheromonsterclassespart1-002

This sets up the format correctly for initializing a class property. Repeat this process three times to have four total stubs generated for you:

cs-asp-036-challengeheromonsterclassespart1-003

Next, replace the data types and names with those previously specified to add the properties to our Character class:

cs-asp-036-challengeheromonsterclassespart1-004

Step 2: Creating the Character’s Methods

The next requirement of this challenge is to create two methods: Attack() and Defend(). Attack() will return an integer value representing the damage inflicted. This amount will be randomly determined. This means that we’ll be using the Random class to generate a random integer value representing the damage.

Beneath the properties of the Character class, but still within the class definition, create the Attack() method with an integer return value. Inside the code block of that method, create an instance of the Random class:

cs-asp-036-challengeheromonsterclassespart1-005

Next, create an integer called damage, which will represent the amount of damage this attack will deal. Set this damage variable equal to a random value, making use of that random instance. Call the random.Next() method, passing in 0 for the lower bound and DamageMaximum for the upper bound:

cs-asp-036-challengeheromonsterclassespart1-006

Then, simply return that damage value to complete this Attack() method:

cs-asp-036-challengeheromonsterclassespart1-007

Now that the attack has been calculated, we need to create another method for defending. Still within the Character class’ code block, create a new Defend() method that takes in an integer damage amount:

cs-asp-036-challengeheromonsterclassespart1-008

This method will simply take the health of the calling Character and subtract the damage dealt from their health. To do this, use the ‘this’ keyword to access the Health property of the Character (hero or monster) who called the method, and subtract the damage amount from their health:

cs-asp-036-challengeheromonsterclassespart1-009

Step 3: Creating new Characters

According to the requirements of this challenge, we need to create two characters inside the Page_Load: A hero and a monster. We’ll begin with the hero:

cs-asp-036-challengeheromonsterclassespart1-010

Next, let’s initialize the hero’s Name, Health, DamageMaximum and AttackBonus properties to the following values:

cs-asp-036-challengeheromonsterclassespart1-011

In the same format, create a new Character called monster and initialize its properties to the following values:

cs-asp-036-challengeheromonsterclassespart1-012

Step 4: Performing the Battle

The next requirement set out for us is to perform the battle, with both opponents taking turns attacking and defending. The hero will go first. To set this up, create a new integer called damage within the Page_Load. Initialize its value to the hero’s Attack() method:

cs-asp-036-challengeheromonsterclassespart1-013

Directly underneath this code, call the monster’s Defend() method, passing in that same damage integer:

cs-asp-036-challengeheromonsterclassespart1-014

Follow the same pattern to reassign the damage integer to the returned result of the monster’s Attack() method, then call the hero’s Defend() beneath it:

cs-asp-036-challengeheromonsterclassespart1-015

Tip:

While this method of reusing the damage variable might not be effective in other cases, such as in the case of multiple rounds of attacking and defending, it works for this example. Ideally, you may want instead to create separate heroDamage and monsterDamage variables, but that is optional in this case.

Step 5: Displaying the Battle’s Results

The final requirement of this challenge is to create a Label Server Control on the Default page and display the results of the battle to it using a helper method. Let’s begin by adding the Label. Navigate to the Default.aspx page and drag and drop a Label onto the form. Clear out its Text property and name it resultLabel, following the naming convention used in this course:

cs-asp-036-challengeheromonsterclassespart1-016

Return to the Default.aspx.cs page and create a new method within the Default class called printStats() that takes in a Character as an input parameter:

cs-asp-036-challengeheromonsterclassespart1-017

Inside this method, we’ll simply add to the resultLabel’s text (not replace, because this method will be called twice). Use a formatted string displaying the character’s Name, Health, DamageMaximum, and AttackBonus properties:

cs-asp-036-challengeheromonsterclassespart1-018

Next, return to the bottom of the Page_Load event and call printStats() twice; once for the hero and once for the monster:

Finally, save and run your project to see the result:

cs-asp-036-challengeheromonsterclassespart1-019

Conclusion

This concludes the solution to the first part of this Hero/Monster Classes challenge. Most of the details should be familiar; creating methods, calling them, etc. However, the concept of creating classes, giving properties, and class-specific methods can be tricky at first. If you did have trouble with this challenge, try it again later. Change the challenge up to make your own so that you can continue to cement these concepts in your mind. Continue to struggle with it until you can successfully complete it on your own. Struggling forces you to really learn the content, not just emulate it.

Congratulations on completing this challenge. The next part, which builds on this, awaits you. Good luck!


Lessons in this Course