已完成章節(jié)索引
已完成章節(jié)索引
用Swift寫圍棋App-00序
用Swift寫圍棋App-01準(zhǔn)備工作
用Swift寫圍棋App-02建立工程
用Swift寫圍棋App-03StoryBoard
用Swift寫圍棋App-04棋盤
用Swift寫圍棋App-05初識棋譜
用Swift寫圍棋App-06解析器初版
用Swift寫圍棋App-07解析器改進(jìn)
用Swift寫圍棋App-08繪制每一手棋
用Swift寫圍棋App-09分片算法
用Swift寫圍棋App-10氣的算法
用Swift寫圍棋App-11算法改進(jìn)
到現(xiàn)在為止社露,雖然很順利哄陶,但這個(gè)應(yīng)用只是一個(gè)普通的應(yīng)用甘磨,和圍棋一點(diǎn)關(guān)系都沒有 :)
但是梯找,這些工作是必須的震糖。所謂萬事開頭難疏虫,沒有搞定瑣碎的事情打基礎(chǔ)领铐,偉大的想法無法實(shí)現(xiàn)。
接下來荐糜,我們將實(shí)現(xiàn)和圍棋相關(guān)的邏輯巷怜。
第一件事是棋盤。
圍棋盤由19條橫線19條豎線組成暴氏,共361個(gè)交叉點(diǎn)丛版,最外邊的線稱為邊線。為了便于識別棋子的位置偏序,棋盤上劃了九個(gè)點(diǎn),術(shù)語稱做“星”胖替,中央的星點(diǎn)又稱為“天元”研儒。棋盤可分為“角”、“邊”以及“中腹”独令。正式比賽所用棋盤為19×19端朵。
我們需要?jiǎng)?chuàng)建一個(gè)新的 UI組件,將它命名為GobanView
燃箭,它繼承自UIView
冲呢。
要繪制棋盤,我們基本上只需要覆蓋drawRect方法招狸。
在這里敬拓,我們主要要做以下幾件事:
- 繪制背景圖。我們要找一個(gè)木紋的高逼格的看起來有感覺的背景裙戏;
- 繪制19*19的線條乘凸;
- 繪制天元和星等9個(gè)點(diǎn);
邏輯很直接累榜,實(shí)現(xiàn)也很簡單营勤。代碼如下:
class GobanView: UIView {
override func drawRect(rect: CGRect) {
let ctx = UIGraphicsGetCurrentContext()
let rec = CGContextGetClipBoundingBox(ctx)
let w = rec.size.width;
//back ground image
let background = UIImage(named:"board_back")
CGContextDrawImage(ctx, rec, background!.CGImage )
//draw lines
CGContextSetRGBStrokeColor(ctx, 0, 0, 0, 1)
CGContextSetLineWidth(ctx, 0.4)
CGContextBeginPath(ctx)
let space = w/20.0
for(var i=0;i<=18;i++)
{
CGContextMoveToPoint(ctx, (CGFloat(i+1))*space, space)
CGContextAddLineToPoint(ctx, (CGFloat(i+1))*space, w-space)
CGContextStrokePath(ctx)
}
for(var i=0;i<=18;i++)
{
CGContextMoveToPoint(ctx, space,(CGFloat(i+1))*space);
CGContextAddLineToPoint(ctx,w-space, (CGFloat(i+1))*space);
CGContextStrokePath(ctx);
}
//draw labels
// nine dots
for (var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
CGContextBeginPath(ctx);
CGContextAddArc(ctx, (CGFloat(1+3+6*i))*space ,CGFloat(1+3+6*j)*space, 2, 0, CGFloat(2.0*M_PI), 1);
CGContextStrokePath(ctx);
}
}
}
}
然后打開main.stroyboard,在GameViewController
上放一個(gè)UIView
壹罚,將它的類型指定為我們定義的GobanView
葛作。
運(yùn)行一下程序,效果如下:
看起來很好猖凛,將代碼push到 github上
https://github.com/marknote/GoTao