Click here to Skip to main content
15,881,898 members
Articles / Programming Languages / C#
Tip/Trick

C#: Random Number Guessing Game

Rate me:
Please Sign up or sign in to vote.
4.79/5 (8 votes)
18 Jun 2014CPOL 44.9K   541   9   13
A simple C# program to implement a "Random Number Guessing Game"

Introduction

This article will give you some tips to write a simple "Random Number Guessing Game" using C#. The program generates a 4 digit random number. For each digit, the number is chosen from 1 to 5 and the number can repeat. You have 5 attempts to guess the random number.

For example, if the random number generated is 5241 and Your Guess is 2143 in the first attempt then the program will display a message "Digit(s) in place 3 correct" indicating that the number entered at position 3 is correct.

Code

C#
using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public class Result
    {
        public int Index { get; set; }
        public bool Flag { get; set; }
    }

    static void Main()
    {
        Program game = new Program();
        game.Run();
    }

    void Run()
    {
        // initialize the number of attempts
        int numberOfAttempts = 5;

        Console.WriteLine("\nWelcome to Random Number Guessing Game.");
        Console.WriteLine("\n\nGuess the 4 digit random number XXXX.");
        Console.WriteLine("\nFor each digit, the number is chosen from 1 to 5  \nNumbers can repeat.");
        Console.WriteLine(string.Format("\nYou have {0} attempts to win the game.", numberOfAttempts));

        // Call the method to Generate the Random Number
        string randomNumber = GenerateRandomNumber();

        for (int i = 1; i <= numberOfAttempts; i++)
        {
            // Call the method to get the user input
            string userInput = GetUserInput(i);

            // Get the result - Collection containing the result of all 4 digits
            List<Result> result = GetResult(randomNumber, userInput);

            // Guess the count of number of digits that are correct
            int flagCount = result.Where(f => f.Flag == true).Count();

            // Get the place(s)/index of digits that are correct
            string digitsCorrect = string.Join(",", result.Where(f => f.Flag == true)
                .Select(c => (++c.Index).ToString()));

            // check the flag count and display appropriate message
            if (flagCount == 4)
            {
                Console.WriteLine("Random Number:{0} , Your Input:{1}", randomNumber, userInput);
                Console.WriteLine("You guess is correct! Game Won..hurray...:)");
                break;
            }
            else if (i == numberOfAttempts)
            {
                Console.WriteLine("sorry, You missed it! Game Lost..:(");
                Console.WriteLine("Random Number is {0}", randomNumber);
            }
            else
            {
                digitsCorrect = flagCount == 0 ? "none" : digitsCorrect;
                Console.WriteLine(string.Format("Digit(s) in place {0} correct", digitsCorrect));
            }
        }

        Console.ReadLine();
    }

    public List<Result> GetResult(string randomNumber, string userInput)
    {
        char[] splitRandomNumber = randomNumber.ToCharArray();
        char[] splitUserInput = userInput.ToCharArray();

        List<Result> results = new List<Result>();

        for (int index = 0; index < randomNumber.Length; index++)
        {
            Result result = new Result();
            result.Index = index;
            result.Flag = splitRandomNumber[index] == splitUserInput[index];
            results.Add(result);
        }

        return results;
    }

    public string GetUserInput(int attempt)
    {
        int inputNumber;

        Console.WriteLine(string.Format("\nGuess the number. Attempt:{0}", attempt));
        Console.WriteLine("Input a 4 digit number");

        if (int.TryParse(Console.ReadLine(), out inputNumber)
            && inputNumber.ToString().Length == 4)
        {
            return inputNumber.ToString();
        }
        else
        {
            Console.WriteLine("You have entered a invalid input.");
            return "0000";
        }
    }

    public string GenerateRandomNumber()
    {
        Random random = new Random();
        string number = string.Empty;
        int length = 4;

        for (int i = 0; i < length; i++)
        {
            number += random.Next(1, 6);
        }

        return number;
    }
}

Output

Image 1

Happy Coding!!!!

 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Ireland Ireland
Many years of experience in software design, development and architecture. Skilled in Microsoft .Net technology, Cloud computing, Solution Design, Software Architecture, Enterprise integration, Service Oriented and Microservices based Application Development. Currently, focusing on .Net Core, Web API, Microservices, Azure

Comments and Discussions

 
GeneralMy vote of 4 Pin
Member 1076371721-Jun-14 22:09
Member 1076371721-Jun-14 22:09 
GeneralMy vote of 5 Pin
Volynsky Alex21-Jun-14 0:18
professionalVolynsky Alex21-Jun-14 0:18 
GeneralRe: My vote of 5 Pin
John-ph21-Jun-14 0:31
John-ph21-Jun-14 0:31 
GeneralRe: My vote of 5 Pin
Volynsky Alex21-Jun-14 0:33
professionalVolynsky Alex21-Jun-14 0:33 
GeneralI did things like this in the first year of studying programming Pin
csakii20-Jun-14 11:21
csakii20-Jun-14 11:21 
GeneralRe: I did things like this in the first year of studying programming Pin
John-ph21-Jun-14 0:23
John-ph21-Jun-14 0:23 
QuestionLiked a lot...so posting a bit more improved version using StringBuilder, no LINQ etc Pin
AnandChavali19-Jun-14 0:49
AnandChavali19-Jun-14 0:49 
GeneralRe: Liked a lot...so posting a bit more improved version using StringBuilder, no LINQ etc Pin
John-ph19-Jun-14 1:27
John-ph19-Jun-14 1:27 
GeneralRe: Random Number Guessing Game Pin
CodeFrux Technologies18-Jun-14 22:00
CodeFrux Technologies18-Jun-14 22:00 
GeneralRe: Random Number Guessing Game Pin
John-ph19-Jun-14 1:27
John-ph19-Jun-14 1:27 
BugCode Correction Pin
Yugandhar Lakkaraju18-Jun-14 8:28
Yugandhar Lakkaraju18-Jun-14 8:28 
GeneralRe: Code Correction Pin
Dewey18-Jun-14 18:05
Dewey18-Jun-14 18:05 
GeneralRe: Code Correction Pin
John-ph19-Jun-14 1:27
John-ph19-Jun-14 1:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.