作业4

作业4 - 20分


斐波那契螺旋和H形
(扩大与一个控制器模型-视图)

目的

现在是时候做一个互动节目,在这里用户可以做你的软件的东西。你的目标是生产显示以下形状的方案,斐波纳契螺旋和分形H,在不同级别如下:


级别1图片都是我们的方案中,第一斐波纳契平方(与在第一象限其圆弧)和显示一个H形状的初始状态。

2级斐波纳契螺旋通过加入第二斐波纳契平方(与在第2象限的圆弧)到第一方的左侧,3级通过(在第三象限与圆弧)加入第三斐波纳契方创建下面的前两个正方形。一般来说,创建从级n级N + 1,只需添加下一个N + 1平方斐波纳契。如果斐波纳契正方形n具有在象限q其圆弧的斐波纳契方的n + 1具有其圆弧在象限Q + 1(当然当q = 4时,下一象限应为1)。另一个问题是要在正确的位置添加下一个广场。检查最后添加广场象限应该告诉你下一个方块添加的位置。例如,方1在象限1的圆弧下象限为2,它告诉你方2应该去广场1的左侧。

以创建水平2图像为H,瓦片轰7平方原始H的大小的第三和一个H替换每平方如下所示。 

要创建3级,重复刚才的过程,在第2级。因此得出的7 H的每个人,3级拥有49轰的。

当程序启动时,形状将显示在其初始状态(1级)显示至少有一个方形斐波纳契和一个H.确保它们不重叠。除了这些要求,你可以选择任何大小,颜色,你想要的位置(当然,最好是选择一个大小,使其很容易看到后续的水平。)有关的形状每个鼠标点击,水平将递增或递减1和显示被更新。应该有一个复位按钮,以及:当用户点击复位按钮,显示屏将回到原来的状态。最后,目前的电平数量也应显示和更新用户与程序(见使用以下TextViewer的)工作。

上会有水平用户可以显示的数目的上限。该程序将停止增加螺旋是否熄灭屏幕,或者与相邻形状重叠(也就是找到你的框架的尺寸允许的最大Fibonacci数和停止,当你达到这个数字增加了恶性循环。)程序将停止分裂的H形,如果新H的的尺寸太小(例如<25像素)。一个对话框会弹出,告诉他们已经达到最高级别的用户。

一个对话框还应该弹出如果用户想要以降低低于1的水平。

履行

改变形状接口,AbstractShape,FibonacciSquare和HShape类
(虽然这些变化将要由FibonacciSquare和HShape类使用,有的在外形界面或AbstractShape分类-即继承的东西属于一次。)

为了模拟斐波纳契数列螺旋,我们可以认为每平方斐波纳契为n的作为是它前面的广场N-1的孩子。例如,在3级,1平方米有一个子= 2平方广场有2有一个孩子= 3平方米和方3没有任何孩子。

对于H形,一个部门可以认为每^ h组成的形状创造的7小H公司覆盖的。这是我们能想到的HShape已经有7个孩子。尽管斐波纳契数列螺旋和H的建设是不同的,我们可以用同样的方法为,并在其共同AbstractShape基类编写一些代码。

在AbstractShape类中添加图形对象的数组来存储那些孩子形状Shape对象。由于该阵列将大小为1的要斐波纳契平方和为一个H形状尺寸7的,它不能在AbstractShape的构造初始化。使受保护的数组的知名度和初始化在派生类(FibonacciSquare和HShape)的构造函数的数组。孩子数组的元素是空进行初步分。当被创建2级,阵列填充有实际的形状。对于3级,它是在2级加的形状,填充等的阵列

在AbstractShape类,写入到一个电平(例如addLevel())加入的形状的方法。它将通过初始化儿童的数组的元素的最后电流电平操作。这种方法将通过模型时由控制器指示添加新的水平被调用。由于该模型只有顶端水平形状的基准,该方法将重复,以获得对由鼠标点击选择的形状的最后一级。通过这样做使用递归(不使用任何循环,除非循环遍历当前平儿的数组中的元素。)该方法的基本情况将得到当孩子的数组为空。通过调用一个方法填补孩子们的阵列(如createChildren())在界面形状和宣布,以FibonacciSquare和HShape实施。动态绑定会自动选择正确的实现!当然,阵列应充满仅当螺旋没有得到过大,或者如果H公司不要太小。返回一个布尔值的模型告诉它,如果可以增加一个新的水平。布尔值可以被中继到控制器来告诉它,如果操作成功。如果一个新的水平无法添加,则控制器显示一个消息框向用户解释为什么(如“大小限制已经达到。”)

