• 寒假日报day9


    今天呢,换个思路走了,先停一停数据爬虫的工作,赶赶其他作业的进度,

    上次scala呢,写完了第一个实验,今天写了第二个实验,即模拟图形绘制的实验

    不多说,上代码:

     1 package com.ms.firstWork
     2 
     3 object SecondWork {
     4 
     5   def main(args: Array[String]) {
     6     val p = new Point(10, 30)
     7     p.draw;
     8     val line1 = new Line(Point(0, 0), Point(20, 20))
     9     line1.draw
    10     line1.moveTo(Point(5, 5)) //移动到一个新的点
    11     line1.draw
    12     line1.zoom(2) //放大两倍
    13     line1.draw
    14     val cir = new Circle(Point(10, 10), 5)
    15     cir.draw
    16     cir.moveTo(Point(30,20))
    17     cir.draw
    18     cir.zoom(0.5)
    19     cir.draw
    20   }
    21 
    22 }
    23 
    24 
    25 case class Point(var x: Double, var y: Double) extends Drawable {
    26   var Px: Double = x
    27   var Py: Double = y
    28 
    29   def shift(deltaX: Double, deltaY: Double) {
    30     Px += deltaX
    31     Py += deltaY
    32   }
    33 
    34   override def draw(): Unit = {
    35     println("Point:(" + Px + "," + Py + ")")
    36   }
    37 }
    38 
    39 trait Drawable {
    40   def draw() {
    41     println(this.toString)
    42   }
    43 }
    44 
    45 abstract class Shape extends Drawable {
    46   def moveTo(point: Point)
    47 
    48   def zoom(step: Double)
    49 
    50   def draw()
    51 }
    52 
    53 class Line(point1: Point, point2: Point) extends Shape {
    54   override def moveTo(point: Point): Unit = {
    55     point1.shift(point.Px, point.Py)
    56     point2.shift(point.Px, point.Py)
    57   }
    58 
    59   override def zoom(step: Double): Unit = {
    60     var tempx = (point2.Px + point1.Px) / 2 - point1.Px
    61     if (tempx < 0) {
    62       tempx = 0 - tempx
    63     }
    64     var centerx = ((point2.Px + point1.Px) / 2)
    65     var zoomlengthx = (tempx * step)
    66     point1.Px = centerx - zoomlengthx
    67     point2.Px = centerx + zoomlengthx
    68 
    69     var tempy = (point2.Py + point1.Py) / 2 - point1.Py
    70     if (tempy < 0) {
    71       tempy = 0 - tempy
    72     }
    73     var centery = ((point2.Py + point1.Py) / 2)
    74     var zoomlengthy = (tempy * step)
    75     point1.Py = centery - zoomlengthy
    76     point2.Py = centery + zoomlengthy
    77   }
    78 
    79   override def draw(): Unit = {
    80     println("Line:(" + point1.Px + "," + point1.Py + ")--(" + point2.Px + "," + point2.Py + ")")
    81   }
    82 }
    83 
    84 class Circle(point: Point, r: Double) extends Shape {
    85   var R=r
    86   override def moveTo(point: Point): Unit = {
    87     this.point.Px=point.Px
    88     this.point.Py=point.Py
    89   }
    90 
    91   override def zoom(step: Double): Unit = {
    92     R=R*step
    93   }
    94 
    95   override def draw(): Unit = {
    96     println("Circle center:(" + point.Px + "," + point.Py + "),R=" + R)
    97   }
    98 }
    View Code

    运行截图:

     这个比较简单,在菜鸟,w3school上都有教程,我个人推荐w3school因为这个比较新,教程较菜鸟版本比较适应我们,菜鸟有一些过时。

  • 相关阅读:
    抽象类abstract
    final关键字特点
    继承ExtendsFour
    继承(继承中构造方法的关系)
    继承ExtendsTwo-super&this
    继承ExtendsOne
    静态
    构造方法与setXxx方法
    15.8
    15.7
  • 原文地址:https://www.cnblogs.com/msdog/p/12253120.html
Copyright © 2020-2023  润新知