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
- iOS之五子棋
- 初学VC之五子棋
- 控制台小游戏之五子棋
- HTML5小游戏之五子棋
- Qt之五子棋
- 画布之五子棋小游戏
- 编程娱乐之五子棋
- 五子棋之Qt实现
- 小游戏之五子棋
- 五子棋AI算法-之开篇
- 游戏开发入门之五子棋
- 黑红五子棋之人人对弈
- 学习心得之 Android五子棋大战
- HTML5小游戏之五子棋续篇
- java游戏之五子棋解析
- 五子棋
- 五子棋
- 五子棋
- JAVA String.format 方法使用介绍
- 遇到OOM如何处理?
- eclipse上windowsbuilder 安装
- 快速排序防止进入死循环!!
- 线性代数导论1——方程组的几何解释
- iOS之五子棋
- elasticsearch安装
- 有关正则表达式的一些用法总结
- POJ 3283 Card Hands Trie树
- org.springframework.web.context.ConfigurableWebApplicationContext.setId(Ljava/lang/String;)V
- 一些递归程序
- leetcode之Palindrome Number
- 最小生成树
- Ant入门教程之部署Java项目