Пример готового реферата по предмету: Информатика
Выдержка из текста
Согласно варианту задания нам необходимо добавить возможность перемещения лопатки при помощи мыши.
MovableSprite (подвижный спрайт)- это спрайт, способный изменять свое местоположение. В нашем проекте подвижными спрайтами являются шайба(Puck) и лопатка (Puddle).
По сути, нам надо только модернизировать класс лопатки Puddle.
Как видно из рис.1, на диаграмме вариантов использования, вариант использования «Двигать лопатку» в нашем случае расширяется двумя возможными вариантами: «Двигать лопатку клавиатурой» и «Двигать лопатку мышью».
Рис.1. Диаграмма вариантов использования проекта JBriks
После всех внесенных изменений, диаграмма всех классов, сгенерированная с помощью средства Enterprise Architect на базе исходных java файлов, выглядит вот так:
Рис.2. Диаграмма всех классов проекта JBriks
Рис.3. Диаграмма класса Puddle
Рассмотрим конкретно сделанные изменения в классе Pudle. Основные изменения, которые были сделаны это обработка событий мыши посредством реализации методов интерфейса MouseListener.
Событие объект, который описывает изменение состояния источника (нажатие кнопки, выбор пункта меню, разворачивание, сворачивание окошка, нажатие клавиши и т.д.).
Источник это объект, генерирующий события.
В обработке событий учувствуют 2 объекта: источник (source) и блок прослушивания (listener- интерфейс для перехода конкретного вида события от конкретного компонента)
Источник объект, генерирующий событие.
Блок прослушивания объект, получающий уведомление о возникновении события, но которое он зарегистрирован одним или несколькими источниками, путем вызова одного из его методов (методов блока прослушивания) для приема и обработки этих уведомлений.
Методы обработки событий находятся в пакете java.awt.event.
Событие MouseEvent генерируется, когда объект перетащен мышью (dragged), перемещен (moved ), произошел щелчок (clicked ), нажата (pressed ) или отпущена (released ) кнопка мыши, указатель мыши входит или выходит в/за границы компонента.
Существует семь типов Mouse-событий, которые идентифицируются семью константами:
MOUSE_CLICKED пользователь щелкнул кнопкой мыши;
MOUSE_DRAGGED пользователь перетащил мышь;
MOUSE_ENTERED указатель мыши введен в компонент;
MOUSE_EXITED указатель мыши выведен из компонента;
MOUSE_MOVED мышь передвинута;
MOUSE_PRESSED кнопка мыши нажата;
MOUSE_RELEASED кнопка мыши освобождена.
Модель делегирования событий содержит две части: источник событий и блоки прослушивания событий. Блоки прослушивания событий создаются путем реализации одного или нескольких интерфейсов прослушивания событий. Эти интерфейсы определены в пакете java.awt.event. Когда событие происходит, источник события вызывает соответствующий метод, определенный блоком прослушивания, и передает ему объект события в качестве параметра.
Интерфейс MouseListener определяет пять методов, распознающих события щелчка, входа в границы компонента, выхода из границ, нажатия/ отпускания клавиши мыши.
В нашем случаем мы реально закодировали только два метода:
1) метод mouseClicked, который вызывается при клике мышью;
2) метод mouseMoved, который вызывается при движении мыши.
Также внутри класса Puddle была объявлена дополнительная переменная isMovingByMouse типа bool, для того, чтобы отслеживать, нужно ли двигать лопатку при помощи мыши или нет.
В итоге были сделаны вот такие изменения в программном коде:
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
class Puddle extends MovableSprite implements KeyListener,MouseListener {
static final int LEFT = 37;
static final int RIGHT = 39;
static final int alpha = 10;
boolean isMovingByMouse = false;//статус возможностиуправления лопаткой с помощью мыши
public Puddle(PlayField p, Image pic) {
super(
p,
pic,
new Rectangle(
p.getWidth() / 2,
p.getHeight() — 20,
pic.getWidth(p),
pic.getHeight(p)),
0,
10);
_pf.addKeyListener(this);
_pf.addMouseListener(this);
}
public void move() {
if (_isMoving) {
Rectangle b = _pf.getBoundary();
_pos.x += _v.getSpeedX();
if (_pos.x
_pos.x = b.x;
else if (_pos.x + _pos.width > b.x + b.width)
_pos.x = b.x + b.width — _pos.width;
}
}
public void hitBy(Puck p) {
if ( p.getDirection() == 90 ) {
p.setDirection(270 + alpha);
} else {
int px = p.getBounds().
x + p.getBounds().
width/2;
int l = (int) (_pos.x +_pos.width*(1.0/3));
int r = (int) (_pos.x +_pos.width*(2.0/3));
if ( px r ) {
p.getVelocity().
reverse();
} else {
p.getVelocity().
reverseY();
}
}
}
/* Обработчик нажатия клавиш */
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == LEFT) {
startMoving();
_v.setDirection(180);
} else if (e.getKeyCode() == RIGHT) {
startMoving();
_v.setDirection(0);
}
}
/* Обработчик отпускания клавиш */
public void keyReleased(KeyEvent e) {
stopMoving();
}
public void keyTyped(KeyEvent e) {
;
}
/* Обрабатываем перемещении мыши.
При перемещении мыши, двигаем лопатку, вместе с курсором мыши,
если активизирована возможность движения лопаткой с помощью мыши */
public void mouseMoved (MouseEvent me)//получить событие mouseMoved
{
if(isMovingByMouse)
{
Rectangle b = _pf.getBoundary();
//если хотим управлять лопаткой по левому краю относительно курсора мыши
//_pos.x = me.getX();
//если хотим управлять лопаткой по центру относительно курсора мыши
_pos.x = me.getX()-_pos.width/2;
if (_pos.x
_pos.x = b.x;
else if (_pos.x + _pos.width > b.x + b.width)
_pos.x = b.x + b.width — _pos.width;
}
}
public void mouseExited(MouseEvent me)
{}
public void mousePressed(MouseEvent me)
{}
public void mouseReleased(MouseEvent me)
{}
public void mouseEntered(MouseEvent me)
{}
/*При клике мышью над курсором мыши,
активизируем или деактивизируем возможность перемещения лопатки мышью*/
public void mouseClicked(MouseEvent me)
{
//Если хотим, чтобы возможность управлять курсором мыши активизировалась или деактивировалась
//только при прямом клике мышкой на лопатке
//if(_pos.contains(me.getX(),me.getY()))
// при клике мышкой над лопаткой
if(_pos.contains(me.getX(),_pos.getY()))
isMovingByMouse=!isMovingByMouse;//смена статуса
if(isMovingByMouse)
System.out.println(«Moving by mouse is possible!»);
else
System.out.println(«Moving by mouse is impossible!»);
}
}