接下來的幾篇博客將我以前寫的一些demo都掛上來。
第一篇:五子棋
哈哈,當然是單機版的,做着玩
好了接下來講一下思路:
首先要畫棋盤,然後就是畫棋子通過touchBegan調用setNeedDisPlay,然後計算座標,確保棋子落在棋盤上;最後就是判斷輸贏了,首先將整個棋盤作爲一個數組存起來,全部置0,然後落子,白棋爲1,黑棋爲-1,通過米字型搜索,只要找到5顆棋子在一條線上,就結束。
米字搜索核心代碼:
-(void)bianli1:(int)k bianli2:(int)m flag:(int)f{
int h=0;
for(int j=0;j<18;j++)
{
if(a[k][j]==f)
{h++;
if(h>=5) {
if (f==-1) {
[self win:@"白棋贏"];
[self clear];
}
else{
[self win:@"黑棋贏"];
[self clear];
}
NSLog(@"nihao");
}
} else h=0;}
h=0;
for(int i=0;i<15&&i>=0&&i<15;i++)
{
if(a[i][m]==f) {h++; if(h>=5) {
if (f==-1) {
[self win:@"白棋贏"];
[self clear];
}
else{
[self win:@"黑棋贏"];
[self clear];
}
NSLog(@"nihao");
}
} else h=0;}
h=0;
int r = k,t = m;
while(r>0&&t>0){ r--;t--;}
// 從該點按米字形搜索(i++,j++),(i--,j++) 從該直線最左端開始搜索
if(r==0)
{
for(int i=0,j=t;i<15&&j<18&&i>=0&&j>=0;i++,j++)
{ if(a[i][j]==f) {h++; if(h>=5) {
if (f==-1) {
[self win:@"白棋贏"];
[self clear];
}
else{
[self win:@"黑棋贏"];
[self clear];
}
NSLog(@"nihao");
}
} else h=0;}
h=0;
}
if(t==0){
for(int i=r,j=0;i<15&&j<18&&i>=0&&j>=0;i++,j++) { if(a[i][j]==f) {h++; if(h>=5) {
if (f==-1) {
[self win:@"白棋贏"];
[self clear];
}
else{
[self win:@"黑棋贏"];
[self clear];
}
NSLog(@"nihao");
}
} else h=0;}
h=0;
}
r = k; t = m;
while(r<14&&t>0){ r++;t--;}
if(r==14){
for(int i=14,j=t;i<15&&j<18&&i>=0&&j>=0;i--,j++)
{ if(a[i][j]==f)
{h++;
if(h>=5)
{
if (f==-1) {
[self win:@"白棋贏"];
[self clear];
}
else{
[self win:@"黑棋贏"];
[self clear];
}
NSLog(@"nihao");
}
} else h=0;}
h=0;
}
if(t==0){
for(int i=r,j=0;i<15&&j<18&&i>=0&&j>=0;i--,j++) { if(a[i][j]==f) {h++; if(h>=5)
{
if (f==-1) {
[self win:@"白棋贏"];
[self clear];
}
else{
[self win:@"黑棋贏"];
[self clear];
}
NSLog(@"nihao");
}
} else h=0;}
h=0;
}
}
然後每落一次子,就判斷一次是否結束,
核心代碼:
-(void)drawrectContext:(CGContextRef)context{
b1=NO;
CGContextSetLineWidth(context, 10);
// if ([arr count]>6) {
// //[arr removeAllObjects];
// [self clear];
// }
//NSLog(@"%d",arr.count);
for (int j=0; j<[arr count]; j++) {
CGPoint p=CGPointFromString([arr objectAtIndex:j]);
x=((p.x-30)/20+0.5);
y=((p.y-30)/20+0.5);
CGRect rc=CGRectMake(x*20+23, y*20+23, 13, 13);
if (b1) {
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
a[x][y]=1;
[self bianli1:x bianli2:y flag:a[x][y]];
b1=!b1;
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
// CGContextAddEllipseInRect(context, rc);
CGContextFillEllipseInRect(context, rc);
//CGContextFillPath(context);
}
else{
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
a[x][y]=-1;
[self bianli1:x bianli2:y flag:a[x][y]];
b1=!b1;
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
//CGContextAddEllipseInRect(context, rc);
CGContextFillEllipseInRect(context, rc);
//CGContextFillPath(context);
}
CGContextStrokePath(context);
//CGContextFillEllipseInRect(context, rc);
}
}
效果圖:
OK,基本思路就是這樣了,源代碼點擊打開鏈接