summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scala/compass.scala33
-rw-r--r--scala/constructor.scala13
-rw-r--r--scala/employee.scala17
-rw-r--r--scala/for.scala13
-rw-r--r--scala/nice.scala10
-rw-r--r--scala/ring.scala5
-rw-r--r--scala/ttt.scala74
-rw-r--r--scala/while.scala9
8 files changed, 174 insertions, 0 deletions
diff --git a/scala/compass.scala b/scala/compass.scala
new file mode 100644
index 0000000..cd3af78
--- /dev/null
+++ b/scala/compass.scala
@@ -0,0 +1,33 @@
+class Compass {
+ val directions = List("north", "east", "south", "west")
+ var bearing = 0
+
+ print("Initial bearing: ")
+ println(direction)
+
+ def direction() = directions(bearing)
+ def inform(turnDirection : String) {
+ println("Turning " + turnDirection + ". Now bearing " + direction)
+ }
+
+ def turnRight() {
+ bearing = (bearing + 1) % directions.size
+ inform("right")
+ }
+
+ def turnLeft() {
+ bearing = (bearing + (directions.size - 1)) % directions.size
+ inform("left")
+ }
+}
+
+val myCompass = new Compass
+
+myCompass.turnRight
+myCompass.turnRight
+
+myCompass.turnLeft
+myCompass.turnLeft
+myCompass.turnLeft
+myCompass.turnLeft
+myCompass.turnLeft
diff --git a/scala/constructor.scala b/scala/constructor.scala
new file mode 100644
index 0000000..1dd36de
--- /dev/null
+++ b/scala/constructor.scala
@@ -0,0 +1,13 @@
+class Person(firstName : String) {
+ println("Outer constructor")
+
+ def this(firstName : String, lastName : String) {
+ this(firstName)
+ println("Inner constructor")
+ }
+
+ def talk() = println("Hi")
+}
+
+val bob = new Person("Bob")
+val bobTate = new Person("Bob", "Tate")
diff --git a/scala/employee.scala b/scala/employee.scala
new file mode 100644
index 0000000..111b556
--- /dev/null
+++ b/scala/employee.scala
@@ -0,0 +1,17 @@
+class Person(val name: String) {
+ println("Person instanced")
+ def talk(message: String) = println(name + " says " + message)
+ def id(): String = name
+}
+
+class Employee(override val name: String, val number: Int)
+ extends Person(name) {
+ println("Employee instanced")
+ override def talk(message: String) {
+ println(name + " with number " + number + " says " + message)
+ }
+ override def id():String = number.toString
+}
+
+val employee = new Employee("Yoda", 4)
+employee.talk("Extend or extend not. There is no try.")
diff --git a/scala/for.scala b/scala/for.scala
new file mode 100644
index 0000000..50a807b
--- /dev/null
+++ b/scala/for.scala
@@ -0,0 +1,13 @@
+def forLoop {
+ for (i <- 0 until args.length)
+ println(args(i))
+}
+
+def rubyForLoop {
+ args.foreach {arg =>
+ println(arg)
+ }
+}
+
+forLoop
+rubyForLoop
diff --git a/scala/nice.scala b/scala/nice.scala
new file mode 100644
index 0000000..b6591b1
--- /dev/null
+++ b/scala/nice.scala
@@ -0,0 +1,10 @@
+class Person(val name: String)
+
+trait Nice {
+ def greet() = println("Howdily doodily.")
+}
+
+class Character(override val name: String) extends Person(name) with Nice
+
+val flanders = new Character("Ned")
+flanders.greet
diff --git a/scala/ring.scala b/scala/ring.scala
new file mode 100644
index 0000000..442b737
--- /dev/null
+++ b/scala/ring.scala
@@ -0,0 +1,5 @@
+object TrueRing {
+ def rule = println("To rule them all")
+}
+
+TrueRing.rule
diff --git a/scala/ttt.scala b/scala/ttt.scala
new file mode 100644
index 0000000..f7fba1c
--- /dev/null
+++ b/scala/ttt.scala
@@ -0,0 +1,74 @@
+class Board(var layout: Array[Char]) {
+ if (!layout.mkString.matches("[xo ]{9}")) {
+ println("Invalid layout")
+ layout = " ".toArray
+ }
+
+ def this() {
+ this(" ".toArray)
+ }
+
+ def show {
+ println("\n --- ")
+ println("|" + layout.mkString.substring(0,3) + "|")
+ println("|" + layout.mkString.substring(3,6) + "|")
+ println("|" + layout.mkString.substring(6,9) + "|")
+ println(" --- ")
+ }
+
+ def status:Char = {
+ // Horizontal
+ if (layout(0) == layout(1) && layout(1) == layout(2))
+ return layout(0)
+ else if (layout(3) == layout(4) && layout(4) == layout(5))
+ return layout(3)
+ else if (layout(6) == layout(7) && layout(7) == layout(8))
+ return layout(7)
+
+ // Vertical
+ else if (layout(0) == layout(3) && layout(3) == layout(6))
+ return layout(0)
+ else if (layout(1) == layout(4) && layout(4) == layout(7))
+ return layout(1)
+ else if (layout(2) == layout(5) && layout(5) == layout(8))
+ return layout(2)
+
+ // Diagonal
+ else if (layout(0) == layout(4) && layout(4) == layout(8))
+ return layout(0)
+ else if (layout(2) == layout(4) && layout(4) == layout(6))
+ return layout(2)
+
+ return if (layout.contains(' ')) ' ' else 't'
+ }
+
+ def play {
+ var st = status
+ var player = 'x'
+ var input = ""
+
+ reset
+ show
+ while (st == ' ') {
+ print("Player " + player + "> ")
+ input = readLine
+ if (input.matches("[0-8]") && layout(input.toInt) == ' ') {
+ layout(input.toInt) = player
+ show
+ player = if (player == 'x') 'o' else 'x'
+ }
+ st = status
+ }
+ if (status == 't')
+ println("There is a tie!")
+ else
+ println("The winner is " + status + "!")
+ }
+
+ def reset {
+ layout = " ".toArray
+ }
+}
+
+var playBoard = new Board
+playBoard.play
diff --git a/scala/while.scala b/scala/while.scala
new file mode 100644
index 0000000..24b0f71
--- /dev/null
+++ b/scala/while.scala
@@ -0,0 +1,9 @@
+def whileLoop {
+ var i = 1
+ while (i <= 3) {
+ println(i)
+ i += 1
+ }
+}
+
+whileLoop