- •«Технология программирования»
- •Задание
- •Уточнение
- •Разработка программы на c#
- •Программа с точки зрения пользователя. Интерфейс и инструкция.
- •3.2 Программа с точки зрения программиста
- •3.2.1 Все объекты программы и их взаимосвязь
- •3.2.2 Классы
- •1) Класс Car.
- •3.2.3 Потоки и их синхронизация
- •3.2.4 События и их использование
- •3.2.5 Ресурсы
- •3.2.6 Базы данных
- •3.2.7 Удаленный объект и его интерфейс
- •3.2.8 Сервер
- •3.2.9 Клиент
- •3.3 Диаграмма классов
- •3.4 Поэтапная разработка программы
- •3.4.1 Первый этап
- •3.4.2 Второй этап
- •3.4.3 Третий этап
- •3.5 Проблемы, возникшие при разработке проекта
- •4. Разработка программы на языке Java
- •4.1 Отличие от языка c#
- •4.1.1 События
- •4.1.2 Потоки
- •4.1.3 Другие отличия
- •4.2 Проблемы возникшие при разработке
- •5. Используемая литература
- •Приложение 1. Текст программы на языке c#
- •Приложение 2. Текст программы на языке Java
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)
{
}
}
}