Created
September 22, 2014 07:41
-
-
Save chrisschreiner/252d8e67ad7a24088543 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import XCPlayground | |
import Framework2 | |
enum PlayerPerspective { | |
case Black, White | |
} | |
class SampleChessBoardView : UIView { | |
var margin: CGFloat = 15 | |
let darkSquareColor = UIColor.blackColor() | |
let lightSquareColor = UIColor.whiteColor() | |
var marginBackgroundColor:UIColor = UIColor.darkGrayColor() | |
let marginTextForegroundColor = UIColor.lightTextColor() | |
var color = PlayerPerspective.White | |
convenience init(frame: CGRect, color:PlayerPerspective) { | |
self.init(frame:frame) | |
self.color = color | |
self.backgroundColor = self.marginBackgroundColor | |
} | |
override init(frame: CGRect) { | |
super.init(frame:frame) | |
self.backgroundColor = self.marginBackgroundColor | |
} | |
required init(coder aDecoder: NSCoder) { | |
super.init(coder: aDecoder) | |
self.backgroundColor = self.marginBackgroundColor | |
} | |
private func drawBoard(remainder: CGRect, _ size: CGFloat) { | |
var r = CGRectMake(margin,0,size,size) | |
var drawingRecipe = UIBezierPath(rect: r) | |
var horizTransform = CGAffineTransformMakeTranslation(size, 0) | |
var backAndVertTransform = CGAffineTransformMakeTranslation(-(size * 8), size) | |
var flip = true //alternating dark and light | |
for loopY in 1...8 { | |
//print ("y: \(loopY) ") | |
for loopX in 1...8 { | |
//print ("x: \(loopX) ") | |
flip = !flip // | |
if flip { | |
darkSquareColor.setFill() | |
} else { | |
lightSquareColor.setFill() | |
} | |
drawingRecipe.fill() | |
drawingRecipe.applyTransform(horizTransform) | |
} | |
flip = !flip | |
drawingRecipe.applyTransform(backAndVertTransform) | |
} | |
var attrs = [NSForegroundColorAttributeName: UIColor.lightTextColor()] | |
var initialVertRect = CGRectMake(0,0,margin,size) | |
for y in 0..<8 { | |
let s = NSAttributedString(string: "\(8-y)",attributes:attrs) | |
let movingRect = CGRectOffset(initialVertRect, CGFloat(0), size * CGFloat(y)) | |
s.drawCenteredInRect(movingRect, padding: 0) | |
} | |
var initialHorizRect = CGRectMake(margin, size * 8,size,margin) | |
for x in 0..<8 { | |
let char = Character(UnicodeScalar(65+x)) | |
let string = NSAttributedString(string: "\(char)",attributes:attrs) | |
let movingRect = CGRectOffset(initialHorizRect, size * CGFloat(x),0) | |
string.drawCenteredInRect(movingRect, padding: 0) | |
} | |
} | |
func drawMargins(size: CGFloat) { | |
} | |
func pos(p:String,_ size:CGFloat) -> CGPoint { | |
var a = Array(p) | |
let s = String(a[0]).unicodeScalars | |
var x = CGFloat(s[s.startIndex].value - 64) | |
var y = CGFloat(String(a[1]).toInt()!) | |
return CGPointMake(--x * size, --y * size) | |
} | |
typealias Position = String | |
override func drawRect(rect: CGRect) { | |
func drawPiece(position:Position,_ piece:String,_ size: CGFloat) { | |
var img = UIImage(named: piece)?.imageWithRenderingMode(.AlwaysOriginal) | |
var r = CGRectMake(margin+pos(position,size).x,pos(position,size).y,size,size) | |
r.inset(dx:2, dy:2) | |
img?.drawInRect(r) | |
} | |
super.drawRect(rect) | |
let (slice,remainder) = bounds.rectsByDividing(margin, fromEdge: CGRectEdge.MinXEdge) | |
let size:CGFloat = remainder.size.width / 8 | |
drawBoard(remainder, size) | |
//drawMargins(size) | |
drawPiece("A1","WK",size) | |
drawPiece("B2","WP",size) | |
drawPiece("C3","WR",size) | |
drawPiece("H8","WQ",size) | |
drawPiece("H7","BK2",size) | |
drawPiece("G7","BK2",size) | |
drawPiece("H5","BlackKing",size) | |
drawPiece("G5","BlackKing",size) | |
drawPiece("A2","WhitePawn",size) | |
drawPiece("B2","WhitePawn",size) | |
drawPiece("C2","WhitePawn",size) | |
drawPiece("D2","WhitePawn",size) | |
drawPiece("E2","WhitePawn",size) | |
drawPiece("F2","WhitePawn",size) | |
drawPiece("G2","WhitePawn",size) | |
drawPiece("H2","WhitePawn",size) | |
drawPiece("A7","BlackPawn",size) | |
drawPiece("B7","BlackPawn",size) | |
drawPiece("C7","BlackPawn",size) | |
drawPiece("D7","BlackPawn",size) | |
drawPiece("E7","BlackPawn",size) | |
drawPiece("F7","BlackPawn",size) | |
drawPiece("G7","BlackPawn",size) | |
drawPiece("H7","BlackPawn",size) | |
} | |
} | |
let r = CGRectMake(0,0,400,400) | |
var view = SampleChessBoardView(frame:r, color: PlayerPerspective.Black) | |
XCPShowView("SampleChessBoardView", view) | |
XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: false) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment