Студопедия — Программы
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Программы






 

 

 

 

 


9. Приложение 2. Текст программы на языке C#

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Threading;

using System.Collections;

 

public delegate void delEv();

public delegate void Del();

 

 

public class Avto

{

public int num; //номер объекта

public event delEv evSpecial;

public int x, y;//координаты машины

public double fi = 0.1;

public int dx1, dy1, dx2, dy2;//приращения машин

public int speed;//скорость машины

Thread thread;

public bool dvig = true;

public bool life;//признак жизни потока

public bool run = true;

public event Del ev;

 

 

public int N { get { return num; } }//номер машины

public int X { get { return x; } set { x = value; } }//координата X

public int Y { get { return y; } set { y = value; } }//координата Y

 

 

public Avto(int N, int X, int Y, int Speed)

{

num = N;

x = X; y = Y;

speed = Speed;

life = true;

//создать и запустить поток

thread = new Thread(new ThreadStart(AvtoFunc));

thread.Start();

 

 

}

 

public void Finish()//завершить поток

{

//Resume();

life = false;

}

 

void AvtoFunc()

{

 

 

while (life)

{

 

if (run)

{

Thread.Sleep(speed);

if (ev!= null) ev();

if (dvig)

{

//уравнение движения по окр-ти

dx1 = (int)(19 * Math.Sin(fi));

dy1 = (int)(19 * Math.Cos(fi));

x += dx1;

y += dy1;

 

 

}

else

{

dx2 = (int)(28 * Math.Sin(fi));

dy2 = (int)(28 * Math.Cos(fi));

y -= dx2;

x -= dy2;

 

 

}

 

fi += 0.1;

 

}

 

evSpecial();

 

}

}

 

public void Suspend()//приостановить поток

{

if (run)

{

run = false;

 

}

}

 

public void Resume()//возобновить поток

{

if (!run)

{

run = true;

 

}

}

 

}

 

 

class Avtos: Form

{

ArrayList al; //ссылка на список машин

ListBox listBoxNum;//список номеров машин

private int num = 0;//номер объекта машины

private Form f;// ссылка на дочернее окно управления

private Button add, del, ok;// ссылки на кнопки

public bool run = true;//признак движения машин

 

public Avtos()//конструктор

{

 

al = new ArrayList();

run = true;//машины двигаются

Size = new Size(770, 770);//установить размер прикладного окна

Text = "Шоссе";//установить заголовок прикладного окна

 

f = new Form();//создать объект дочернего окна

f.Text = "Control";//установить заголовок дочернего окна

f.Size = new Size(300, 150);//установить размеры дочернего окна

f.Show();//показать дочернее окно

 

ok = new Button();//создать кнопку приостановки

ok.Text = "Stop";//именовать кнопку

ok.Size = new Size(45, 30);//размеры кнопки

ok.Location = new Point(5, 10);//поместить кнопку в окне

ok.Click += new EventHandler(OK);//подписать обработчик

f.Controls.Add(ok);//поместить объект ок в контейнер окна

 

add = new Button();//создать кнопку добавления машин

add.Text = "Add";//именовать кнопку

add.Size = new Size(45, 30);//размеры кнопки

add.Location = new Point(5, 50);//поместить кнопку в окне

add.Click += new EventHandler(ADD);//подписать обработчик

f.Controls.Add(add);//поместить объект add в контейнер окна

 

listBoxNum = new ListBox();//создать элемент списка номеров

listBoxNum.Location = new Point(140, 10);//разместить в окне

listBoxNum.Size = new Size(60, 70);//установить размер

f.Controls.Add(listBoxNum);//поместить в контейнер окна

 

del = new Button();//создать кнопку удаления машин

del.Text = "Del";//именовать кнопку

del.Size = new Size(40, 30);//установить размер

del.Location = new Point(90, 10);//поместить кнопку в окне

del.Click += new EventHandler(DEL);//подписать обработчик

f.Controls.Add(del);//поместить объект del в контейнер окна

}

 

//приостановить или возобновить поток перерисовки

private void OK(Object obj, EventArgs arg)

{

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

//перебрать список объектов машин

Avto a = (Avto)inum.Current;

if (run) { a.Suspend(); ok.Text = "Start"; }

else { a.Resume(); ok.Text = "Stop"; }

}

run =!run;

}

 

