ГОТОВЫЕ ДИПЛОМНЫЕ РАБОТЫ, КУРСОВЫЕ РАБОТЫ, ДИССЕРТАЦИИ И РЕФЕРАТЫ
Методы хранения и обработки информации | |
Автор | ошибка |
Вуз (город) | МГИУ |
Количество страниц | 7 |
Год сдачи | 2008 |
Стоимость (руб.) | 1500 |
Содержание | нет |
Список литературы | нет |
Выдержка из работы | Согласно варианту задания нам необходимо добавить возможность перемещения лопатки при помощи мыши.
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 < b.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 < l || 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 < b.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!"); } } |