- •«Технология программирования»
- •Задание
- •Уточнение
- •Разработка программы на 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
Приложение 2. Текст программы на языке Java
package anjava;
import java.awt.*;
import java.io.*;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
class GlavnoeOkno extends Frame implements Runnable
{
Vector<Point> tochki_bolchogo_kruga; // список точек
Vector<Point> tochki_malogo_kruga; // список точек
Thread th;
boolean live;
Vector<Car> mashinki;
Zapravka zapravka;
OknoUpralveniya oknoUpravleniia;
public GlavnoeOkno()
{
setSize(800, 600);
this.setVisible(true);
live = true;
// создание точек, по которым будут двигаться машины
tochki_bolchogo_kruga = new Vector<Point>();
tochki_bolchogo_kruga.add(new Point(105, 206));
tochki_bolchogo_kruga.add(new Point(124, 160));
tochki_bolchogo_kruga.add(new Point(177, 102));
tochki_bolchogo_kruga.add(new Point(286, 69));
tochki_bolchogo_kruga.add(new Point(433, 114));
tochki_bolchogo_kruga.add(new Point(490, 231));
tochki_bolchogo_kruga.add(new Point(457, 381));
tochki_bolchogo_kruga.add(new Point(400, 432));
tochki_bolchogo_kruga.add(new Point(254, 449));
tochki_bolchogo_kruga.add(new Point(173, 418));
tochki_bolchogo_kruga.add(new Point(101, 341));
tochki_bolchogo_kruga.add(new Point(89, 278));
tochki_malogo_kruga = new Vector<Point>();
tochki_malogo_kruga.add(new Point(168, 251));
tochki_malogo_kruga.add(new Point(186, 198));
tochki_malogo_kruga.add(new Point(265, 144));
tochki_malogo_kruga.add(new Point(323, 137));
tochki_malogo_kruga.add(new Point(403, 185));
tochki_malogo_kruga.add(new Point(416, 296));
tochki_malogo_kruga.add(new Point(367, 372));
tochki_malogo_kruga.add(new Point(269, 386));
tochki_malogo_kruga.add(new Point(213, 357));
tochki_malogo_kruga.add(new Point(175, 299));
mashinki = new Vector<Car>();
th = new Thread(this, "repaintThread");
th.start();
zapravka = new Zapravka();
oknoUpravleniia = new OknoUpralveniya();
oknoUpravleniia.SetOkno(this);
oknoUpravleniia.setVisible(true);
}
public void Del()
{
//magazin.addTovar(tovar);
Car boat = mashinki.firstElement();
boat.stop();
mashinki.remove(boat);
}
public void Add()
{
Car boat = new Car(zapravka, String.valueOf(mashinki.size()), tochki_malogo_kruga, tochki_bolchogo_kruga);
mashinki.add(boat);
}
@Override
public void paint(Graphics g)
{
super.paint(g);
zapravka.paint(g);
for(int i = 0; i < mashinki.size(); ++i)
{
mashinki.get(i).paint(g);
}
g.setColor(Color.blue);
for(int i = 0; i < tochki_bolchogo_kruga.size(); ++i)
{
g.fillRect(tochki_bolchogo_kruga.get(i).x, tochki_bolchogo_kruga.get(i).y, 4, 4);
}
g.setColor(Color.cyan);
for(int i = 0; i < tochki_malogo_kruga.size(); ++i)
{
g.fillRect(tochki_malogo_kruga.get(i).x, tochki_malogo_kruga.get(i).y, 4, 4);
}
}
public void run()
{
while (live)
{
this.repaint();
try
{
Thread.sleep(100);
}
catch (InterruptedException ex)
{
live = false;
}
}
}
@Override
public boolean handleEvent(Event evt)
{
if(evt.id == Event.WINDOW_DESTROY)
{
live = false;
setVisible(false);
for(int i = 0; i < mashinki.size(); ++i)
{
mashinki.get(i).stop();
}
System.exit(0);
return true;
}
else
{
return super.handleEvent(evt);
}
}
}
public class Main
{
public static void main(String[] args)
{
//System.out.print("Enter number: ");
GlavnoeOkno onkno = new GlavnoeOkno();
onkno.setVisible(true);
}
}
----------------
package anjava;
import java.awt.*;
import java.util.Observable;
import java.util.Observer;
public class Zapravka
{
Rectangle rectangle;
public Zapravka()
{
rectangle = new Rectangle(50, 241, 30, 40);
}
public Rectangle Rect()
{
return rectangle;
}
public void paint(Graphics g)
{
g.setColor(Color.blue);
g.drawRect(rectangle.X, rectangle.Y, rectangle.Height, rectangle.Width);
}
}
---------------
package anjava;
import java.awt.Point;
public class Rectangle
{
public int X;
public int Y;
public int Height;
public int Width;
public Rectangle(int x, int y, int height, int width)
{
X = x;
Y = y;
Height = height;
Width = width;
}
public Point Location()
{
return new Point(X, Y);
}
}
------------
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)
{
}
}
}