iOS之五子棋

接下來的幾篇博客將我以前寫的一些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,基本思路就是這樣了,源代碼點擊打開鏈接



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章