//создать автомобиль и включить его в список

public void ADD(Object obj, EventArgs arg)

{

num++;

Avto b;

Random r = new Random();

if (num % 2 == 0)

{

Avto a = new Avto(num, 385, 660, r.Next(50, 100));

Console.WriteLine("Добавлен автомобиль " + num);

a.dvig = false;

//a.ev += new Del(this.Handlerev);

b = a;

}

else

{

Avto a = new Avto(num, 195, 400, r.Next(50, 100));

Console.WriteLine("Добавлен автомобиль " + num);

a.dvig = true;

//a.ev += new Del(this.Handlerev);

b = a;

}

 

listBoxNum.Items.Add(num);

al.Add(b);

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

Avto q = (Avto)inum.Current;

q.evSpecial += new delEv(this.HandlerEvSpecial);

q.ev += new Del(this.Handlerev);

 

}

}

 

//обработать нажатие кнопки удаления машины

private void DEL(Object o, EventArgs e)

{

if (listBoxNum.SelectedIndex == -1)

{

MessageBox.Show("Выделите номер"

+ "\n удаляемого объекта");

}

else

{

int numSel = (int)listBoxNum.SelectedItem;

listBoxNum.Items.Remove(numSel);//Удалить из списка

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

Avto a = (Avto)inum.Current;

if (a.N == numSel)

{//объект с указанным номером найден

a.Finish();//завершить поток

al.Remove(a);//удалить из списка

return;

}

}

}

}

//обработчик столкновения и разъезда машин

public void Handlerev()

{

bool crash = false;

for (int i = 0; i < al.Count; i++)

{

Avto a = (Avto)al[i];

 

if (a.life)

for (int j = i; j < al.Count; j++)

{

Avto a1 = (Avto)al[j];

 

if ((a.num!= a1.num) && (Math.Abs(a1.x - a.x) < 10) && (Math.Abs(a1.y - a.y) < 10))

{

Console.WriteLine("Автомобили " + a.num +" и "+ a1.num + " врезались");

crash = true;

a.run = false;

a1.run = false;

Thread.Sleep(500);

a.run = true;

a1.run = true;

run = true;

 

 

if (crash)

{

if ((a.x > a1.x)||(a.y > a1.y))

{

a.x += 2;

a1.x -= 1;

a.y += 2;

a1.y -= 1;

crash = false;

}

else

{

a1.x += 2;

a.x -= 1;

a1.y += 2;

a.y -= 1;

crash = false;

}

Console.WriteLine("Автомобили " + a.num + " и " + a1.num + " разъехались");

 

}

 

}

}

}

 

 

}

 

public void HandlerEvSpecial()

{

Invalidate();

}

 

//перерисовать прикладное окно

protected override void OnPaint(PaintEventArgs arg)

{

arg.Graphics.FillEllipse(new SolidBrush(Color.Gray), 100, 100, 604, 604);//внешнее кольцо

arg.Graphics.FillEllipse(new SolidBrush(Color.White), 173, 173, 454, 454);//разделительная полоса

arg.Graphics.FillEllipse(new SolidBrush(Color.Gray), 175, 175, 450, 450);//внутреннее кольцо

arg.Graphics.FillEllipse(new SolidBrush(Color.YellowGreen), 245, 245, 300, 300);

this.BackColor = Color.YellowGreen; // Закрасить фон зеленым

this.FormBorderStyle = FormBorderStyle.FixedSingle; // Запрет изменения размера окна

this.MaximizeBox = false; // Убрать кнопку "Развернуть окно"

this.DoubleBuffered = true; // Включить буферизацию изображения

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

Avto a = (Avto)inum.Current;

arg.Graphics.FillEllipse(new SolidBrush(Color.Red), a.x, a.y, 25, 25);//машина

arg.Graphics.DrawString(a.N.ToString(), new Font("Comic Sans MS", 9), new SolidBrush(Color.White), a.x + 5, a.y + 5);//номера машин

 

}

}

 

static void Main()

{

Application.Run(new Avtos());

}

}

 

10. Приложение 3. Текст программы на языке C++/CLI

// kurs.cc.cpp: main project file.

 

#include "stdafx.h"

#using <System.Drawing.dll>

#using <System.Windows.Forms.dll>

using namespace System;

using namespace System::Threading;

using namespace System::Collections;

using namespace System::Drawing;

using namespace System::Windows::Forms;

 

delegate void delEv();

delegate void Del();

 

 

ref class Avto

{

public:

 

int num;

event delEv ^evSpecial;

int x, y;

double fi;

int dx1, dy1, dx2, dy2;

int speed;

Thread ^thread;

bool dvig;

bool life;

bool run;

event Del ^ev;

 

 

property int N { int get() { return num; } }

property int X { int get() { return x; } }

property int Y { int get() { return y; } }

 

Avto(int N, int X, int Y, int Speed)

{

fi = 0.1;

num = N;

dvig = true;

run = true;

x = X; y = Y;

speed = Speed;

life = true;

thread = gcnew Thread(gcnew ThreadStart(this,&Avto::AvtoFunc));

thread->Start();

 

 

}

 

void Finish()

{

//Resume();

life = false;

}

 

void AvtoFunc()

{

while (life)

{

 

if (run)

{

Thread::Sleep(speed);

ev();

if (dvig)

{

dx1 = (int)(19 * System::Math::Sin(fi));

dy1 = (int)(19 * System::Math::Cos(fi));

x += dx1;

y += dy1;

 

 

}

else

{

dx2 = (int)(28 * System::Math::Sin(fi));

dy2 = (int)(28 * System::Math::Cos(fi));

y -= dx2;

x -= dy2;

 

 

}

 

fi += 0.1;

 

}

 

evSpecial();

 

 

}

}

 

void Suspend()

{

if (run)

{

run = false;

 

}

}

void Resume()

{

if (!run)

{

run = true;

 

}

}

};

 

 

ref class Avtos: public Form

{

private:

ArrayList ^al; //ссылка на список машин

ListBox ^listBoxNum;//список номеров машин

int num;// = 0;//номер объекта машины

Form ^f;// ссылка на дочернее окно управления

Button ^add, ^del, ^ok;// ссылки на кнопки

bool run;// = true;//признак движения машин

 

public:

Avtos()

{

num=0;

al = gcnew ArrayList();

run = true;

Size = Drawing::Size(770, 770);

Text = "Шоссе";

 

 

f = gcnew Form();

f->Text = "Control";

f->Size = Drawing::Size(300, 150);

f->Show();

 

ok = gcnew Button();

ok->Text = "Stop";

ok->Size = Drawing::Size(45, 30);

ok->Location = Point(5, 10);

ok->Click += gcnew EventHandler(this, &Avtos::OK);

f->Controls->Add(ok);

 

add = gcnew Button();

add->Text = "Add";

add->Size = Drawing::Size(45, 30);

add->Location = Point(5, 50);

add->Click += gcnew EventHandler(this, &Avtos::ADD);

f->Controls->Add(add);

 

listBoxNum = gcnew ListBox();

listBoxNum->Location = Point(140, 10);

listBoxNum->Size = Drawing::Size(60, 70);

f->Controls->Add(listBoxNum);

 

del = gcnew Button();

del->Text = "Del";

del->Size = Drawing::Size(40, 30);

del->Location = Point(90, 10);

del->Click += gcnew EventHandler(this, &Avtos::DEL);

f->Controls->Add(del);

}

 

private:

void OK(Object ^obj, EventArgs ^arg)

{

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^a = (Avto^)inum->Current;

if (run) { a->Suspend(); ok->Text = "Start"; }

else { a->Resume(); ok->Text = "Stop"; }

}

run =!run;

}

 

public:

void ADD(Object ^obj, EventArgs ^arg)

