Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по дисциплине «Технология прог....doc
Скачиваний:
8
Добавлен:
27.10.2018
Размер:
1.05 Mб
Скачать

4.1.3 Другие отличия

package anjava;

import java.awt.*;

import java.util.Observable;

import java.util.Vector;

public class Car implements Runnable

{

Vector<Point> tochki_bolchogo_kruga; // список точек

Vector<Point> tochki_malogo_kruga; // список точек

Thread th;

boolean live;

Point location;

String name;

Zapravka zapravka;

Color brush;

int fuel;

boolean v_malom_kruge; // признак того, что машинка заняла ресурс малого круга

int chislo_krugov; //счетчик кругов, которые машинка проехала по малому кругу

int tekushaya_tochka; // номер текущей точки

public Car(Zapravka zap, String Name, Vector<Point> tochkimalogokruga, Vector<Point> tochkibolchogokruga )

{

brush = Color.green;

zapravka = zap;

name = Name;

tekushaya_tochka = 2;

tochki_bolchogo_kruga = tochkibolchogokruga;

tochki_malogo_kruga = tochkimalogokruga;

location = (Point)tochki_bolchogo_kruga.get(1).clone();

v_malom_kruge = false;

chislo_krugov = 0;

fuel = 1200;

th = new Thread(this, Name);

live = true;

th.start();

}

public void paint(Graphics g)

{

g.setColor(brush);

g.fillRect(location.x, location.y, 20, 20);

g.drawString(String.valueOf(fuel), location.x, location.y);

}

public void stop()

{

System.out.println("stop");

live = false;

}

public void run()

{

try

{

while (live)

{

if (fuel > 0)

{

--fuel;

}

else

{

while (zapravka.Rect().Location().x != location.x

|| zapravka.Rect().Location().y != location.y)

{

//движение к азс

if (location.x < zapravka.Rect().Location().x)

{

location.x++;

}

if (location.x > zapravka.Rect().Location().x)

{

location.x--;

}

if (location.y < zapravka.Rect().Location().y)

{

location.y++;

}

if (location.y > zapravka.Rect().Location().y)

{

location.y--;

}

Thread.sleep(20); // приостановка потока, чтобы машинка не двигалась моментально

}

synchronized(zapravka)

{

Thread.sleep(2000); // имитируем процесс заправки

fuel = 1200;

}

}

if (!v_malom_kruge) //если не в малом круге

{

if (tekushaya_tochka < tochki_bolchogo_kruga.size()) // пока не пройдены все точки большого круга

{

//движение к следующей точке

if (location.x < tochki_bolchogo_kruga.get(tekushaya_tochka).x)

{

location.x++;

}

if (location.x > tochki_bolchogo_kruga.get(tekushaya_tochka).x)

{

location.x--;

}

if (location.y < tochki_bolchogo_kruga.get(tekushaya_tochka).y)

{

location.y++;

}

if (location.y > tochki_bolchogo_kruga.get(tekushaya_tochka).y)

{

location.y--;

}

if (location.equals(tochki_bolchogo_kruga.get(tekushaya_tochka))) // если машинка дохала до текущей точки

{

tekushaya_tochka ++; // переход к следующей

}

Thread.sleep(30); // приостановка потока, чтобы машинка не двигалась моментально

}

else //если пройдены все точки большого круга

{

tekushaya_tochka = 0; // повтор движения сначала

v_malom_kruge = true;

}

}

else

{ //иначе если машинка движется по малому кругу

if (tekushaya_tochka < tochki_malogo_kruga.size()) // пока не пройдены все точки малого круга

{

//движение к следующей точке

if (location.x < tochki_malogo_kruga.get(tekushaya_tochka).x)

{

location.x++;

}

if (location.x > tochki_malogo_kruga.get(tekushaya_tochka).x)

{

location.x--;

}

if (location.y < tochki_malogo_kruga.get(tekushaya_tochka).y)

{

location.y++;

}

if (location.y > tochki_malogo_kruga.get(tekushaya_tochka).y)

{

location.y--;

}

if (location.equals(tochki_malogo_kruga.get(tekushaya_tochka)))

{

tekushaya_tochka++;

}

Thread.sleep(30); // приостановка потока, чтобы машинка не двигалась моментально

}

else //если пройдены все точки малого круга

{

if (chislo_krugov == 1) // елси машинка прошла 2 раза по крушгу (0 и 1)

{

v_malom_kruge = false; // переход к большому кругу

chislo_krugov = 0;

}

else

{

chislo_krugov++;

}

tekushaya_tochka = 0; // повторное движение по малому кругу

}

}

}

}

catch (Exception e)

{

}

}

}