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{ 0015 0016 var board
TickTackToe.swift:50 private var engine = TickTackGameEngine()TickTackToe.swift:57 engine = TickTackGameEngine()= [["white", "white", "white"], ["white", "white", "white"], ["white", "white", "white"]] 0017 0018 func winner
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] = playerTickTackToe.swift:92 var attrs = ["bgcolor":engine.board[y][x], "width":"100", "height":"100"]TickTackToe.swift:93 if engine.board[y][x] != "white" {() -> 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
TickTackToe.swift:106 let won = engine.winner(): SessionApplication { 0049 0050 private var engine
main.swift:15 SessionSwiftlet( pathPrefix: "/ticktacktoe", appClass: TickTackToeSwiftlet.self, cookieName: "TTT" ),= 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, " " ) ) 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
TickTackToe.swift:57 engine = TickTackGameEngine()TickTackToe.swift:80 engine.board[y][x] = playerTickTackToe.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()