Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



 

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

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

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

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

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

}

}


Лабораторная работа №9. Работа с одномерными и двумерными массивами

 

Цель работы: создать приложение с графическим интерфейсом для работы с одномерными и двумерными массивами.

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

Задание: Создать приложение для работы с массивами в соответствии с заданным вариантом.

Требование к приложению:

· Предусмотреть возможность работы приложения с двумерными и одномерными массивами;

· Предусмотреть возможность сохранения и открытия одномерных и двумерных массивов;

· Обрабатывать все возможные исключительные и проблемные ситуации, которые могут привести к ошибке и некорректному завершению приложения.

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

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

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

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

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

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

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

7. Блок-схема алгоритма.

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

 

 


Поделиться:



Популярное:

  1. I WORK UNDER MANY DIFFICULTIES (я работаю в трудных условиях: «под многими сложностями»)
  2. II. Проблемы миграций. Отношение Атаульфа к Римской империи. Римляне и вестготы. Состав племени. Королевская власть. Христианизация вестготов.
  3. ROA больше или равно WACC / (1-T)
  4. А. В. Петровский разработал следующую схему развития групп. Он утверждает, что существует пять уровней развития групп: диффузная группа, ассоциация, кооперация, корпорация и коллектив.
  5. Алгоритм выделения эйлерова цикла в связном мультиграфе с четными степенями вершин
  6. Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса
  7. Анализ показателей качества и определение полиграфического исполнения изделия
  8. Бакалаврская выпускная работа
  9. Безопасность объектов почтовой связи и работающего персонала.
  10. Библейское благословение: намного больше, чем вы можете представить
  11. БИЛЕТ 13. Работа по перемещению контура с током в магнитном поле. Энергия магнитного поля
  12. Больше о транзисторных усилителях


Последнее изменение этой страницы: 2016-07-13; Просмотров: 394; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.077 с.)
Главная | Случайная страница | Обратная связь