java实验策略模式观察者模式和组合模式Word下载.docx
《java实验策略模式观察者模式和组合模式Word下载.docx》由会员分享,可在线阅读,更多相关《java实验策略模式观察者模式和组合模式Word下载.docx(39页珍藏版)》请在冰豆网上搜索。
地图是由每个方块拼合起来。
地图上有墙等障碍物,也有可以通行的基本图元构成。
请使用组合模式,绘制一个游戏地图,地图的内容自行定义,也可以类似图3形式:
图3游戏地图
4.已知有一个二维数组数据如图1所示,请结合策略模式、观察者模式和组合模式实现一个MVC结构的应用程序。
要求:
如果用户移动滑块,可以修改二维数组的值,并在运行的用户界面中显示出来。
其中,饼状图和柱状图中的区域分布为二位数组每一维的总和。
运行结果如图4和图5所示。
60
50
90
90
40
30
10
20
70
图4数据模型
图5运行结果
三、实验环境
1、PC微机;
2、DOS操作系统或 Windows操作系统;
3、jdk程序集成环境Eclipse
四、源代码、测试结果及UML图
一:
1.UML图
2.源程序代码:
packagecourse.strategy.shape;
importjava.awt.Graphics;
import java.util.ArrayList;
importjava.util.List;
import javax.swing.JPanel;
//绘制所有图形
@SuppressWarnings("
serial"
)
publicclass DrawShapeextendsJPanel{
privateList<
MyShape> shapes;
publicDrawShape(){
shapes=newArrayList<
MyShape>
();
}
publicvoid addShape(MyShapeshape){ //添加图形
if(shape!
=null)shapes.add(shape);
}
publicvoid paintComponent(Graphics g){ﻩ//依次绘制图形
for(MyShapems:
shapes){
ms.draw(g);
System.out.println(ms);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
packagecourse.strategy.shape;
importjava.awt.Graphics;
//形状家族
public abstract class MyShape{
publicabstractfloatarea();
public abstractfloatperimeter();
publicabstractvoiddraw(Graphics g);
package course.strategy.shape;
importjava.awt.Color;
importjava.awt.Graphics;
//圆形
public classMyCircleextendsMyShape{
private staticfinalfloatPI=3.14f;
private intradius;
//定义圆形半径
privateint x,y;
//定义起点(x,y)坐标
publicMyCircle(int x,inty,intradius){ //构造函数
ﻩsuper();
this.x=x;
this.y=y;
ﻩﻩthis.radius=radius;
ﻩ}
ﻩ@Override
publicfloatarea(){ //求面积
ﻩﻩ//TODO自动生成的方法存根
ﻩreturn PI*radius*radius;
ﻩ@Override
publicfloatperimeter(){ //求周长
// TODO自动生成的方法存根
ﻩreturn2*PI*radius;
ﻩ@Override
ﻩpublicString toString(){
ﻩreturn"
MyCircle [radius="
+ radius+",x坐标="+x+"
,y坐标="
+y+"
]"
+
"面积="
+area()+"
周长="+perimeter();
ﻩ@Override
ﻩpublic voiddraw(Graphicsg){ //绘制图形
ﻩﻩ//TODO自动生成的方法存根
ﻩg.setColor(Color.blue);
ﻩg.fillOval(x,y,2*radius,2*radius);
}
package course.strategy.shape;
import java.awt.Color;
importjava.awt.Graphics;
//矩形
publicclassMyRectangleextends MyShape {
ﻩprivate intx,y;
//定义起点(x,y)坐标
ﻩprivateintwidth,height;
//定义矩形的宽和高
publicMyRectangle(int x,inty,intwidth,intheight){
ﻩsuper();
ﻩthis.x=x;
this.y=y;
ﻩthis.width=width;
ﻩthis.height=height;
ﻩ@Override
ﻩpublicfloatarea() {
ﻩ// TODO自动生成的方法存根
ﻩreturnwidth*height;
}
ﻩ@Override
ﻩpublicfloatperimeter(){
ﻩﻩ//TODO自动生成的方法存根
ﻩreturn2*(width+height);
@Override
ﻩpublic StringtoString() {
ﻩreturn "
MyRectangle[x坐标="
+x+ "
, y坐标="+ y+ "
矩形宽="
+width
ﻩﻩ+"
矩形高="
+ height +"
]"
+"
面积="+area()+",周长="
+perimeter();
ﻩ@Override
public voiddraw(Graphicsg) {
ﻩ//TODO自动生成的方法存根
ﻩg.setColor(Color.green);
ﻩg.fillRect(x,y,width, height);
packagecourse.strategy.shape;
importjava.awt.Color;
importjava.awt.Graphics;
//椭圆形
publicclass MyEllipseextendsMyShape{
ﻩprivatestaticfinal floatPI=3.14f;
privateintx,y;
//定义起点(x,y)坐标
ﻩprivate intaLong,bShort;
//定义椭圆的长轴和短轴
ﻩ
publicMyEllipse(int x,inty,intaLong,intbShort) {
ﻩsuper();
ﻩthis.x=x;
this.y =y;
ﻩﻩthis.aLong= aLong;
ﻩﻩthis.bShort =bShort;
@Override
publicfloatarea() {
ﻩ//TODO自动生成的方法存根
ﻩreturn1.0f/4*PI*aLong*bShort;
@Override
publicfloat perimeter(){
ﻩ//TODO 自动生成的方法存根
ﻩreturnPI*bShort+2*(aLong-bShort);
ﻩpublicString toString(){
ﻩreturn"
MyEllipse[x坐标=" +x+"
, y坐标="
+y+"
,长轴="+aLong
ﻩ+"
,短轴="+ bShort+ "
面积="
+area()+",周长="
+perimeter();
@Override
publicvoiddraw(Graphicsg) {
//TODO自动生成的方法存根
g.setColor(Color.red);
ﻩﻩg.fillOval(x,y, aLong, bShort);
packagecourse.strategy.shape;
import java.awt.Color;
importjava.awt.Graphics;
//三角形
publicclass MyTriangleextendsMyShape {
ﻩprivate inta,b,c,n;
private int[] xPoints;
privateint[]yP