Полем называется член-переменная, содержащий некоторое значение. В ООП поля иногда называют данными объекта.
Для классов
public partial class Form1 : Form
public partial class Form2 : Form
полями являются следующие переменные:
private int
MR,//кол-во клеток по вертикали
MC,//кол-во клеток по горизонтали
NM,//кол-во мин
W,//ширина клетки поля
H;//высота клетки поля
nMin,//кол-во найденных мин
nFlag;//кол-во поставленных флагов
private int status;/*отражает различные этапы работы программы:
0-начало игры,
1-игра,
2-конец игры*/
private int[,] Pole;/*элемент массива задает клетку поля и принимает значения
0-8 -кол-во мин в соседних клетках,
9 -в клетке мина,
100-109 -клетка открыта,
200-209 -в клетку поставлен флаг*/
Следует отметить, что переменная Pole хранит в себе ссылку на двумерный массив. Массивы в C# разделяются на два типа: одномерные и многомерные.
Элементы многомерных массивов идентифицируются набором индексов - "координат" в многомерном пространстве. Каждое измерение имеет свою размерность, не зависящую от других.
Инициализация
Pole = new int[MR + 2, MC + 2];
происходит в методе
private void newGame(int r)
{
}
который будет рассмотрен далее.
Доступ к элементам производится с помощью оператора [ ], в котором индексы указываются через запятую. Присвоение значений элементам присваивается в методе:
…………
/*неотражаемым элементам массива минного поля присваиваем
значение -3 для завершения процесса открытия клеток*/
for (row = 0; row <= MR + 1; row++)
Pole[row, 0] = -3;
Pole[row, MC + 1] = -3;
for (col = 0; col <= MC + 1; col++)
Pole[0, col] = -3;
Pole[MR + 1, col] = -3;
//обнуление элементов массива минного поля
for (row = 1; row <= MR; row++)
for (col = 1; col <= MC; col++)
Pole[row, col] = 0;
………
а также в других методах.
Методы
Методом называется реальный код, воздействующий на данные объекта (или поля). При объявлении методов используется конструкция вида:
<модиф_дост><тип_возвр_знач><идент_метода>(<формальн_парам>opt)
<тело_метода>
Метод в процессе своей работы может не только изменять поля объекта, но и вычислять некоторые дополнительные значения. Если возвращать значения не нужно, то в качестве типа возвращаемого значения указывается void.
Методы, используемые в разработанном приложении и обеспечивающие процесс игры:
private void newGame(int r)//метод, запускающий новую игру
//выбор метода расстановки мин
int random = r;
if (random == 1)
this.Rand();//вызов метода Rand()
if (random == 2)
this.Lin();//вызов метода Lin()
if (random == 3)
this.BBS();//вызов метода BBS()
……………
//способы расстановки мин
private void Rand()//метод, основанный на использовании класса Random
int n = 0;//кол-во поставленных мин
int row, col;
Random rnd = new Random();//генеретор случайных чисел
//расстановка мин
do
row = rnd.Next(MR) + 1;
col = rnd.Next(MC) + 1;
if (Pole[row, col] != 9)
Pole[row, col] = 9;
n++;
while (n != NM);
private void Lin()//метод, основанный на использовании линейного
конгруэнтного метода
int n = 0;
double a = Convert.ToInt64(Math.Exp((double)5 * Math.Log(7))),
m = Convert.ToInt64(Math.Exp((double)31 * Math.Log(2))) - 1;
int x = 27011989, c = 19;
//для нахождения пвевдослучайного числа Х используется
формула x(k+1)=(a * x(k) + c) mod m
x = (int)((a * x + c) % m);
//находится пвевдослучайный индекс клетки на [0,MR]
row =Convert.ToInt32( Math.Ceiling((double) MR * x / (m-1)));
//находится пвевдослучайный индекс клетки на [0,MС]
col = Convert.ToInt32(Math.Ceiling((double)MC * x / (m-1)));
private void BBS()//метод, основанный на использовании алгоритма Блюма, Блюма
и Шуба
int x = 2701;
int p=2047,q=8191;
int M = p * q;
формула x(k+1)=(x(k)^2) mod m
x = Math.Abs((int)((x * x) % M));
row = Convert.ToInt32(Math.Ceiling((double)MR * x / (M-1)));
col = Convert.ToInt32(Math.Ceiling((double)MC * x / (M-1)));
private void showPole(Graphics g, int status)//метод,отрисовывающий поле
for (int row = 1; row <= MR; row++)
for (int col = 1; col <= MC; col++)
this.kletka(g, row, col, status);//вызов метода kletka()
private void kletka(Graphics g, int row, int col, int status)
//метод,выводящий содержимое клетки
// в клетке флаг
if (Pole[row, col] >= 200)
this.flag(g, x, y);
//отрисовываем границы клетки
g.DrawRectangle(Pens.Black, x - 1, y - 1, x + W, y + H);
// если игра завершена (status=2),показываем мины
if ((status == 2) && ((Pole[row, col] % 10) == 9))
this.mina(g, x, y);
private void open(int row, int col)//метод,открывающий текущую и все соседние
клетки, в которых нет мин
//рекурсивный процесс открытия всей пустых соседих клеток
if (Pole[row, col] == 0)
Pole[row, col] = 100;
//отобразить содержимое клетки
Страницы: 1, 2, 3, 4, 5