Click here to Skip to main content
Click here to Skip to main content

C#: Random Number Guessing Game

, 18 Jun 2014 CPOL
Rate this:
Please Sign up or sign in to vote.
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

    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

Happy Coding!!!!

 

License

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

Share

About the Author

John-ph
Technical Lead
India India


Comments and Discussions

 
GeneralMy vote of 4 PinmemberKaushal Jain21-Jun-14 23:09 
GeneralMy vote of 5 PinprofessionalVolynsky Alex21-Jun-14 1:18 
GeneralRe: My vote of 5 PinmemberJohn-ph21-Jun-14 1:31 
GeneralRe: My vote of 5 PinprofessionalVolynsky Alex21-Jun-14 1:33 
GeneralI did things like this in the first year of studying programming Pinprofessionalcsakii20-Jun-14 12:21 
GeneralRe: I did things like this in the first year of studying programming PinmemberJohn-ph21-Jun-14 1:23 
QuestionLiked a lot...so posting a bit more improved version using StringBuilder, no LINQ etc PinmemberAnandChavali19-Jun-14 1:49 
GeneralRe: Liked a lot...so posting a bit more improved version using StringBuilder, no LINQ etc [modified] PinmemberJohn-ph19-Jun-14 2:27 
GeneralRe: Random Number Guessing Game PingroupCodeFrux Technologies18-Jun-14 23:00 
GeneralRe: Random Number Guessing Game PinmemberJohn-ph19-Jun-14 2:27 
BugCode Correction PinmemberYugandhar Lakkaraju18-Jun-14 9:28 
GeneralRe: Code Correction PinmemberDewey18-Jun-14 19:05 
GeneralRe: Code Correction PinmemberJohn-ph19-Jun-14 2:27 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150129.1 | Last Updated 18 Jun 2014
Article Copyright 2014 by John-ph
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid