-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSnake.swift
86 lines (75 loc) · 2.28 KB
/
Snake.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// Snake.swift
// SwiftSnake
//
// Created by Chris on 6/25/14.
// Copyright (c) 2014 ChrisCombs. All rights reserved.
//
import UIKit
enum Direction {
case Up
case Down
case Left
case Right
}
class Snake : NSObject {
var length = 3
var direction: Direction = Direction.Up
var tailSquares:[WorldSquare] = []
init() {
super.init()
initializeSnakeSpot()
}
func initializeSnakeSpot() {
let firstSquare = WorldSquare()
firstSquare.coordinates = (gridSize/2-1, gridSize/2-1) // Start in the middle
tailSquares += firstSquare
for index in 1..<length {
let (previousX, previousY) = tailSquares[index-1].coordinates
let point = (previousX, previousY+1)
let worldSquare = WorldSquare()
worldSquare.coordinates = point
tailSquares += worldSquare
}
}
func changeDirection(direct:Direction) {
direction = direct
}
func addLength() {
length++
var newSquare = WorldSquare()
newSquare.coordinates = tailSquares[length-2].coordinates
tailSquares += newSquare
}
func moveHead() {
let (previousX, previousY) = tailSquares[0].coordinates
switch direction {
case Direction.Up:
var (x, y) = tailSquares[0].coordinates
y--
tailSquares[0].coordinates = (x,y)
case Direction.Down:
var (x, y) = tailSquares[0].coordinates
y++
tailSquares[0].coordinates = (x,y)
case Direction.Left:
var (x, y) = tailSquares[0].coordinates
x--
tailSquares[0].coordinates = (x,y)
case Direction.Right:
var (x, y) = tailSquares[0].coordinates
x++
tailSquares[0].coordinates = (x,y)
}
calculateTail(previousX, oldY: previousY)
}
func calculateTail(oldX: Int, oldY: Int) {
var oldPlaceholder = tailSquares[1].coordinates
tailSquares[1].coordinates = (oldX, oldY)
for index in 2..<length {
var currentSpot = tailSquares[index].coordinates
tailSquares[index].coordinates = oldPlaceholder
oldPlaceholder = currentSpot
}
}
}