54 lines
1.5 KiB
Scala
54 lines
1.5 KiB
Scala
package magic_squares
|
|
|
|
import hevs.graphics.FunGraphics
|
|
|
|
import java.awt.{Color, Font}
|
|
import javax.swing.SwingConstants
|
|
|
|
trait GraphicsDisplay extends Displayable {
|
|
private var _win: Option[FunGraphics] = None
|
|
private val WIDTH: Int = 400
|
|
private val HEIGHT: Int = 400
|
|
private val MARGIN: Int = 20
|
|
private val FONT: Font = new Font("Arial", Font.PLAIN, 24)
|
|
override def display(g: Grid): Unit = {
|
|
if (_win.isEmpty) {
|
|
_win = Some(new FunGraphics(WIDTH, HEIGHT))
|
|
}
|
|
val win: FunGraphics = _win.get
|
|
win.clear()
|
|
val size: Int = g.length
|
|
|
|
val w: Int = WIDTH - 2 * MARGIN
|
|
val h: Int = HEIGHT - 2 * MARGIN
|
|
val gridSize: Int = math.min(w, h)
|
|
val cellSize: Int = gridSize / size
|
|
val ox: Int = (WIDTH - gridSize) / 2
|
|
val oy: Int = (HEIGHT - gridSize) / 2
|
|
|
|
win.drawRect(ox, oy, gridSize, gridSize)
|
|
for (i: Int <- 1 until size) {
|
|
win.drawLine(ox + cellSize * i, oy, ox + cellSize * i, oy + gridSize)
|
|
win.drawLine(ox, oy + cellSize * i, ox + gridSize, oy + cellSize * i)
|
|
}
|
|
|
|
for (y: Int <- 0 until size) {
|
|
for (x: Int <- 0 until size) {
|
|
val v: Int = g(y)(x)
|
|
if (v != 0) {
|
|
win.drawString(
|
|
(ox + cellSize * (x + 0.5)).toInt,
|
|
(oy + cellSize * (y + 0.5)).toInt,
|
|
v.toString,
|
|
FONT,
|
|
Color.BLACK,
|
|
SwingConstants.CENTER,
|
|
SwingConstants.CENTER
|
|
)
|
|
}
|
|
}
|
|
}
|
|
win.syncGameLogic(5)
|
|
}
|
|
}
|