Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методпособие_2_семестр

.pdf
Скачиваний:
13
Добавлен:
02.06.2015
Размер:
703.61 Кб
Скачать

Рисунок 1.1 - Форма в процессе проектирования

Рисунок 1.2 - Форма в процессе выполнения

В листинге 1.1 представлены программные коды файла Form1.cs.

Листинг 1.1 - Программные коды файла Form1.cs

public partial class Form1 : Form

{

 

public Form1()

{

 

 

InitializeComponent();

 

 

}

 

 

 

Graphics graphText;

 

 

 

static bool x = false;

 

 

 

void doAnimate()

{

 

 

String str = "Рисунок";

 

 

graphText = pctText.CreateGraphics();

 

graphText.Clear(this.BackColor);

 

if (x)

{

 

 

graphText.DrawString(str,

 

 

new Font("Arial", 30.0f, FontStyle.Bold),

 

new SolidBrush(btnForeColor.ForeColor), new PointF());

x = false;

 

 

 

}

 

 

 

else x = true;

 

 

 

}

 

 

 

private void timer_Tick(object sender, EventArgs e) { doAnimate();}

private void btnForeColor_Click(object sender, EventArgs e)

{

colorDialog.Color = btnForeColor.ForeColor;

 

if (colorDialog.ShowDialog() == DialogResult.OK)

{

btnForeColor.ForeColor = colorDialog.Color;

 

doAnimate();

 

 

 

}

 

 

 

}

private void btnRun_Click(object sender, EventArgs e) { timer.Start(); } private void btnStop_Click(object sender, EventArgs e) { timer.Stop(); }

}

11

Результат работы

Далее представлен пример приложения.

На рисунке 1.3 представлена форма в процессе проектирования, на рисунке 1.4 –

форма в процессе выполнения.

Рисунок 1.3 - Форма в процессе проектирования

Рисунок 1.4 - Форма в процессе выполнения

12

В листинге 1.2 представлены программные коды файла Form1.cs.

Листинг 1.2 - Программные коды файла Form1.cs

public partial class Form1 : Form {

 

public Form1()

{

InitializeComponent(); }

 

static int a

= 40;

 

 

 

// Функция вычисления значений координат

 

private void

func(float f, int b, out float x, out float y)

{

x = (float)((a * Math.Pow(Math.Cos(f), 2) - b * Math.Pow(Math.Sin(f), 2)) * Math.Cos(f));

y = (float)((a * Math.Pow(Math.Cos(f), 2) - b * Math.Pow(Math.Sin(f), 2)) *

Math.Sin(f));

 

 

 

}

 

 

 

private void btnExit_Click(object sender, EventArgs e)

{

Close();

 

 

 

}

 

 

 

private void scrb_Scroll(object sender, ScrollEventArgs e)

{

lblb.Text=String.Concat("b = ", (scrb.Value).ToString());

 

}

 

 

 

private void btnDraw_Click(object sender, EventArgs e)

{

int b=scrb.Value;

 

 

float h = 0.05f, k_max = 0, tt, x1, y1, x2, y2;

 

// Определение масштаба

 

 

for(float f=0;f<=2*Math.PI;f=f+h)

{

 

func(f, b, out x2, out y2);

 

 

if(f == 0) k_max=(x2>y2) ? x2 : y2;

 

else

{

 

 

 

tt=(x2>y2) ? x2 : y2;

 

}

k_max=(tt>k_max) ? tt : k_max;

 

 

 

 

}

 

 

 

int pict_size=(pctDraw.Width<pctDraw.Height)? pctDraw.Width : pctDraw.Height;

pict_size/=2;

 

 

 

// Подготовка

к рисованию

 

 

Graphics g =

pctDraw.CreateGraphics();

 

g.Clear(Color.White) ;

 

 

g.ScaleTransform(pict_size/(float)k_max, pict_size/(float)k_max);

g.TranslateTransform(pctDraw.Width/2, pctDraw.Height/2,

 

System.Drawing.Drawing2D.MatrixOrder.Append);

 

 

Pen p = new Pen(Color.Black);

 

 

// Оси координат

 

 

g.DrawLine(p, -pctDraw.Width/2, 0, pctDraw.Width/2, 0);

 

g.DrawLine(p, 0, -pctDraw.Height/2, 0, pctDraw.Height/2);

 

// Рисование графика функции

 

 

p.Color=Color.Green;

 

 

func(0, b, out x1, out y1);

 

 

float xmax=0, ymax=0;

 

 

for(float f=h;f<=2*Math.PI+h;f=f+h)

{

 

func(f, b, out x2, out y2);

 

 

g.DrawLine(p, x1, y1, x2, y2); x1 = x2;

y1 = y2;

xmax=(x1>xmax) ? x1 : xmax; ymax=(y1>ymax) ? y1 : ymax;

}

// Подпись осей координат

g.DrawString( (xmax).ToString(),new System.Drawing.Font("Arial", 8), new SolidBrush(Color.Black), xmax,0);

g.DrawString( (ymax).ToString(),new System.Drawing.Font("Arial", 8), new SolidBrush(Color.Black), 0, -ymax);

}

}

13

Лабораторная работа №8. Игра «Собери больше фигур»

Цель работы: реализовать приложение-игру.

План работы: в течение двух занятий студент должен изучить материал текущей лабораторной работы и продемонстрировать свои навыки преподавателю. В результате чего студент получает две оценки: за приложение и за изученный материал.

Задание: создать приложение-игру в соответствии с заданным вариантом.

Требование к отчету:

1.Титульный лист: номер и название лабораторной работы.

2.Текст задания.

3.Форма в процессе проектирования и выполнения.

4.Структура приложения.

5.Таблица свойств объектов.

6.Список идентификаторов.

7.Программные коды.

Добавление новой формы к проекту

Для того, чтобы добавить новую форму к проекту необходимо:

1.в меню выбрать «Проект», затем «Добавить форму Windows»

2.в поле «Имя:» ввести имя формы (рисунок 3.1)

Рисунок 3.1 – Добавление новой формы в проект

14

Добавление класса к проекту

Для того, чтобы добавить класс к проекту необходимо:

1.в меню выбрать «Проект», затем «Добавить класс…»

2.в поле «Имя:» ввести имя класса (рисунок 3.2)

Рисунок 3.2 – Добавление класса в проект

Результат работы

Далее представлен пример.

На рисунке 3.3 представлена главная форма в процессе проектирования, на рисунке 3.4 – меню главной формы во время проектирования, на рисунке 3.5 - форма настроек во время проектирования, на рисунке 3.6 - приложение во время выполнения,

на рисунке 3.7 – настройки во время выполнения.

Рисунок 3.3 – Главная форма во время проектирования

15

Рисунок 3.4 – Меню главной формы во время проектирования

Рисунок 3.5 – Форма настроек во время проектирования

Рисунок 3.6 – Приложение во время выполнения

16

Рисунок 3.7 – Настройки во время выполнения

Влистинге 3.1 представлены программные коды файла DrawFigure.sc, в листинге

3.2– FormSettings.sc, в листинге 3.3 - Form1.cs.

Листинг 3.1 - Программные коды файла DrawFigure.cs

class DrawFigure

{

 

 

public static Pen penTriangle = new Pen(Color.Navy, 2), penEllipse =

new Pen(Color.Red, 2);

public static SolidBrush brushTriangle = new SolidBrush(Color.Lime),

brushEllipse = new

 

SolidBrush(Color.Yellow);

 

 

public static void doDrawEmpty(Graphics graph, Color clr, int koef, int y, int x)

{

Rectangle rect = new Rectangle(new Point(1 + x, 1 + y), new Size(koef * 10 - 1, koef *

10 - 1));

graph.FillRectangle(new SolidBrush(clr), rect);

}

public static void doDrawTriangle(Graphics graph, Pen pen, Brush brush, int koef, int y, int

x){

Point[] points =

{

new Point(koef*5 + x, koef*2 + y), new Point(koef*8 + x, koef*8 + y), new Point(koef*2 + x, koef*8 + y)

};

doDrawEmpty(graph, Color.White, koef, y, x); graph.FillPolygon(brush, points); graph.DrawPolygon(pen, points);

}

public static void doDrawEllipse(Graphics graph, Pen pen, Brush brush, int koef, int y, int

x){

Rectangle rect = new Rectangle(new Point(koef*2 + x, koef*3 + y), new Size(koef*6,

koef*4));

doDrawEmpty(graph, Color.White, koef, y, x); graph.FillEllipse(brush, rect); graph.DrawEllipse(pen, rect);

}

}

Листинг 3.2 - Программные коды файла FormSettings.cs

public partial class FormSettings : Form

{

public FormSettings()

{

 

17

InitializeComponent();

}

 

 

Graphics graph;

 

 

private void btnOk_Click(object sender, EventArgs e)

{

 

DialogResult = DialogResult.OK;

 

 

Close();

 

 

}

 

 

private void btnTrianglePen_Click(object sender, EventArgs e)

{

if (colorDialog.ShowDialog() == DialogResult.OK)

 

{

btnTrianglePen.BackColor = colorDialog.Color;

 

 

DrawFigure.penTriangle.Color = colorDialog.Color;

 

 

FormSettings_Paint(this, null);

 

 

}

 

 

}

 

 

private void btnTriangleBrush_Click(object sender, EventArgs e)

{

if (colorDialog.ShowDialog() == DialogResult.OK)

 

{

btnTriangleBrush.BackColor = colorDialog.Color;

 

 

DrawFigure.brushTriangle.Color = colorDialog.Color;

 

 

FormSettings_Paint(this, null);

 

 

}

 

 

}

 

 

private void btnEllipsePen_Click(object sender, EventArgs e)

 

{

if (colorDialog.ShowDialog() == DialogResult.OK)

 

{

btnEllipsePen.BackColor = colorDialog.Color;

 

 

DrawFigure.penEllipse.Color = colorDialog.Color;

 

 

FormSettings_Paint(this, null);

 

 

}

 

 

}

 

 

private void btnEllipseBrush_Click(object sender, EventArgs e)

{

if (colorDialog.ShowDialog() == DialogResult.OK)

 

{

btnEllipseBrush.BackColor = colorDialog.Color;

 

 

DrawFigure.brushEllipse.Color = colorDialog.Color;

 

 

FormSettings_Paint(this, null);

 

 

}

 

 

}

 

 

 

 

 

private void FormSettings_Shown(object sender, EventArgs e)

{

 

 

btnTrianglePen.BackColor = DrawFigure.penTriangle.Color;

 

 

 

btnTriangleBrush.BackColor = DrawFigure.brushTriangle.Color;

 

 

 

btnEllipsePen.BackColor = DrawFigure.penEllipse.Color;

 

 

 

btnEllipseBrush.BackColor = DrawFigure.brushEllipse.Color;

 

 

 

}

 

 

 

 

 

private void FormSettings_Load(object sender, EventArgs e)

{

 

 

graph = this.CreateGraphics();

 

 

 

}

 

 

 

 

 

private void FormSettings_Paint(object sender, PaintEventArgs e)

{

 

 

DrawFigure.doDrawTriangle(graph, DrawFigure.penTriangle, DrawFigure.brushTriangle, 50 /

10,

20,

20);

 

 

 

70,

20);

DrawFigure.doDrawEllipse(graph, DrawFigure.penEllipse, DrawFigure.brushEllipse, 50 / 10,

}

 

 

 

 

}

 

 

 

 

 

 

 

 

 

Листинг 3.3 - Программные коды файла Form1.cs

 

 

public partial class Form1 : Form

