-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCell.cs
104 lines (89 loc) · 2.65 KB
/
Cell.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace SudokuSolver
{
public class Cell
{
public string Id
{
get
{
return string.Format("{0}{1}", this.Row.Id, this.Column.Id);
}
}
public Cell(Region block, Region row, Region column, int value)
{
this.Block = block;
this.Column = column;
this.Row = row;
this.Value = value;
this.Options = new List<int>(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
}
public Cell(Region block, Region row, Region col)
: this(block, row, col, 0)
{
}
private int _value;
public int Value
{
get { return _value; }
set
{
Assert.That(_value == 0 || !this.IsLocked);
_value = value;
if (_value != 0)
this.Options.Clear();
OnValueChanged();
}
}
public bool HasValue
{
get { return _value != 0; }
}
//public Point Position
//{
// get
// {
// return new Point(this.Row.Id - 1, this.Column.Id - 1);
// }
//}
public event EventHandler ValueChanged;
private void OnValueChanged()
{
var handler = this.ValueChanged;
if (handler != null)
handler(this, EventArgs.Empty);
}
public Region Block { get; private set; }
public Region Column { get; private set; }
public Region Row { get; private set; }
public event EventHandler Locked;
private void OnLocked()
{
var handler = this.Locked;
if (handler != null)
handler(this, EventArgs.Empty);
}
private bool _isLocked;
public bool IsLocked
{
get { return _isLocked; }
set
{
_isLocked = value;
if (_isLocked)
OnLocked();
}
}
public List<int> Options { get; private set; }
public override string ToString()
{
if(this.HasValue)
return string.Format("{0}: {1}", this.Id, this.Value);
return string.Format("{0}: {1}", this.Id, string.Join(string.Empty, this.Options.Select(o => o.ToString()).ToArray()));
}
}
}