public static WordSearch CreateNew(int width, int height, string[] words)
            {
                var ws = new WordSearch {
                    Width = width, Height = height, WordSearchLetters = new char[width, height]
                };
                var maxAttempts = ws.Width * ws.Height * 10;

                foreach (var word in words)
                {
                    var hiddenWord = new HiddenWord
                    {
                        Word = word.ToUpper()
                    };

                    int attempts = 0;
                    do
                    {
                        hiddenWord.Direction = (WordDirection)_random.Next(3);

                        switch (hiddenWord.Direction)
                        {
                        case WordDirection.HORIZONTAL:
                            hiddenWord.X = _random.Next(ws.Width - word.Length);
                            hiddenWord.Y = _random.Next(ws.Height);
                            break;

                        case WordDirection.VERTICAL:
                            hiddenWord.X = _random.Next(ws.Width);
                            hiddenWord.Y = _random.Next(ws.Height - word.Length);
                            break;

                        case WordDirection.DIAGONAL:
                            hiddenWord.X = _random.Next(ws.Width - word.Length);
                            hiddenWord.Y = _random.Next(ws.Height - word.Length);
                            break;
                        }
                        attempts++;
                    } while (!hiddenWord.FitsInWordSearch(ws) && attempts < maxAttempts);

                    if (attempts >= maxAttempts)
                    {
                        throw new Exception("SORRY! This ain't going to work.");
                    }
                    else
                    {
                        ws.AddWord(hiddenWord);
                    }
                }

                for (var y = 0; y < ws.WordSearchLetters.GetLength(1); y++)
                {
                    for (var x = 0; x < ws.WordSearchLetters.GetLength(0); x++)
                    {
                        if (ws.WordSearchLetters[x, y] == '\0')
                        {
                            ws.WordSearchLetters[x, y] = (char)('A' + _random.Next(0, 26));
                        }
                    }
                }

                return(ws);
            }