接下来的几篇博客将我以前写的一些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,基本思路就是这样了,源代码点击打开链接