Методпособие_2_семестр
.pdf
Рисунок 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
