0001    //
0002    //  TickTackToe.swift
0003    //  Yaws
0004    //
0005    //  Created by John Holdsworth on 13/06/2015.
0006    //  Copyright (c) 2015 John Holdsworth. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    #if !os(iOS)
0011    import Dynamo
0012    #endif
0013    
0014    private class TickTackGameEngine
TickTackToe.swift:50
    private var engine = TickTackGameEngine()
TickTackToe.swift:57
            engine = TickTackGameEngine()
{ 0015 0016 var board
TickTackToe.swift:21
        let middle = board[1][1]
TickTackToe.swift:22
        if board[1][0] == middle && middle == board[1][2] ||
TickTackToe.swift:22
        if board[1][0] == middle && middle == board[1][2] ||
TickTackToe.swift:23
            board[0][1] == middle && middle == board[2][1] ||
TickTackToe.swift:23
            board[0][1] == middle && middle == board[2][1] ||
TickTackToe.swift:24
            board[0][0] == middle && middle == board[2][2] ||
TickTackToe.swift:24
            board[0][0] == middle && middle == board[2][2] ||
TickTackToe.swift:25
            board[0][2] == middle && middle == board[2][0] {
TickTackToe.swift:25
            board[0][2] == middle && middle == board[2][0] {
TickTackToe.swift:30
        if board[0][0] == board[0][1] && board[0][1] == board[0][2] ||
TickTackToe.swift:30
        if board[0][0] == board[0][1] && board[0][1] == board[0][2] ||
TickTackToe.swift:30
        if board[0][0] == board[0][1] && board[0][1] == board[0][2] ||
TickTackToe.swift:30
        if board[0][0] == board[0][1] && board[0][1] == board[0][2] ||
TickTackToe.swift:31
            board[0][0] == board[1][0] && board[1][0] == board[2][0] {
TickTackToe.swift:31
            board[0][0] == board[1][0] && board[1][0] == board[2][0] {
TickTackToe.swift:31
            board[0][0] == board[1][0] && board[1][0] == board[2][0] {
TickTackToe.swift:31
            board[0][0] == board[1][0] && board[1][0] == board[2][0] {
TickTackToe.swift:32
                if board[0][0] != "white" {
TickTackToe.swift:33
                    won = board[0][0]
TickTackToe.swift:36
        if board[0][2] == board[1][2] && board[1][2] == board[2][2] ||
TickTackToe.swift:36
        if board[0][2] == board[1][2] && board[1][2] == board[2][2] ||
TickTackToe.swift:36
        if board[0][2] == board[1][2] && board[1][2] == board[2][2] ||
TickTackToe.swift:36
        if board[0][2] == board[1][2] && board[1][2] == board[2][2] ||
TickTackToe.swift:37
            board[2][0] == board[2][1] && board[2][1] == board[2][2] {
TickTackToe.swift:37
            board[2][0] == board[2][1] && board[2][1] == board[2][2] {
TickTackToe.swift:37
            board[2][0] == board[2][1] && board[2][1] == board[2][2] {
TickTackToe.swift:37
            board[2][0] == board[2][1] && board[2][1] == board[2][2] {
TickTackToe.swift:38
                if board[2][2] != "white" {
TickTackToe.swift:39
                    won = board[2][2]
TickTackToe.swift:80
            engine.board[y][x] = player
TickTackToe.swift:92
                var attrs = ["bgcolor":engine.board[y][x], "width":"100", "height":"100"]
TickTackToe.swift:93
                if engine.board[y][x] != "white" {
= [["white", "white", "white"], ["white", "white", "white"], ["white", "white", "white"]] 0017 0018 func winner
TickTackToe.swift:106
        let won = engine.winner()
() -> String? { 0019 var won: String? 0020 0021 let middle = board[1][1] 0022 if board[1][0] == middle && middle == board[1][2] || 0023 board[0][1] == middle && middle == board[2][1] || 0024 board[0][0] == middle && middle == board[2][2] || 0025 board[0][2] == middle && middle == board[2][0] { 0026 if middle != "white" { 0027 won = middle 0028 } 0029 } 0030 if board[0][0] == board[0][1] && board[0][1] == board[0][2] || 0031 board[0][0] == board[1][0] && board[1][0] == board[2][0] { 0032 if board[0][0] != "white" { 0033 won = board[0][0] 0034 } 0035 } 0036 if board[0][2] == board[1][2] && board[1][2] == board[2][2] || 0037 board[2][0] == board[2][1] && board[2][1] == board[2][2] { 0038 if board[2][2] != "white" { 0039 won = board[2][2] 0040 } 0041 } 0042 0043 return won 0044 } 0045 0046 } 0047 0048 public class TickTackToeSwiftlet
main.swift:15
    SessionSwiftlet( pathPrefix: "/ticktacktoe",  appClass: TickTackToeSwiftlet.self, cookieName: "TTT" ),
: SessionApplication { 0049 0050 private var engine
TickTackToe.swift:57
            engine = TickTackGameEngine()
TickTackToe.swift:80
            engine.board[y][x] = player
TickTackToe.swift:92
                var attrs = ["bgcolor":engine.board[y][x], "width":"100", "height":"100"]
TickTackToe.swift:93
                if engine.board[y][x] != "white" {
TickTackToe.swift:106
        let won = engine.winner()
= TickTackGameEngine() 0051 0052 override public func processRequest( out: DynamoHTTPConnection, pathInfo: String, parameters: [String:String], cookies: [String:String] ) { 0053 var cookies = cookies 0054 0055 // reset board and keep scores 0056 if let whoWon = parameters["reset"] { 0057 engine = TickTackGameEngine() 0058 if whoWon != "draw" { 0059 let newCount = cookies[whoWon] ?? "0" 0060 let newValue = "\(Int(newCount)!+1)" 0061 out.setCookie( whoWon, value: newValue, expires: 60 ) 0062 cookies[whoWon] = newValue 0063 } 0064 } 0065 0066 let scores = cookies.keys 0067 .filter( { $0 == "red" || $0 == "green" } ) 0068 .map( { "\($0) wins: \(cookies[$0]!)" } ).joinWithSeparator( ", " ) 0069 0070 out.print( html( nil ) + head( title( "Tick Tack Toe Example" ) + 0071 style( "body, table { font: 10pt Arial; } " + 0072 "table { border: 4px outset; } " + 0073 "td { border: 4px inset; }" ) ) + body( nil ) + 0074 h3( "Tick Tack Toe "+scores ) ) 0075 0076 // make move 0077 let player = parameters["player"] ?? "green" 0078 0079 if let x = parameters["x"]?.toInt(), y = parameters["y"]?.toInt() { 0080 engine.board[y][x] = player 0081 } 0082 0083 // print board 0084 let nextPlayer = player == "green" ? "red" : "green" 0085 var played = 0 0086 0087 out.print( center( nil ) + table( nil ) ) 0088 0089 for y in 0..<3 { 0090 out.print( tr( nil ) ) 0091 for x in 0..<3 { 0092 var attrs = ["bgcolor":engine.board[y][x], "width":"100", "height":"100"] 0093 if engine.board[y][x] != "white" { 0094 played += 1 0095 } else { 0096 attrs["onclick"] = "document.location.replace( '\(pathInfo)?player=\(nextPlayer)&x=\(x)&y=\(y)' );" 0097 } 0098 out.print( td( attrs, "&nbsp;" ) ) 0099 } 0100 out.print( _tr() ) 0101 } 0102 0103 out.print( _table() ) 0104 0105 // check for winner 0106 let won = engine.winner() 0107 0108 if won != nil { 0109 out.print( script( "alert( '\(player) wins' ); document.location.href = '/ticktacktoe?reset=\(won!)';" ) ) 0110 } 0111 else if played == 9 { 0112 out.print( script( "alert( 'It\\'s a draw!' ); document.location.href = '/ticktacktoe?reset=draw';" ) ) 0113 } 0114 0115 out.print( backButton() ) 0116 } 0117 0118 } 0119