aboutsummaryrefslogtreecommitdiff
path: root/Sources/SwiftChessNeo/Player.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sources/SwiftChessNeo/Player.swift')
-rw-r--r--Sources/SwiftChessNeo/Player.swift82
1 files changed, 82 insertions, 0 deletions
diff --git a/Sources/SwiftChessNeo/Player.swift b/Sources/SwiftChessNeo/Player.swift
new file mode 100644
index 0000000..45f3145
--- /dev/null
+++ b/Sources/SwiftChessNeo/Player.swift
@@ -0,0 +1,82 @@
+//
+// Player.swift
+// Sage
+//
+// Copyright 2016-2017 Nikolai Vazquez
+// Modified by SuperGeroy
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/// A chess game player.
+public struct Player: Equatable, CustomStringConvertible {
+
+ /// A player kind.
+ public enum Kind: String, CustomStringConvertible {
+
+ /// Human player kind.
+ case human = "Human"
+
+ /// Computer player kind.
+ case computer = "Computer"
+
+ /// Boolean indicating `self` is a human.
+ public var isHuman: Bool {
+ return self == .human
+ }
+
+ /// Boolean indicating `self` is a computer.
+ public var isComputer: Bool {
+ return self == .computer
+ }
+
+ /// A textual representation of this instance.
+ public var description: String {
+ return rawValue
+ }
+
+ }
+
+ /// The player's kind.
+ public var kind: Kind
+
+ /// The player's name.
+ public var name: String?
+
+ /// The player's elo rating.
+ public var elo: UInt?
+
+ /// A textual representation of this instance.
+ public var description: String {
+ return "Player(kind: \(kind), name: \(name._altDescription), elo: \(elo._altDescription))"
+ }
+
+ /// Create a player with `kind` and `name`.
+ ///
+ /// - parameter kind: The player's kind. Default is human.
+ /// - parameter name: The player's name. Default is `nil`.
+ /// - parameter elo: The player's elo rating. Default is `nil`.
+ public init(kind: Kind = .human, name: String? = nil, elo: UInt? = nil) {
+ self.kind = kind
+ self.name = name
+ self.elo = elo
+ }
+
+}
+
+/// Returns `true` if the players are the same.
+public func == (lhs: Player, rhs: Player) -> Bool {
+ return lhs.kind == rhs.kind
+ && lhs.name == rhs.name
+ && lhs.elo == rhs.elo
+}