Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Лабораторная работа №8. Игра «Собери больше фигур» ⇐ ПредыдущаяСтр 3 из 3
Цель работы: реализовать приложение-игру. План работы: в течение двух занятий студент должен изучить материал текущей лабораторной работы и продемонстрировать свои навыки преподавателю. В результате чего студент получает две оценки: за приложение и за изученный материал. Задание: создать приложение-игру в соответствии с заданным вариантом. Требование к отчету: 1. Титульный лист: номер и название лабораторной работы. 2. Текст задания. 3. Форма в процессе проектирования и выполнения. 4. Структура приложения. 5. Таблица свойств объектов. 6. Список идентификаторов. 7. Программные коды. Добавление новой формы к проекту Для того, чтобы добавить новую форму к проекту необходимо: 1. в меню выбрать «Проект», затем «Добавить форму Windows» 2. в поле «Имя: » ввести имя формы (рисунок 3.1)
Рисунок 3.1 – Добавление новой формы в проект
Добавление класса к проекту
Для того, чтобы добавить класс к проекту необходимо: 1. в меню выбрать «Проект», затем «Добавить класс…» 2. в поле «Имя: » ввести имя класса (рисунок 3.2)
Рисунок 3.2 – Добавление класса в проект Результат работы Далее представлен пример. На рисунке 3.3 представлена главная форма в процессе проектирования, на рисунке 3.4 – меню главной формы во время проектирования, на рисунке 3.5 - форма настроек во время проектирования, на рисунке 3.6 - приложение во время выполнения, на рисунке 3.7 – настройки во время выполнения. Рисунок 3.3 – Главная форма во время проектирования
Рисунок 3.4 – Меню главной формы во время проектирования
Рисунок 3.5 – Форма настроек во время проектирования
Рисунок 3.6 – Приложение во время выполнения Рисунок 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() { 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); DrawFigure.doDrawEllipse(graph, DrawFigure.penEllipse, DrawFigure.brushEllipse, 50 / 10, 70, 20); } } Листинг 3.3 - Программные коды файла Form1.cs public partial class Form1: Form { public Form1() { InitializeComponent(); }
Graphics graphField, graphUser, graphPC; 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++; } }
// эллипсы 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);
timer.Start(); }
//8 private void timer_Tick(object sender, EventArgs e) { if (isGameOver()) return;
Random random = new Random(); int iNum, jNum;
while (true) { iNum = random.Next(0, sizeField); jNum = random.Next(0, sizeField); if (arrGame[iNum, jNum] < valGuessEmpty) { arrGame[iNum, jNum] += 10; countItems++;
if (arrGame[iNum, jNum] > valGuessEmpty) { countGuess++;
if (arrGame[iNum, jNum] == valGuessTriangle) countTrianglePC++; else if (arrGame[iNum, jNum] == valGuessEllipse) countEllipsePC++; }
doShowGrid(); doShowCount();
pctField_Paint(this, null); timer.Stop(); break; } } isGameOver(); }
//7 private bool isGameOver() { if (countGuess == countTriangle + countEllipse || countItems == sizeField * sizeField) { timer.Stop();
if (countTriangleUser + countEllipseUser > countTrianglePC + countEllipsePC) MessageBox.Show(" Вы выйграли со счетом " + (countTriangleUser + countEllipseUser).ToString() + ": " + (countTrianglePC + countEllipsePC).ToString(), " Итог игры" ); else if (countTriangleUser + countEllipseUser < countTrianglePC + countEllipsePC) MessageBox.Show(" Вы проиграли со счетом " + (countTriangleUser + countEllipseUser).ToString() + ": " + (countTrianglePC + countEllipsePC).ToString(), " Итог игры" ); else MessageBox.Show(" Ничья " + (countTriangleUser + countEllipseUser).ToString() + ": " + (countTrianglePC + countEllipsePC).ToString(), " Итог игры" );
return true; } else return false; }
private void btnShow_Click(object sender, EventArgs e) { if(btnShow.Text.CompareTo(" -> " ) == 0){ this.Width = grid.Left + grid.Width + 25; btnShow.Text = " < -"; } else{ this.Width = btnShow.Left + btnShow.Width + 25; btnShow.Text = " -> "; } }
private void mnuSettings_Click(object sender, EventArgs e) { FormSettings frmSet = new FormSettings(); if (frmSet.ShowDialog() == DialogResult.OK) pctField_Paint(this, null); }
//5 private void pctUser_Paint(object sender, PaintEventArgs e) { DrawFigure.doDrawTriangle(graphUser, DrawFigure.penTriangle, DrawFigure.brushTriangle, 30 / 10, 0, 0); DrawFigure.doDrawEllipse(graphUser, DrawFigure.penEllipse, DrawFigure.brushEllipse, 30 / 10, 30, 0); }
//6 private void pctPC_Paint(object sender, PaintEventArgs e) { DrawFigure.doDrawTriangle(graphPC, DrawFigure.penTriangle, DrawFigure.brushTriangle, 30 / 10, 0, 0); DrawFigure.doDrawEllipse(graphPC, DrawFigure.penEllipse, DrawFigure.brushEllipse, 30 / 10, 30, 0); }
private void mnuExit_Click(object sender, EventArgs e) { Close(); } }
Цель работы: создать приложение с графическим интерфейсом для работы с одномерными и двумерными массивами. План работы: в течение четырех занятий студент должен изучить материал текущей лабораторной работы и продемонстрировать свои навыки преподавателю. В результате чего студент получает две оценки: за приложение и за изученный материал. Задание: Создать приложение для работы с массивами в соответствии с заданным вариантом. Требование к приложению: · Предусмотреть возможность работы приложения с двумерными и одномерными массивами; · Предусмотреть возможность сохранения и открытия одномерных и двумерных массивов; · Обрабатывать все возможные исключительные и проблемные ситуации, которые могут привести к ошибке и некорректному завершению приложения. Требование к отчету: 1. Титульный лист: номер и название лабораторной работы. 2. Текст задания. 3. Форма в процессе проектирования и выполнения. 4. Структура приложения. 5. Таблица свойств объектов. 6. Список идентификаторов. 7. Блок-схема алгоритма. 8. Программные коды.
Популярное:
|
Последнее изменение этой страницы: 2016-07-13; Просмотров: 394; Нарушение авторского права страницы