public string CreateTableRowForWord(PuzzleWord puzzleClue, int startingIndex)
        {
            StringBuilder builder = new StringBuilder();

            builder.AppendLine("<tr>");
            builder.AppendLine("\t<td>");

            string puzzleClueCustomizedClue = puzzleClue.CustomizedClue;

            if (String.IsNullOrWhiteSpace(puzzleClueCustomizedClue))
            {
                puzzleClueCustomizedClue = $"Clue for {(string) puzzleClue}";
            }
            builder.AppendLine($"\t{puzzleClueCustomizedClue}:");

            builder.AppendLine("\t</td>");
            builder.AppendLine();
            builder.AppendLine("\t<td>");
            builder.Append("\t");
            foreach (var unused in puzzleClue.Letters)
            {
                builder.AppendLine($@"<input type=""text"" size=""1"" maxlength=""1"" id=""letter{startingIndex}"" onFocus=""colorMeAndMyMatch({startingIndex},'yellow');"" onBlur=""colorMeAndMyMatch({startingIndex},'white');""");
                startingIndex++;
                builder.Append("\t/>");
            }
            builder.AppendLine();
            builder.AppendLine("\t</td>");
            builder.AppendLine("</tr>");

            return(builder.ToString());
        }
Esempio n. 2
0
        Result <PuzzleSolution> FindWord(PuzzleWord word, IList <PuzzleMatrix> matrix)
        {
            var characters = word.Word.ToCharArray();
            var character  = characters.FirstOrDefault();

            foreach (var cell in matrix)
            {
                if (cell.Character == character)
                {
                    var solutionMatrix = new List <PuzzleMatrix>();
                    solutionMatrix.Add(cell);

                    var solutionTrace = TraceWord(characters.Skip(1).ToArray(), cell, matrix, solutionMatrix);

                    if (solutionTrace.Count == characters.Length)
                    {
                        return(Result.Ok(new PuzzleSolution()
                        {
                            Word = word.Word, Breakdown = solutionTrace
                        }));
                    }
                }
            }

            return(Result.Fail <PuzzleSolution>("Word Not Found", ErrorType.EntityNotFound));
        }
        public Puzzle AddWord(int id, [FromBody] PuzzleWord word)
        {
            var rc = PuzzleRepository.AddWord(id, word.Word);

            PuzzleRepository.SaveChanges();
            return(rc);
        }
Esempio n. 4
0
            public void MultipleWords_HaveExpectedLetters()
            {
                InnerAnacrosticPuzzle puzzle = new InnerAnacrosticPuzzle();

                puzzle.AddWordToClues("as");
                puzzle.AddWordToClues("is");
                PuzzleWord   firstWord   = puzzle.Clues[0];
                PuzzleLetter firstLetter = firstWord.Letters[0];

                Assert.AreEqual('a', firstLetter.ActualLetter);
                Assert.AreEqual(1, firstLetter.NumericIndex);
                Assert.AreEqual('A', firstLetter.AlphabeticIndex);

                PuzzleLetter secondLetter = firstWord.Letters[1];

                Assert.AreEqual('s', secondLetter.ActualLetter);
                Assert.AreEqual(2, secondLetter.NumericIndex);
                Assert.AreEqual('A', secondLetter.AlphabeticIndex);

                PuzzleWord   secondWord = puzzle.Clues[1];
                PuzzleLetter firstLetterInSecondWord = secondWord.Letters[0];

                Assert.AreEqual('i', firstLetterInSecondWord.ActualLetter);
                Assert.AreEqual(3, firstLetterInSecondWord.NumericIndex);
                Assert.AreEqual('B', firstLetterInSecondWord.AlphabeticIndex);

                PuzzleLetter secondLetterInSecondWord = secondWord.Letters[1];

                Assert.AreEqual('s', secondLetterInSecondWord.ActualLetter);
                Assert.AreEqual(4, secondLetterInSecondWord.NumericIndex);
                Assert.AreEqual('B', secondLetterInSecondWord.AlphabeticIndex);
            }
Esempio n. 5
0
        public EditWindow(PuzzleWord theWord, int maxCol, int maxRow)
        {
            InitializeComponent();
            Word = theWord.Copy();
            WindowSetup();

            udColumn.Maximum = maxCol - 1;
            udRow.Maximum    = maxRow - 1;

            cboDirections.ItemsSource = Enum.GetValues(typeof(Direction));
        }
        private void Save()
        {
            if (tbxWord.Text.Length > 0)
            {
                int number = 1;
                int.TryParse(tbxNumber.Text, out number);
                Word = new PuzzleWord(tbxWord.Text, number, tbxClue.Text, cboDirections.SelectedValue.ToString(), (int)udColumn.Value, (int)udRow.Value);

                this.DialogResult = true;
                this.Close();
            }
        }
Esempio n. 7
0
        public PuzzleWord Generate(params object[] options)
        {
            var rc = new PuzzleWord
            {
                Id   = -1,
                Word = "word"
            };

            Puzzle.PuzzleWords.Add(rc);

            return(rc);
        }
Esempio n. 8
0
        public PuzzleWord Generate(params object[] options)
        {
            var idx = WordRepository.WordCount.Random();
            var rc  = new PuzzleWord
            {
                Id   = -1,
                Word = WordRepository.Get(idx)
            };

            Puzzle.PuzzleWords.Add(rc);

            return(rc);
        }
Esempio n. 9
0
    void NewPuzzle()
    {
        wordGrid.BuildGrid();
        panelGrid.BuildGrid();
        SelectWords();

        // Place horizontal words and select tiles for vertical word.
        Assert.AreEqual(topIntercept, bottomIntercept); // currently constrained to be at some intercepts
        int diff = topIntercept - bottomIntercept;
        List <LibrettoTile> tiles;

        if (diff >= 0)
        {
            PlaceWord(topWord, topWordRow, 0);
            PlaceWord(bottomWord, bottomWordRow, diff);
            tiles = wordGrid.GetColumnTiles(topIntercept, mysteryWord.Length);
        }
        else
        {
            PlaceWord(topWord, topWordRow, -diff);
            PlaceWord(bottomWord, bottomWordRow, 0);
            tiles = wordGrid.GetColumnTiles(bottomIntercept, mysteryWord.Length);
        }

        // Show gap tiles and build up letters for panel.
        puzzleWord  = new PuzzleWord(mysteryWord, tiles);
        buttonChars = new List <char>();
        for (int i = 0; i < mysteryWord.Length; i++)
        {
            LibrettoTile tile = tiles[i];
            if (tile.tileType == LibrettoTile.TILE_TYPE.EMPTY)
            {
                tile.ShowGap();
                buttonChars.Add(mysteryWord[i]);
            }
        }

        // Set up distractors.
        distractorChars = new List <char>();
        for (int i = 0; i < NUM_DISTRACTERS; i++)
        {
            char distractor = LibrettoTileBag.GetLetter();
            distractorChars.Add(distractor);
            buttonChars.Add(distractor);
        }
        Debug.Log("distractorChars: " + new string(distractorChars.ToArray()));
        buttonChars = Utils.Scramble <char>(buttonChars);
        Debug.Log("buttonChars: " + new string(buttonChars.ToArray()));
        panelGrid.ShowRowChars(buttonChars);
    }
Esempio n. 10
0
            public void SingleWord_HasExpectedLetters()
            {
                PuzzleWord   word        = new PuzzleWord("as", 1, 'A');
                PuzzleLetter firstLetter = word.Letters[0];

                Assert.AreEqual("A1", firstLetter.ToString(), "Unexpected result from ToString override.");
                Assert.AreEqual('a', firstLetter.ActualLetter);
                Assert.AreEqual(1, firstLetter.NumericIndex);
                Assert.AreEqual('A', firstLetter.AlphabeticIndex);

                PuzzleLetter secondLetter = word.Letters[1];

                Assert.AreEqual('s', secondLetter.ActualLetter);
                Assert.AreEqual(2, secondLetter.NumericIndex);
                Assert.AreEqual('A', secondLetter.AlphabeticIndex);
            }
Esempio n. 11
0
    void SelectMysteryWord()
    {
        var len = difficultyIndex >= wordLen.Length ? wordLen[wordLen.Length - 1] : wordLen [difficultyIndex];

        string word = CrossingDictionary.Instance.RandomUniqueWord(len);

        Debug.Log("MYSTERY: " + word);

        // Place "mystery word" (really not a mystery).
        mysteryWord = new PuzzleWord(word, wordGrid.GetRowTiles(word.Length, ROW_OF_MYSTERY_WORD));
        var chars = mysteryWord.word.ToCharArray();

        for (var n = 0; n < mysteryWord.wordTiles.Count; n++)
        {
            mysteryWord.wordTiles [n].SetTileData(chars [n]);
            mysteryWord.wordTiles [n].ShowFixed();
            mysteryWord.wordTiles [n].SetColor(Color.white, Color.black);
        }
    }
Esempio n. 12
0
    void SelectCrossWords()
    {
        var shuffledTiles = new List <CrossingTile> ();

        shuffledTiles.AddRange(mysteryWord.wordTiles);
        shuffledTiles = Utils.Scramble <CrossingTile> (shuffledTiles);

        var num = shuffledTiles.Count - 2;

        puzzle.Clear();

        var i = 0;

        while (puzzle.Count < num)
        {
            var tile     = shuffledTiles [i];
            var tileChar = tile.TypeChar;
            var tiles    = wordGrid.GetColumnTiles(3, tile.column);
            var pattern  = GetVerticalCrossPattern(tiles);
            var words    = CrossingDictionary.Instance.MatchesAPattern(pattern);
            if (words != null && words.Count != 0)
            {
                var word       = words [Random.Range(0, words.Count)];
                var puzzleWord = new PuzzleWord(word, tiles);
                puzzle.Add(puzzleWord);
            }
            i++;
            if (i == shuffledTiles.Count)
            {
                i = 0;
            }
        }

        var buttonChars = new List <char> ();

        foreach (var p in puzzle)
        {
            var chars = p.word.ToCharArray();
            var hints = Random.Range(0, 2);
            Debug.Log("CROSS: " + p.word);
            for (var n = 0; n < p.wordTiles.Count; n++)
            {
                if (!p.wordTiles [n].gameObject.activeSelf)
                {
                    if (hints > 0 && Random.Range(0, 10) > 4)
                    {
                        p.wordTiles [n].SetTileData(chars [n]);
                        p.wordTiles [n].ShowFixed();
                        hints--;
                    }
                    else
                    {
                        buttonChars.Add(chars [n]);
                        p.wordTiles [n].ShowGap();
                    }
                }
            }
        }



        buttonChars = Utils.Scramble <char> (buttonChars);
        panelGrid.ShowRowChars(buttonChars);
    }
 public async Task <IHttpActionResult> Update(PuzzleWord word)
 {
     return(Ok(await Puzzle.PuzzleWords.UpdateAsync(word, c => c.Id == word.Id)));
 }
 public async Task <IHttpActionResult> Add(PuzzleWord word)
 {
     return(Ok(await Puzzle.PuzzleWords.AddAsync(word)));
 }