diff options
-rw-r--r-- | scala/compass.scala | 33 | ||||
-rw-r--r-- | scala/constructor.scala | 13 | ||||
-rw-r--r-- | scala/employee.scala | 17 | ||||
-rw-r--r-- | scala/for.scala | 13 | ||||
-rw-r--r-- | scala/nice.scala | 10 | ||||
-rw-r--r-- | scala/ring.scala | 5 | ||||
-rw-r--r-- | scala/ttt.scala | 74 | ||||
-rw-r--r-- | scala/while.scala | 9 |
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 |