на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Генерирование псевдослучайных чисел на примере создания игры "Сапер"
{

for (int row = 1; row <= MR; row++)

{

for (int col = 1; col <= MC; col++)

{

this.kletka(g, row, col, status);//вызов метода kletka(Graphics g, int row, int col, int status)

}

}

}

private void kletka(Graphics g, int row, int col, int status)//метод,выводящий содержимое клетки

{

//координаты области вывода

int x = (col - 1) * W + 1, y = (row - 1) * H + 1 + 25;

//неоткрытые клетки - серые

if (Pole[row, col] < 100)

{

g.FillRectangle(SystemBrushes.ControlLight, x - 1, y - 1, x + W, y + H);

}

//открытые или помеченные клетки

if (Pole[row, col] >= 100)

{

//открываем клетку, открытые-белые

if (Pole[row, col] != 109)

g.FillRectangle(Brushes.White, x - 1, y - 1, x + W, y + H);

//подрыв на мине, клетка красная

else

g.FillRectangle(Brushes.Red, x - 1, y - 1, x + W, y + H);

//если рядом с клеткой есть мины, подписываем их кол-во

if ((Pole[row, col] >= 101) && (Pole[row, col] <= 108))

g.DrawString((Pole[row, col] - 100).ToString(), new Font("Tahoma", 20, FontStyle.Bold), Brushes.Blue, x + 3, y + 2);

}

// в клетке флаг

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)//метод,открывающий текущую и все соседние клетки, в которых нет мин

{

//координаты области вывода

int x = (col - 1) * W + 1, y = (row - 1) * H + 1 + 25;

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);

}

else

if ((Pole[row, col] < 100) && (Pole[row, col] != -3))

{

Pole[row, col] += 100;

//отобразить содержимое клетки

this.Invalidate(new Rectangle(x, y, W, H));

}

}

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);

}

public Form1()//конструктор главной формы

{

InitializeComponent();

//присваиваем начальные значения полям

MR = 10;

MC = 10;

NM = 10;

W = 40;

H = 40;

this.newGame(1);//вызов метода newGame(int r)

}

private void Form1_Paint(object sender, PaintEventArgs e)//обработчик события Paint

{

this.showPole(e.Graphics, status);//вызов метода showPole(Graphics g, int status)

}

private void справкаToolStripMenuItem_Click(object sender, EventArgs e)//щелчок на пункте меню Справка

{

Help.ShowHelp(this, this.helpProvider1.HelpNamespace);//вызов файла справки

}

private void Сапер_MouseDown(object sender, MouseEventArgs e)//нажатие кнопки мыши на игровом поле

{

//если игра завершена, ничего не происходит

if (status == 2)

return;

//первый щелчок

if (status == 0)

status = 1;

//преобразуем координаты мыши в индексы клетки, в которой был сделан щелчок

int row = (int)((e.Y - 25)/ H) + 1, col = (int)(e.X / W) + 1;

//координаты области вывода

int x = (col - 1) * W + 1, y = (row - 1) * H + 1 + 25;

//щелчок левой кнопки мыши

if (e.Button == MouseButtons.Left)

{

//открыта клетка, в которой есть мина

if (Pole[row, col] == 9)

{

Pole[row, col] += 100;

status = 2;//игра закончена

this.Invalidate();//перерисовать форму

}

else

{

if (Pole[row, col] < 9)

this.open(row, col);

}

}

//щелчок правой кнопки мыши

if (e.Button == MouseButtons.Right)

{

//в клетке не было флага, ставим его

if (Pole[row, col] <= 9)

{

nFlag += 1;

if (Pole[row, col] == 9)

nMin += 1;

Pole[row, col] += 200;

//все флаги расставлены

if ((nMin == NM) && (nFlag == NM))

{

status = 2;//игра закончена

this.Invalidate();//перерисовать форму

}

else

this.Invalidate(new Rectangle(x, y, W, H));//перерисовать клетку

}

else

{

//в клетке был флаг, убираем его

if (Pole[row, col] >= 200)

{

nFlag -= 1;

Pole[row, col] -= 200;

this.Invalidate(new Rectangle(x, y, W, H));//перерисовать клетку

}

}

}

}

//обработчики щелчков на пунктах меню, в которых указывается размер поля и кол-во мин