{

num++;

Avto ^b;

Random ^r = gcnew Random();

//Random rand = new Random();

if (num % 2 == 0)

{

Avto ^a = gcnew Avto(num, 385, 660, r->Next(50, 100));

System::Console::WriteLine("Добавлен автомобиль"+num);

a->dvig = false;

// a.ev += new Del(this.Handlerev);

b = a;

}

else

{

Avto ^a = gcnew Avto(num, 195, 400, r->Next(50, 100));

System::Console::WriteLine("Добавлен автомобиль"+num);

a->dvig = true;

// a.ev += new Del(this.Handlerev);

b = a;

}

 

listBoxNum->Items->Add(num);

al->Add(b);

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^q = (Avto^)inum->Current;

q->evSpecial += gcnew delEv(this, &Avtos::HandlerEvSpecial);

q->ev += gcnew Del(this, &Avtos::Handlerev);

}

}

 

 

private:

void DEL(Object ^o, EventArgs ^e)

{

if (listBoxNum->SelectedIndex == -1)

{

MessageBox::Show("Выделите номер удаляемого объекта");

}

else

{

int numSel = (int)listBoxNum->SelectedItem;

listBoxNum->Items->Remove(numSel);//Удалить из списка

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^a = (Avto^)inum->Current;

if (a->N == numSel)

{//объект с указанным номером найден

a->Finish();//завершить поток

al->Remove(a);//удалить из списка

return;

}

}

}

}

public:

void Handlerev()

{

bool crash = false;

for (int i = 0; i < al->Count; i++)

{

Avto ^a = (Avto^)al[i];

 

if (a->life)

for (int j = i; j < al->Count; j++)

{

Avto ^a1 = (Avto^)al[j];

 

if ((a->num!= a1->num) && (System::Math::Abs(a1->x - a->x) < 10) && (System::Math::Abs(a1->y - a->y) < 10))

{

System::Console::WriteLine("Автомобили " + a->num + " и " + a1->num + " врезались");

crash = true;

a->run = false;

a1->run = false;

Thread::Sleep(500);

a->run = true;

a1->run = true;

run = true;

 

 

if (crash)

{

if ((a->x > a1->x)||(a->y > a1->y))

{

a->x += 2;

a1->x -= 1;

a->y += 2;

a1->y -= 1;

}

else

{

a1->x += 2;

a->x -= 1;

a1->y += 2;

a->y -= 1;

}

System::Console::WriteLine("Автомобили " + a->num + " и " + a1->num + " разъехались");

}

 

}

}

}

 

 

}

 

public:

void HandlerEvSpecial()

{

Invalidate();

}

 

protected:

virtual void OnPaint(PaintEventArgs ^arg) override

{

arg->Graphics->FillEllipse(gcnew SolidBrush(Color::Gray), 100, 100, 604, 604);//внешнее кольцо

arg->Graphics->FillEllipse(gcnew SolidBrush(Color::White), 173, 173, 454, 454);//разделительная полоса

arg->Graphics->FillEllipse(gcnew SolidBrush(Color::Gray), 175, 175, 450, 450);//внутреннее кольцо

arg->Graphics->FillEllipse(gcnew SolidBrush(Color::YellowGreen), 245, 245, 300, 300);

this->BackColor = Color::YellowGreen; // Закрасить фон зеленым

this->MaximizeBox = false; // Убрать кнопку "Развернуть окно"

this->DoubleBuffered = true; // Включить буферизацию изображения

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^a = (Avto^)inum->Current;

arg->Graphics->FillEllipse(gcnew SolidBrush(Color::Red), a->X, a->Y, 25, 25);//машина

arg->Graphics->DrawString(a->N.ToString(), gcnew Drawing::Font("Comic Sans MS", 10), gcnew SolidBrush(Color::White), a->X + 5, a->Y + 5);//номера машин

 

}

}

};

 

static void main()

{

Application::Run(gcnew Avtos());

}

 







Дата добавления: 2015-06-15; просмотров: 453. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Понятие метода в психологии. Классификация методов психологии и их характеристика Метод – это путь, способ познания, посредством которого познается предмет науки (С...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

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

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия