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

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

Приложение 4. Текст программы на языке Java





 

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

 

public class Avto extends Observable implements Runnable

{

public int num;

public int x, y;

public double fi = 0.1;

public int dx1, dy1, dx2, dy2;

Thread thr;

public boolean dvig = true, run = true;

boolean life;

public int speed;

 

 

public int N() { return num; }

public int X() { return x; }

public int Y() { return y; }

 

 

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

{

num = N;

x = X; y = Y;

speed = Speed;

life = true;

thr = new Thread(this);

thr.start();

 

}

 

public void report()

{

setChanged();

notifyObservers();

}

 

public void Finish()

{

Resume();

life = false;

}

 

public void run()

{

while (life)

{

if (run)

{

 

try

{

Thread.sleep(speed);

}

catch (InterruptedException e) { }

 

if (dvig)

{

x += dx1;

y += dy1;

 

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

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

}

else

{

y -= dx2;

x -= dy2;

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

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

 

}

 

fi += 0.1;

report();

}

 

}

}

 

public void Suspend()

{

if (run)

{

run = false;

 

}

}

public void Resume()

{

if (!run)

{

run = true;

}

}

}

 

 

public class Autos extends Frame implements Observer, ActionListener, ItemListener

{

public ArrayList al;

private boolean run;

private Frame f;

private Button ok, add;

private int num = 0;

private Random r;

private Choice n;

private Button del;

 

public Autos()

{

al = new ArrayList();

r = new Random();

this.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent wE)

{

for (int n = 0; n < al.size(); n++)

{

Avto a = (Avto)al.get(n);

a.Suspend();

}

System.exit(0);

}

});

 

setTitle("Шоссе");

setLocation(new Point(600, 0));

setBackground(Color.green);

run = true;

f = new Frame();

f.setSize(300, 100);

f.setTitle("Control");

f.setLocation(new Point(150,150));

f.setLayout(new FlowLayout());

 

 

ok = new Button("Стоп");

ok.setActionCommand("stop");

ok.addActionListener(this);

f.add(ok);

 

add = new Button("Add");

add.setActionCommand("ADD");

add.addActionListener(this);

f.add(add);

f.setVisible(true);

 

del = new Button("Del");

del.setActionCommand("DEL");

del.addActionListener(this);

f.add(del);

 

n = new Choice();

n.addItemListener(this);

f.add(n);

f.setVisible(true);

}

//обработать уведомдение

public void update(Observable obj, Object arg)

{

repaint();

}

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

public void paint(Graphics g)

{

 

g.setColor(Color.gray);

g.fillOval(100, 100, 604, 604);

g.fillOval(175, 175, 450, 450);

g.setColor(Color.white);

g.fillOval(173, 173, 454, 454);

g.setColor(Color.gray);

g.fillOval(175, 175, 450, 450);

g.fillOval(175, 175, 450, 450);

g.setColor(Color.green);

g.fillOval(245, 245, 300, 300);

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

{

g.setColor(Color.red);

Avto a = (Avto)al.get(i);

g.fillOval(a.X(), a.Y(), 25, 25);

g.setColor(Color.white);

g.drawString(Integer.toString(a.num), a.X() + 5, a.Y() + 15);

 

}

 

boolean crash = false;

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

{

Avto a = (Avto)al.get(i);

 

if (a.life)

for (int j = 0; j < al.size(); j++)

{

Avto a1 = (Avto)al.get(j);

 

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

{

System.out.println("Avto " + a.num + " and " + a1.num + " vrezalis");

crash = true;

a.run = false;

a1.run = false;

try

{

Thread.sleep(400);

}

catch (InterruptedException e) { }

run = true;

a.run = true;

a1.run = true;

 

if (crash)

{

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

{

a.x += 2;

a1.x -= 2;

a.y += 2;

a1.y -= 2;

}

else

{

a1.x += 2;

a.x -= 2;

a1.y += 2;

a.y -= 2;

}

 

System.out.println("Avto " + a.num + " and " + a1.num + " raz'ehalis");

}

 

}

}

 

}

 

}

//выполнить команды для нажатия кнопок

public void actionPerformed(ActionEvent aE)

{

String str = aE.getActionCommand();

if (str.equals("stop"))

{

 

if (run)

{

run = false;

for (int n = 0; n < al.size(); n++)

{

Avto b = (Avto)al.get(n);

b.Suspend();

}

ok.setLabel("Старт");

}

else

if (!run)

{

run = true;

for (int n = 0; n < al.size(); n++)

{

Avto b = (Avto)al.get(n);

b.Resume();

}

ok.setLabel("Стоп");

}

}

if (str.equals("ADD"))

{

num++;

Avto b;

r = new Random();

if (num % 2 == 0)

 

{

Avto a = new Avto(num, 385, 666, r.nextInt(100)+50);

System.out.println("Dobavlen avto " + num);

a.dvig = false;

b = a;

}

else

{

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

System.out.println("Dobavlen avto " + num);

a.dvig = true;

b = a;

}

b.addObserver(this);

n.addItem(Integer.toString(num));

al.add(b);

 

}

if (str.equals("DEL") &&!al.isEmpty())

{

String st = n.getSelectedItem();

n.remove(st);

int sel = Integer.parseInt(st);

for (int n = 0; n < al.size(); n++)

{

Avto b = (Avto)al.get(n);

if (b.num == sel)

{

b.Finish();

al.remove(n);

}

}

}

repaint();

}

 

 

public void itemStateChanged(ItemEvent e)

{

repaint();

}

 

public static void main(String[] args)

{

Autos auto = new Autos();

auto.setSize(750, 750);

auto.setVisible(true);

}

}

 

 







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




Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


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


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

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит...

Психолого-педагогическая характеристика студенческой группы   Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...

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

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

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