在AbstractShape类,写去除形状的水平(例如removeLevel())的方法。它将被设置为null儿童的阵列的最后电流水平的元件这样做。这种方法将通过模型时由控制器指示删除级别被调用。违背addLevel方法,removeLevel不会迭代到所选形状的最后一级。将迭代的最后级之前的级。这是因为,以除去最后一级中,该方法需要设置为空引用该最后级的儿童的数组的元素。至于addLevel,通过迭代使用递归(即不使用任何循环,除了遍历儿童的阵列中的电流电平中的元素。)如果所显示的形状为第1级,电平可以' T为除去。在这种情况下,返回false到模型。在其他情况下,返回true到模型。布尔值将被传递到所述控制器,这样,如果一个水平无法移除它可以显示消息框。

在AbstractShape,如果您还没有家庭作业3这样做,为的形状的toString方法。它应该得到的形状的类型(FibonacciSquare或HShape通过调用的getClass()),形状,颜色和其电流电平的坐标。

在FibonacciSquare和HShape,修改draw方法。重写此方法时递归会非常方便。需要注意的是各级绘制为斐波纳契数列螺旋,而只有最后一个级别绘制一个HShape。

你并不需要为一个形状的任何深拷贝方法。如果编写一个深拷贝方法作业2,可以删除方法。

添加您觉得需要为你实现任何其他方法。

更改模型

该模型仅需要跟踪,因为这都加大了水平都存储在初始形状内时添加的形状最初创建形状。只需添加允许模型添加或删除一个水平上了一个形状的方法。

也没有必要返回将消息发送到需要的形状列表视图时形状列表的深层副本。 换句话说,你可能只是返回参考了模型中存储的形状列表返回形状的列表给视图中的方法。

 

调节器

建立你的控制器类(ES)如上所述来实现用户界面。控制器应处理用户的鼠标点击,并发送相应的信息到模型(即增加或在点击的位置,减少形状的水平)。我们会说,用鼠标点击图形上,如果这是它的一半JFrame的范围内(假设你的应用程序显示在画面的每个半只的形状。)显示两个JradioButton将(查看有关一个JRadioButton和的ButtonGroup上的Oracle信息网站),让一个水平增加和减少的水平之间的用户选择。你应该有一个具有控制器功能至少有一个公共类(如ButtonListener中的一些在课堂上完成的例子。使用匿名内部类不要太过火。)对于对话框,看到的JO​​ptionPane类。它有一些有用的静态方法。

文本查看器

创建实现DrawingView它是一个基于所有文本的新类。通过形状的toString方法给出它应该在终端窗口打印有关形状的信息。只有当模型变化这一观点应该被刷新。例如,任何形状的外侧的鼠标点击,不应再次打印形状列表。

与主要方法类

在这里你把所有的一起上课模型,视图和控制器。这是也可以创建两个单选按钮和复位按钮的类。使用一个JButton的复位按钮。

忠告

  • 更改增量,沿着他们的方式进行测试。此外,画画,做伪设计,画UML图,计划,规划,计划。
  • 使模型,视图和控制器之间的完全分离。 
  • 请确保您抛出适当的例外需要的地方。
  • 所有文件,你写的方法(使用javadoc的约定:,@param,@return,@throw,等...)

 

书面报告

  1. 策划和运作:什么是你的程序呢?描述的主要功能。如果你与伴侣的工作,你是怎么划分责任?
  2. 实施:你的程序是如何组织的?有什么主要课程?如何类互动?画一个类图。
  3. 给出的递归算法解释清楚的水平增加和删除的形状的水平。
  4. 测试:你是如何测试你的代码?你遇到什么样的错误呢?什么可行,什么不可行?是否有代码中的任何尚未解决的问题?
  5. 评价这个项目:那你学到了什么?是值得努力吗?这可能包括的东西,你了解了规范和接口,设计问题,Java语言或库的问题,调试等。

打开你与导通在页面上你的java文件一起PDF文件报告。

 

清单:这项任务的要点摘要

虽然你可以(而且很可能会)有更多的功能,你的项目应该有下面列出的所有要点
  • 接口Shape:添加/删除级别的方法,没有深厚的复制方法。

  • AbstractShape类:为数组存储此Shape的孩子,addLevel,removeLevel的实现(递归两个),一个的toString保护实例字段(X,Y,颜色和水平。)

  • FibonacciSquare / HShape:修改平局,使其正确绘制水平,实现createChildren。

  • DrawingModel:添加/删除级别的方法,复位方法,没有深拷贝代码。

  • 控制器(新类):MouseListener的和可能的ActionListener(用于按钮)。

  • 文本浏览器(新类):打印形状到System.out的列表。

  • MainClass:添加按钮,一个控制器和一个文本视图。至少有一个方形斐波纳契和幸福设在该框架中的H形启动应用程序。

  • 报告:提交报告为PDF文件。

 

祝你好运,尽早开始!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值