private void минToolStripMenuItem_Click(object sender, EventArgs e)

{

MR = 10;

MC = 10;

NM = 10;

W = 40;

H = 40;

this.newGame(1);

this.Invalidate();

}

private void минToolStripMenuItem1_Click(object sender, EventArgs e)

{

MR = 10;

MC = 10;

NM = 15;

W = 40;

H = 40;

this.newGame(1);

this.Invalidate();

}

private void минToolStripMenuItem2_Click(object sender, EventArgs e)

{

MR = 10;

MC = 10;

NM = 20;

W = 40;

H = 40;

this.newGame(1);

this.Invalidate();

}

private void минToolStripMenuItem3_Click(object sender, EventArgs e)

{

MR = 20;

MC = 20;

NM = 20;

W = 30;

H = 30;

this.newGame(1);

this.Invalidate();

}

private void минToolStripMenuItem4_Click(object sender, EventArgs e)

{

MR = 20;

MC = 20;

NM = 40;

W = 30;

H = 30;

this.newGame(1);

this.Invalidate();

}

private void минToolStripMenuItem5_Click(object sender, EventArgs e)

{

MR = 20;

MC = 20;

NM = 60;

W = 30;

H = 30;

this.newGame(1);

this.Invalidate();

}

private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)//щелчок на пункте меню О программе

{

AboutBox1 saper = new AboutBox1();//создание экземпляра формы О программе

saper.ShowDialog();//появление формы О программе

}

private void особыеToolStripMenuItem_Click(object sender, EventArgs e)//щелчок на пункте меню Особые

{

Form2 settings = new Form2();//создание экземпляра формы Настройки

settings.ShowDialog();//появление формы Настройки

//присваиваем значения полям на основе введенных пользователем на форме Настройки

MR = settings.MR;

MC = settings.MC;

NM = settings.NM;

W = 30;

H = 30;

this.newGame(1);

this.Invalidate();

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e)//щелчок на пункте меню Выход

{

this.Close();

}

private void новаяИграToolStripMenuItem1_Click(object sender, EventArgs e)//щелчок на пункте меню Новая игра

{

this.newGame(1);

this.Invalidate();

}

//обработчики щелчков на пунктах меню, в которых указывается способ расстановки мин

private void randomToolStripMenuItem_Click(object sender, EventArgs e)

{

this.newGame(1);

this.Invalidate();

}

private void линейныйКонгруентныйМеоToolStripMenuItem_Click(object sender, EventArgs e)

{

this.newGame(2);

this.Invalidate();

}

private void алгоритмToolStripMenuItem_Click(object sender, EventArgs e)

{

this.newGame(3);

this.Invalidate();

}

}

public partial class Form2 : Form //форма настроек игрового поля

{

public int MR,MC,NM;

public Form2()//конструктор формы настроек поля

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)//нажатие кнопки ОК

{

// не все текстовые поля заполнены, выводится предупреждение

if (((textBox1.Text == "") || (textBox2.Text == "")) || (textBox3.Text == ""))

{

MessageBox.Show("Заполните все поля!");

}

// все текстовые поля заполнены, задаются кол-ва клеток и мин

else

{

MR = Convert.ToInt32(textBox1.Text);

MC = Convert.ToInt32(textBox2.Text);

NM = Convert.ToInt32(textBox3.Text);

this.Close();

}

}

}

partial class AboutBox1 : Form //форма «О программе»

{

public AboutBox1()//конструктор формы «О программе»

{

InitializeComponent();

// Initialize the AboutBox to display the product information from the assembly information.

// Change assembly information settings for your application through either:

// - Project->Properties->Application->Assembly Information

// - AssemblyInfo.cs

//задается текст компонентов формы О программе

this.Text = String.Format("О программе");

this.labelProductName.Text = "Cапер";

this.labelVersion.Text = String.Format("Версия {0}", AssemblyVersion);

this.labelCopyright.Text = "Автор Темерев Кирилл";

this.labelCompanyName.Text = "КФ МГТУ им.Н.Э.Баумана, группа САПР-31";

this.textBoxDescription.Text = "Программа создана в Microsoft Visual Studio 2005 для платформы .NET Framework";

}

}

Страницы: 1, 2, 3, 4, 5



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.