コード例 #1
0
 /// <summary>
 /// Delete's a slot's text out of all it's row/column/box's possibleEntries.
 /// </summary>
 /// <param name="senderControl"></param>
 static public void RemoveNeighbors(SudokuSlot senderControl, List <SudokuSlot> slotList, SolveHistory history, Queue <SudokuSlot> queueToClean)
 {
     foreach (SudokuSlot slot in slotList)
     {
         if (slot.row == senderControl.row & slot != senderControl)
         {
             if (slot.RemovePossibleEntry(senderControl.Text) == true)
             {
                 queueToClean.Enqueue(slot);
             }
         }
         else if (slot.column == senderControl.column & slot != senderControl)
         {
             if (slot.RemovePossibleEntry(senderControl.Text) == true)
             {
                 queueToClean.Enqueue(slot);
             }
         }
         else if (slot.box == senderControl.box & slot != senderControl)
         {
             if (slot.RemovePossibleEntry(senderControl.Text) == true)
             {
                 queueToClean.Enqueue(slot);
             }
         }
         history.AddSnapshot(slotList);
     }
     if (queueToClean.Count > 0)
     {
         RemoveNeighbors(queueToClean.Dequeue(), slotList, history, queueToClean);
     }
 }
コード例 #2
0
ファイル: Solver.cs プロジェクト: brianmego/Personal-Projects
        /// <summary>
        /// Delete's a slot's text out of all it's row/column/box's possibleEntries.
        /// </summary>
        /// <param name="senderControl"></param>
        public static void RemoveNeighbors(SudokuSlot senderControl, List<SudokuSlot> slotList, SolveHistory history, Queue<SudokuSlot> queueToClean)
        {
            foreach (SudokuSlot slot in slotList)
            {
                if (slot.row == senderControl.row & slot != senderControl)
                {
                    if (slot.RemovePossibleEntry(senderControl.Text) == true)
                        queueToClean.Enqueue(slot);
                }
                else if (slot.column == senderControl.column & slot != senderControl)
                {
                    if (slot.RemovePossibleEntry(senderControl.Text) == true)
                        queueToClean.Enqueue(slot);
                }
                else if (slot.box == senderControl.box & slot != senderControl)
                {
                    if (slot.RemovePossibleEntry(senderControl.Text) == true)
                        queueToClean.Enqueue(slot);
                }
                history.AddSnapshot(slotList);

            }
            if (queueToClean.Count > 0)
                RemoveNeighbors(queueToClean.Dequeue(), slotList, history, queueToClean);
        }
コード例 #3
0
        // Determines whether the keystroke is contained in slot's Possible Entries.
        private void IsValidEntry(object sender, KeyEventArgs e)
        {
            SudokuSlot senderControl = (SudokuSlot)sender;

            if (e.KeyCode != Keys.Back && e.KeyCode != Keys.Delete)
            {
                // If the key is in the slot's possible entries, process it
                try
                {
                    if (this.possibleEntries.Contains(keyValues[e.KeyValue]))
                    {
                        this.Text = keyValues[e.KeyValue].ToString();
                    }
                }
                catch { senderControl.Text = senderControl.Text; }
            }
        }
コード例 #4
0
        // Controls movement keys and calling individual slot's Validation method
        private void sudokuSlot_KeyDown(object sender, KeyEventArgs e)
        {
            SudokuSlot senderControl = (SudokuSlot)sender;

            //Navigation
            if (e.KeyCode == Keys.Down)
            {
                foreach (SudokuSlot slot in allSlots)
                {
                    if (senderControl.row == 9)
                    {
                        if (slot.TabIndex == senderControl.TabIndex - 72)
                        {
                            slot.Focus();
                            break;
                        }
                    }
                    else
                    if (slot.TabIndex == senderControl.TabIndex + 9)
                    {
                        slot.Focus();
                        break;
                    }
                }
            }
            else if (e.KeyCode == Keys.Up)
            {
                foreach (SudokuSlot slot in allSlots)
                {
                    if (senderControl.row == 1)
                    {
                        if (slot.TabIndex == senderControl.TabIndex + 72)
                        {
                            slot.Focus();
                            break;
                        }
                    }
                    else
                    if (slot.TabIndex == senderControl.TabIndex - 9)
                    {
                        slot.Focus();
                        break;
                    }
                }
            }
            else if (e.KeyCode == Keys.Right)
            {
                foreach (SudokuSlot slot in allSlots)
                {
                    if (senderControl.row == 9 & senderControl.column == 9)
                    {
                        if (slot.TabIndex == senderControl.TabIndex - 80)
                        {
                            slot.Focus();
                            break;
                        }
                    }
                    else
                    if (slot.TabIndex == senderControl.TabIndex + 1)
                    {
                        slot.Focus();
                        break;
                    }
                }
            }
            else if (e.KeyCode == Keys.Left)
            {
                foreach (SudokuSlot slot in allSlots)
                {
                    if (senderControl.row == 1 & senderControl.column == 1)
                    {
                        if (slot.TabIndex == senderControl.TabIndex + 80)
                        {
                            slot.Focus();
                            break;
                        }
                    }
                    else
                    if (slot.TabIndex == senderControl.TabIndex - 1)
                    {
                        slot.Focus();
                        break;
                    }
                }
            }

            // Send anything else to validation.
            else
            {
                string oldEntry = senderControl.Text;
                senderControl.SudokuSlot_KeyDown(sender, e);
            }
        }
コード例 #5
0
        // Call slot's specific KeyPress event
        private void sudokuSlot_KeyPress(object sender, KeyPressEventArgs e)
        {
            SudokuSlot senderControl = (SudokuSlot)sender;

            senderControl.SudokuSlot_KeyPress(sender, e);
        }