首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
代写program、代做java编程语言
项目预算:
开发周期:
发布时间:
要求地区:
The Observer Design Pattern
Sample code and document are modified from last version in 2019
Executive Summary
In this lab exercise, you will gain experience in using the Observer design pattern, in this case in
the specific context of Java's implementation of the Observer design pattern in Swing.
To complete this assignment, you're going to need to refactor original code to meet our
requirements.
The Observer Pattern and Swing
The Observer pattern is often used in the development of Graphical User Interfaces (GUIs). When
a user of the interface interacts with some widget in the graphical representation of the
application, various objects within the application may need to be informed of the change so that
they can update the application's internal state. Swing introduces a new term for such clients:
listeners; applications associate (register) listeners with any GUI components the user may
interact with. Any component may have as many registered listeners as the application desires.
Game Rules:
Picture 1:
Picture 2:
Picture 3:
This is a pretty simple game with only three type of balls (red, blue and white).
Before starting the game, user can click ADD button to add red or blue balls. The initial score
of this game is 100. Score would minus 10 while adding a red ball, plus 30 while adding a blue
ball. All red and blue balls can be seen before the game starts. (Picture 1)
When click start button, the game starts while the white ball appears, at the same time all
three buttons in game frame can not be clicked anymore. (Picture 2)
Score will continuously decrease after the game starts. User could control balls through the
keyboard. Only ball that intersects with the white ball can be seen.
The rules of keyboard:
Balls Key to Action
White ball
a: xSpeed becomes -8
d: xSpeed becomes 8
w: ySpeed becomes -8
s: ySpeed becomes 8
Red ball
a: xSpeed becomes a negative random int
d: xSpeed becomes a positive random int
w: ySpeed becomes a negative random int
s: ySpeed becomes a positive random int
Blue ball All keys: change the direction of xSpeed, ySpeed respectively
If user click stop button, the game will terminate. Score will be calculated by the amount of
red and blue balls that white ball has caught. Score would plus 80 with each read ball and
minus 80 with each blue ball. (Picture 3)
Task 1 (40 points)
So this isn't terrible code, and it's actually quite common to see. But it's not at all a real
implementation of the observer pattern. The problem here is that the observed object is basically
observing itself and then dispatching its observations to the clients, instead of letting those clients
take care of their own observations.
First, let's create a new module named observer . Make a copy of the code you have in original
inside of the src folder in observer . Now let's think about the changes we want to make.
To be consistent with the Observer pattern, each of the interested components should register
itself to receive the keyboard’s events. The question is, who is really the "client" in this interaction?
If you answered " The Balls!" you would be exactly correct.
Hints
First, let's refactor our design. Provide a new class diagram depicting a design that allows each of
the interested observers to register themselves to receive the keyboard’s events.
There's a catch, though. I had to refactor the three type of balls into three different extensions of
the same abstract base class Ball (I called them RedBall , WhiteBall and BlueBall if you
want to follow my lead).
So, we can regard the MainPanel class as the implement class of Subject class, and regard
three type of Ball classes ( RedBall , WhiteBall and Blueball ) that extends the Ball as the
observer. So in the “Subject” class, you should design methods like registerObserver() ,
notifyObservers() , removeObserver() and measurementsChanged() (if you need). On the
whole, no matter how you design your project, you should guarantee that, when you press the
keyboard, it will notice the three ball classes and finally the xSpeed and ySpeed of three
type of ball classes would be changed accordingly.
To do
All right, now fix the code to observer pattern to decouple the complex code in public void
keyPressed(KeyEvent keyEvent) . Notice that do not change any rules of the game we have
declared.
Task 2 (60 points)
It actually is. It can be succinctly described by the fact that the WhiteBall doesn't have to know
anything about the existence of the BlueBall and RedBall at all! Fantastic.
Adding New Rules:
To make the game more interesting, adding news rules based on original rules:
When WhiteBall intersect with RedBall and BlueBall , keep changing its speed
RedBall : same as the speed of WhiteBall
BlueBall : change the direction of xSpeed and ySpeed
Hints and To do
According to the rules declared above, we know WhiteBall should notify its location to BlueBall
and RedBall when it moves, then the instance of BlueBall and the RedBall can update their
speed automatically when the WhiteBall is intersected with them.
Could you understand in shifting process, which class can be the subject and which class can be
observer? When to register observer and when to remove observer?
When notice white ball's location to BlueBall and RedBall.
Subject Interface Structure
What to check
Finish all tasks above. And:
Task 1 and 2 should to be implemented in the same module.
Each java file should not have any package declaration
For example, if I were to turn in my current files, my directory would unpack like the following:
Ball.java
BlueBall.java
RedBall.java
WhiteBall.java
Subject.java
ButtonPanel.java
MainPanel.java
MainFrame.java
Main.java
may be other java files (if you think is necessary)
public interface Subject
{
//when create a ball object, it is need to register the ball object into
observer list.
public void registerObserver(T t);
// when restart a new game, it is need to remove all observer from
paintinglist
public void removeObserver(T t);
// when clicked keyboard, it is need to notify all observers to update
their state
public void notifyObservers(char keyChar);
// For task 2: when white ball moved, it is need to notify all observers to
update their state
public void notifyObservers();
// or For task2 public void notifyObservers(int x, int y);
}
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
代做ceng0013 design of a pro...
2024-11-13
代做mech4880 refrigeration a...
2024-11-13
代做mcd1350: media studies a...
2024-11-13
代写fint b338f (autumn 2024)...
2024-11-13
代做engd3000 design of tunab...
2024-11-13
代做n1611 financial economet...
2024-11-13
代做econ 2331: economic and ...
2024-11-13
代做cs770/870 assignment 8代...
2024-11-13
代写amath 481/581 autumn qua...
2024-11-13
代做ccc8013 the process of s...
2024-11-13
代写csit040 – modern comput...
2024-11-13
代写econ 2070: introduc2on t...
2024-11-13
代写cct260, project 2 person...
2024-11-13
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!