DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» is a community of 963,274 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Rafael Ahrons
Rafael Ahrons

Posted on • Originally published at luturol.github.io on

C# - Jokenpo Challenge

You can check the repository right here.

Jokenpo Challenge

I like to solve problems and challenges, they make me feel excited about coding because I have to be on my best game and try to solve the problem is exciting . It gives that feel of accomplishment and victory when you finished.

The challenge consist of making a Jokenpo game logic, by all means, you must implement the rules of the game. Rock wins against Scissor and lose against Paper, Paper wins against Rock and lose against Scissor, Scissor wins against Paper and lose against Rock. How can we implement that in C#?

For this I thought that I must have some way of validation. The validation I wanted was to make it more β€œgeneric” and easy to create. Each validation only works for that one had form. To do it, I made an Enum for Hand forms:

public enum HandForm
{
    Rock,
    Paper,
    Scissor
}

Now the problem is: How to validate the Enum? How the Enum will have it’s own Rule?

The way I thought of solving was: create an extension for this enum that will return the Rule Class.

public static class HandFormExtensions
{
    public static AbstractRules ToRule(this HandForm handForm)
    {
        if (handForm == HandForm.Rock)
            return new RockRules();
        else if (handForm == HandForm.Paper)
            return new PaperRules();
        else if (handForm == HandForm.Scissor)
            return new ScissorRules();
        else
            throw new ArgumentException("There is no hand form rule for this option");
    }
}   

Rule class will implement the AbstractRule class that will contain an abstract method that returns the result of that play, this means that the Rule class will have the checks for that hand form against the opponent hand form.

public abstract class AbstractRules
{
    public abstract GameResult WinAgainst(HandForm opponent);
}

Now the Judge of the Jokenpo will have only one line of code:

public GameResult ValidateGame(Player player1, Player player2)
{
    return player1.HandForm.ToRule().WinAgainst(player2.HandForm);             
}

So, whenever someone call the Judge class to validate the game, it will only return the result of the game based on the first Player passed as Parameter.

That’s it folks. Don’t forget to eat clean and drink water.

Peace.

Top comments (0)

Thank you.

Thanks for visiting DEV, we’ve worked really hard to cultivate this great community and would love to have you join us. If you’d like to create an account, you can sign up here.