iOS之五子棋

来源:互联网 发布:中国移动活动数据 编辑:程序博客网 时间:2024/06/07 23:19

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



1 0
原创粉丝点击