p align="left"><модиф_дост><тип_возвр_знач><идент_метода>(<формальн_парам>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; int row, col; 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; //расстановка мин do { //для нахождения пвевдослучайного числа Х используется формула 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))); x = (int)((a * x + c) % m); //находится пвевдослучайный индекс клетки на [0,MС] col = Convert.ToInt32(Math.Ceiling((double)MC * x / (m-1))); if (Pole[row, col] != 9) { Pole[row, col] = 9; n++; } } while (n != NM); } private void BBS()//метод, основанный на использовании алгоритма Блюма, Блюма и Шуба { int n = 0; int row, col; int x = 2701; int p=2047,q=8191; int M = p * q; //расстановка мин do { //для нахождения пвевдослучайного числа Х используется формула x(k+1)=(x(k)^2) mod m x = Math.Abs((int)((x * x) % M)); //находится пвевдослучайный индекс клетки на [0,MR] row = Convert.ToInt32(Math.Ceiling((double)MR * x / (M-1))); x = Math.Abs((int)((x * x) % M)); //находится пвевдослучайный индекс клетки на [0,MС] col = Convert.ToInt32(Math.Ceiling((double)MC * x / (M-1))); if (Pole[row, col] != 9) { Pole[row, col] = 9; n++; } } while (n != NM); } 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; //отобразить содержимое клетки this.Invalidate(new Rectangle(x, y, W, H)); //открыть примыкающие клетки слева, справа, сверху, снизу this.open(row, col - 1); this.open(row - 1, col); this.open(row, col + 1); this.open(row + 1, col); //примыкающие диагонально this.open(row - 1, col - 1); this.open(row - 1, col + 1); this.open(row + 1, col - 1); this.open(row + 1, col + 1); } ………… } а также два метода, основанных на работе с графикой: private void mina(Graphics g, int x, int y)//метод,рисующий мину { //корпус g.FillRectangle(Brushes.Green, x + 16, y + 26, 8, 4); g.FillRectangle(Brushes.Green, x + 8, y + 30, 24, 4); g.DrawPie(Pens.Black, x + 6, y + 28, 28, 16, 0, -180); g.FillPie(Brushes.Green, x + 6, y + 28, 28, 16, 0, -180); //полоса на корпусе g.DrawLine(Pens.Black, x + 12, y + 32, x + 28, y + 32); //вертикальный "ус" g.DrawLine(Pens.Black, x + 20, y + 22, x + 20, y + 26); //боковые "усы" g.DrawLine(Pens.Black, x + 8, y + 30, x + 6, y + 28); g.DrawLine(Pens.Black, x + 32, y + 30, x + 34, y + 28); } private void flag(Graphics g, int x, int y)//метод,рисующий флаг { Point[] p = new Point[3]; Point[] m = new Point[5]; //флажок p[0].X = x + 4; p[0].Y = y + 4; p[1].X = x + 30; p[1].Y = y + 12; p[2].X = x + 4; p[2].Y = y + 20; g.FillPolygon(Brushes.Red, p); //древко g.DrawLine(Pens.Black, x + 4, y + 4, x + 4, y + 35); //буква М на флажке m[0].X = x + 8; m[0].Y = y + 14; m[1].X = x + 8; m[1].Y = y + 8; m[2].X = x + 10; m[2].Y = y + 10; m[3].X = x + 12; m[3].Y = y + 8; m[4].X = x + 12; m[4].Y = y + 14; g.DrawLines(Pens.White, m); } События Событие вызывает исполнение некоторого фрагмента кода. События -- неотъемлемая часть программирования для Microsoft Windows. Например, события возникают при движении мыши, щелчке или изменении размеров окна. Важнейшую роль играет обработчики событий-- методы, исполняемые при генерации событий: private void Сапер_MouseDown(object sender, MouseEventArgs e)//нажатие кнопки мыши на игровом поле { } private void новаяИграToolStripMenuItem1_Click(object sender, EventArgs e) //щелчок на пункте меню Новая игра { this.newGame(1); this.Invalidate(); } //обработчики щелчков на пунктах меню, в которых указывается размер поля и кол-во мин private void минToolStripMenuItem_Click(object sender, EventArgs e) { } private void минToolStripMenuItem1_Click(object sender, EventArgs e) { } private void минToolStripMenuItem2_Click(object sender, EventArgs e) { } private void минToolStripMenuItem3_Click(object sender, EventArgs e) { } private void минToolStripMenuItem4_Click(object sender, EventArgs e) { } private void минToolStripMenuItem5_Click(object sender, EventArgs e) { } private void особыеToolStripMenuItem_Click(object sender, EventArgs e) //щелчок на пункте меню Особые { Настройки settings = new Настройки();//создание экземпляра формы Настройки settings.ShowDialog();//появление формы Настройки //присваиваем значения полям на основе введенных пользователем на форме Настройки MR = settings.MR; MC = settings.MC; NM = settings.NM; W = 30; H = 30; this.newGame(1); this.Invalidate(); } //обработчики щелчков на пунктах меню, в которых указывается способ расстановки мин private void randomToolStripMenuItem_Click(object sender, EventArgs e) { } private void инейныйКонгруэнтныйМеоToolStripMenuItem_Click(object sender, EventArgs e) { } private void алгоритмToolStripMenuItem_Click(object sender, EventArgs e) { } private void выходToolStripMenuItem_Click(object sender, EventArgs e) //щелчок на пункте меню Выход { this.Close(); } private void справкаToolStripMenuItem_Click(object sender, EventArgs e) //щелчок на пункте меню Справка
Страницы: 1, 2, 3, 4, 5
|