Update all new Tasks
This commit is contained in:
parent
00a190b0a6
commit
91df62d461
5697 changed files with 93386 additions and 804 deletions
53
Task/Draw-a-clock/Scala/draw-a-clock-1.scala
Normal file
53
Task/Draw-a-clock/Scala/draw-a-clock-1.scala
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
import java.util.{ Timer, TimerTask }
|
||||
import java.time.LocalTime
|
||||
import scala.math._
|
||||
|
||||
object Clock extends App {
|
||||
private val (width, heigth) = (80, 35)
|
||||
|
||||
def getGrid(localTime: LocalTime): Array[Array[Char]] = {
|
||||
val (minute, second) = (localTime.getMinute, localTime.getSecond())
|
||||
val grid = Array.fill[Char](heigth, width)(' ')
|
||||
|
||||
def toGridCoord(x: Double, y: Double): (Int, Int) =
|
||||
(floor((y + 1.0) / 2.0 * heigth).toInt, floor((x + 1.0) / 2.0 * width).toInt)
|
||||
|
||||
def makeText(grid: Array[Array[Char]], r: Double, theta: Double, str: String) {
|
||||
val (row, col) = toGridCoord(r * cos(theta), r * sin(theta))
|
||||
(0 until str.length).foreach(i =>
|
||||
if (row >= 0 && row < heigth && col + i >= 0 && col + i < width) grid(row)(col + i) = str(i))
|
||||
}
|
||||
|
||||
def makeCircle(grid: Array[Array[Char]], r: Double, c: Char) {
|
||||
var theta = 0.0
|
||||
while (theta < 2 * Pi) {
|
||||
val (row, col) = toGridCoord(r * cos(theta), r * sin(theta))
|
||||
if (row >= 0 && row < heigth && col >= 0 && col < width) grid(row)(col) = c
|
||||
theta = theta + 0.01
|
||||
}
|
||||
}
|
||||
|
||||
def makeHand(grid: Array[Array[Char]], maxR: Double, theta: Double, c: Char) {
|
||||
var r = 0.0
|
||||
while (r < maxR) {
|
||||
val (row, col) = toGridCoord(r * cos(theta), r * sin(theta))
|
||||
if (row >= 0 && row < heigth && col >= 0 && col < width) grid(row)(col) = c
|
||||
r = r + 0.01
|
||||
}
|
||||
}
|
||||
|
||||
makeCircle(grid, 0.98, '@')
|
||||
makeHand(grid, 0.6, (localTime.getHour() + minute / 60.0 + second / 3600.0) * Pi / 6 - Pi / 2, 'O')
|
||||
makeHand(grid, 0.85, (minute + second / 60.0) * Pi / 30 - Pi / 2, '*')
|
||||
makeHand(grid, 0.90, second * Pi / 30 - Pi / 2, '.')
|
||||
|
||||
(1 to 12).foreach(n => makeText(grid, 0.87, n * Pi / 6 - Pi / 2, n.toString))
|
||||
grid
|
||||
} // def getGrid(
|
||||
|
||||
private val timerTask = new TimerTask {
|
||||
private def printGrid(grid: Array[Array[Char]]) = grid.foreach(row => println(row.mkString))
|
||||
def run() = printGrid(getGrid(LocalTime.now()))
|
||||
}
|
||||
(new Timer).schedule(timerTask, 0, 1000)
|
||||
}
|
||||
50
Task/Draw-a-clock/Scala/draw-a-clock-2.scala
Normal file
50
Task/Draw-a-clock/Scala/draw-a-clock-2.scala
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import java.time.LocalTime
|
||||
import java.awt.{ Color, Graphics }
|
||||
|
||||
/** The Berlin clock as a Java (8.0) applet
|
||||
*/
|
||||
class QDclock extends java.applet.Applet with Runnable {
|
||||
val bclockThread: Thread = new Thread(this, "QDclock")
|
||||
|
||||
override def init() = resize(242, 180) // fixed size, at first... doesn't work...
|
||||
|
||||
override def start() = if (!bclockThread.isAlive()) bclockThread.start()
|
||||
|
||||
def run() {
|
||||
while (true) {
|
||||
repaint()
|
||||
try Thread.sleep(1000) catch { case _: Throwable => sys.exit(-1) }
|
||||
}
|
||||
}
|
||||
|
||||
override def update(g: Graphics) {
|
||||
val now = LocalTime.now
|
||||
|
||||
def booleanToColor(cond: Boolean, colorOn: Color = Color.red): Color =
|
||||
if (cond) colorOn else Color.black
|
||||
|
||||
g.setColor(booleanToColor(now.getSecond() % 2 == 0, Color.yellow))
|
||||
g.fillOval(100, 4, 40, 40)
|
||||
|
||||
val (stu, min) = (now.getHour(), now.getMinute()) match {
|
||||
case (0, 0) => (24, 0)
|
||||
case (hrs, min) => (hrs, min)
|
||||
}
|
||||
|
||||
def drawRectangle(color: Color, rect: (Int, Int, Int, Int)) {
|
||||
g.setColor(color)
|
||||
g.fillRoundRect(rect._1, rect._2, rect._3, rect._4, 4, 4)
|
||||
}
|
||||
|
||||
for (i <- 0 until 4) {
|
||||
drawRectangle(booleanToColor(stu / ((i + 1) * 5) > 0), (i * 60 + 2, 46, 58, 30))
|
||||
drawRectangle(booleanToColor(stu % 5 > i), (i * 60 + 2, 78, 58, 30))
|
||||
drawRectangle(booleanToColor(min % 5 > i, Color.yellow), (i * 60 + 2, 142, 58, 30))
|
||||
}
|
||||
|
||||
for (i <- 0 until 11) {
|
||||
drawRectangle(booleanToColor(min / ((i + 1) * 5) > 0,
|
||||
if (2 to 8 by 3 contains i) Color.red else Color.yellow), (i * 20 + 10, 110, 18, 30))
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue