Skip to content

Instantly share code, notes, and snippets.

@chrisschreiner
Created September 22, 2014 07:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisschreiner/252d8e67ad7a24088543 to your computer and use it in GitHub Desktop.
Save chrisschreiner/252d8e67ad7a24088543 to your computer and use it in GitHub Desktop.
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