public static void Main()
private ToolHelper toolHelper;
var userInput = this.promptUser();
toolHelper = new ToolHelper();
Tool userTool = toolHelper.determineTool(userInput);
Tool computerTool = toolHelper.generateRandomTool();
this.printGameResults(userTool, computerTool);
protected void printGameResults(Tool userTool, Tool computerTool) {
if (toolHelper.isTie(userTool.name, computerTool.name)) {
Console.WriteLine(String.Format("User selected {0} and Computer selected {1}. Result is a tie.", userTool.name, computerTool.name));
else if (userTool.isWinner(computerTool.name)) {
Console.WriteLine(String.Format("{0} You Win!", userTool.performAction(computerTool.name)));
Console.WriteLine(String.Format("{0} You Lose.", computerTool.performAction(userTool.name)));
protected int promptUser() {
string paper = "2. Paper";
string scissors = "3. Scissors";
string exit = "4. Exit Game";
string prompt = String.Format("Pick your weapon {0}{1}{0}{2}{0}{3}{0}{4}{0}",Environment.NewLine, rock, paper, scissors, exit);
string input = Console.ReadLine();
int.TryParse(input, out result);
public abstract class Tool {
public string name {get; set;}
public string action {get; set;}
public string performAction(string opposingTool) {
return String.Format("{0} {1} {2}.", name, action, opposingTool);
public abstract bool isWinner(string name);
public class Rock : Tool {
public override bool isWinner(string name) {
public class Scissors : Tool {
public override bool isWinner(string name) {
public class Paper : Tool {
public override bool isWinner(string name) {
public class ToolHelper {
public Tool determineTool(int input) {
public Tool generateRandomTool() {
Random random = new Random();
int randomNumber = random.Next(1, 4);
return this.determineTool(randomNumber);
public bool isTie(string user, string computer) {