{

 

 

 

public Form1()

{

 

 

 

 

InitializeComponent();

 

 

 

 

}

 

 

 

Graphics graphField, graphUser, graphPC;

18

static int countTriangle = 2, countEllipse = 3;

static int countTriangleUser = 0, countEllipseUser = 0; static int countTrianglePC = 0, countEllipsePC = 0; static int sizeField = 6, koef = 40;

int[,] arrGame = new int[sizeField, sizeField];

static int valEmpty = 0, valTriangle = 1, valEllipse = 2;

static int valGuessEmpty = 10, valGuessTriangle = 11, valGuessEllipse = 12; static int countItems = 0, countGuess = 0;

// 1

 

 

private void Form1_Load(object sender, EventArgs e)

{

 

this.Width = btnShow.Left + btnShow.Width + 25;

 

 

graphField = pctField.CreateGraphics();

 

 

graphUser = pctUser.CreateGraphics();

 

 

graphPC = pctPC.CreateGraphics();

 

 

grid.Rows.Clear();

 

 

grid.RowCount = sizeField;

 

 

grid.ColumnCount = sizeField;

 

 

}

 

 

//6

 

 

private void pctField_Paint(object sender, PaintEventArgs e)

{

graphField.Clear(Color.WhiteSmoke);

for (int i = 0; i < sizeField + 1; i++) {

graphField.DrawLine(new Pen(Color.Black), 0, i * koef, pctField.Width, i * koef); graphField.DrawLine(new Pen(Color.Black), i * koef, pctField.Width, i * koef, 0);

}

 

 

for (int i =

0; i < sizeField; i++)

 

for (int

j = 0; j < sizeField; j++)

{

if (arrGame[i, j] == valGuessEmpty)

DrawFigure.doDrawEmpty(graphField, Color.White, koef / 10, i * koef, j *

koef);

else if (arrGame[i, j] == valGuessTriangle) DrawFigure.doDrawTriangle(graphField, DrawFigure.penTriangle,

DrawFigure.brushTriangle, koef / 10, i * koef, j * koef); else if (arrGame[i, j] == valGuessEllipse)

DrawFigure.doDrawEllipse(graphField, DrawFigure.penEllipse, DrawFigure.brushEllipse, koef / 10, i * koef, j * koef);

}

}

 

 

//2

 

 

private

void btnStart_Click(object sender, EventArgs e)

{

countItems = 0;

 

countGuess = 0;

 

countTriangleUser = 0; countEllipseUser = 0;

 

countTrianglePC = 0; countEllipsePC = 0;

 

for

(int i = 0; i < sizeField; i++)

 

 

for (int j = 0; j < sizeField; j++)

 

 

arrGame[i, j] = 0;

 

Random random = new Random();

 

int

iNum, jNum;

 

// треугольники

 

for

(int numPlace = 0; numPlace < countTriangle; )

{

 

iNum = random.Next(0, sizeField);

 

 

jNum = random.Next(0, sizeField);

 

 

if (arrGame[iNum, jNum] == valEmpty)

{

 

arrGame[iNum, jNum] = valTriangle;

 

numPlace++;

}

}

19

// эллипсы

 

 

 

for (int numPlace = 0; numPlace < countEllipse; )

{

iNum = random.Next(0, sizeField);

 

 

jNum = random.Next(0, sizeField);

 

 

if (arrGame[iNum, jNum] == valEmpty)

 

{

arrGame[iNum, jNum] = valEllipse;

 

 

numPlace++;

 

 

 

}

 

 

 

}

 

 

 

doShowGrid();

 

 

 

doShowCount();

 

 

 

pctField_Paint(this, null);

 

 

pctUser_Paint(this, null);

 

 

pctPC_Paint(this, null);

 

 

}

 

 

 

//3

 

 

 

void doShowCount()

{

 

 

lblTriangleUser.Text = countTriangleUser.ToString();

 

lblEllipseUser.Text = countEllipseUser.ToString();

 

lblTrianglePC.Text = countTrianglePC.ToString();

 

lblEllipsePC.Text = countEllipsePC.ToString();

 

 

}

 

 

 

//4

 

 

 

void doShowGrid()

{

 

 

for (int i = 0; i < sizeField; i++)

{

 

grid.Columns[i].Name = (i + 1).ToString();

 

 

grid.Columns[i].Width = 30;

 

 

for(int j = 0; j < sizeField; j++)

 

 

grid.Rows[i].Cells[j].Value = (arrGame[i, j]).ToString();

}

}

//5

private void pctField_MouseUp(object sender, MouseEventArgs e) { if (isGameOver() || timer.Enabled == true)

return;

int i = e.Y / koef; int j = e.X / koef;

if (arrGame[i, j] >= 10) return;

if (arrGame[i, j] < 10)

{

if (arrGame[i, j] == valTriangle) countTriangleUser++;

else if (arrGame[i, j] == valEllipse) countEllipseUser++;

arrGame[i, j] += 10; countItems++;

}

if (arrGame[i, j] > valGuessEmpty) { countGuess++;

}

doShowGrid();

doShowCount();

pctField_Paint(this, null);

20