超简单拼图实现

原创 2015年11月18日 08:13:59

1)先设置存放图片的数组,将要添加的图片加入数组 

2)然后通过一层9趟的循环进行3x3的一个简单拼图布局

    for (int i = 0; i < 9; i++) 

//button的宽高是当前屏幕的1/3,位置也是根据每个按钮的宽高进行布局的

        clickButton.frame = CGRectMake((i % 3) * self.view.frame.size.width/3, 100 + self.view.frame.size.width/3 * (i/3), self.view.frame.size.width/3, self.view.frame.size.width/3);

        clickButton.backgroundColor = [UIColor colorWithRed:0.035 green:1.000 blue:0.950 alpha:0.6];     

        //button添加背景图片

        [clickButton setBackgroundImage:[UIImage imageNamed:photosArray[i]] forState:UIControlStateNormal];

        //button添加tag标记

        clickButton.tag = (i / 3)*10 + 11 + i % 3;

3)给button添加点击事件change photo:

4)实现点击事件方法,即:要实现拼图功能,点击的button后,分别判断被点击的button上下左右是否存在设置图片为空的button,如果存在,再进一步判断被点击的按钮是否是边界按钮,即要确认图片的交换是在3x3的拼图界面内进行的(例:if([rightButtonbackgroundImageForState:UIControlStateNormal] == nil && sender.tag % 10 !=3))


代码实例:

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    self.view.backgroundColor = [UIColor colorWithWhite:0.821 alpha:1];

    

    //将要添加的图片放入数组

    NSArray *photosArray = [NSArray arrayWithObjects:@"(6(UL0]}[`8[G2H1))WWSSX.jpg", @")CW{X_T%VQ1P`}IHV9[W{)U.jpg", @"Q_5_C5B08TZ@(OJSVZY3)`Q.jpg", @"G$E%`82J%J{KL4Q3SUS8}RG.jpg", @"9RLCLW[~GPCZZLKOCB~_O56.jpg", @"IB1NS5C4RLNPMS3}R}{Z)H6.jpg", @"D)%~W{6D`5H@{~`PQ9G[9B5.jpg", @"`PDLWV8$U}VQ5`MI3(GZ0LX.jpg", @"", nil];

    //用单层循环布一个9x9的界面

    for (int i = 0; i < 9; i++) {

        

        UIButton *clickButton = [UIButton buttonWithType:UIButtonTypeCustom];


        clickButton.frame = CGRectMake((i % 3) * self.view.frame.size.width/3, 100 + self.view.frame.size.width/3 * (i/3), self.view.frame.size.width/3, self.view.frame.size.width/3);

        clickButton.backgroundColor = [UIColor colorWithRed:0.035 green:1.000 blue:0.950 alpha:0.6];

        

        //button添加背景图片

        [clickButton setBackgroundImage:[UIImage imageNamed:photosArray[i]] forState:UIControlStateNormal];

        //button添加tag标记

        clickButton.tag = (i / 3)*10 + 11 + i % 3;

        //添加点击事件

        [clickButton addTarget:self action:@selector(changePhotos:) forControlEvents:UIControlEventTouchUpInside];

        //加到view视图上,别释放按钮

        [self.view addSubview:clickButton];

        

    }

    

    

}


-(void)changePhotos:(UIButton *)sender{


    UIButton *rightButton = [[UIButton alloc] init];

    rightButton = (UIButton *)[self.view viewWithTag:sender.tag + 1];

    UIButton *leftButton = [[UIButton alloc] init];

    leftButton = (UIButton *)[self.view viewWithTag:sender.tag - 1];

    UIButton *upButton = [[UIButton alloc] init];

    upButton = (UIButton *)[self.view viewWithTag:sender.tag - 10];

    UIButton *downButton = [[UIButton alloc] init];

    downButton = (UIButton *)[self.view viewWithTag:sender.tag + 10];

    

    //点击的按钮

    UIButton *Button = [[UIButton alloc] init];

    Button = (UIButton *)[self.view viewWithTag:sender.tag];

    

    //将要被交换的图片

    UIImage *didImage = [[UIImage alloc] init];

    didImage = [(UIButton *)[self.view viewWithTag:sender.tag] backgroundImageForState:UIControlStateNormal];


    if ([rightButton backgroundImageForState:UIControlStateNormal] == nil && sender.tag % 10 != 3) {

        //进行图片交换

        [rightButton setBackgroundImage:didImage forState:UIControlStateNormal];

        [Button setBackgroundImage:nil forState:UIControlStateNormal];

    }else if([leftButton backgroundImageForState:UIControlStateNormal] == nil && sender.tag % 10 != 1){

        [leftButton setBackgroundImage:didImage forState:UIControlStateNormal];

        [Button setBackgroundImage:nil forState:UIControlStateNormal];

    }else if([upButton backgroundImageForState:UIControlStateNormal]  == nil && sender.tag / 10 != 1){

    

        [upButton setBackgroundImage:didImage forState:UIControlStateNormal];

        [Button setBackgroundImage:nil forState:UIControlStateNormal];


    }else if([downButton backgroundImageForState:UIControlStateNormal]  == nil && sender.tag / 10 != 3){

    

        [downButton setBackgroundImage:didImage forState:UIControlStateNormal];

        [Button setBackgroundImage:nil forState:UIControlStateNormal];

    }

    

}


补充:判断被点击按钮的上下左右是否存在可以交换的按钮是通过每个按钮的标记tag实现的,在进行3x3的布局时,我将第一排的三个按钮标记设为11 12 13,第二排的三个按钮标记设为21 22 23,第三排的三个按钮标记设为31 32 33,这样,当要判断被点击按钮的左边是否为空时,只需要将被点击按钮的tag-1,就能得到左边一个按钮,右边tag+1,上面的按钮tag-10,下面的按钮tag+10,这样设置标记为了,边界按钮的判断,不会出现,像 11 12 13 
                                                                          14 15 16
                                                                          17 18 19
虽然这样的标记,对上下判断没影响,但是,当点击14时,如果要判断左边的按钮,就会出现左边存在按钮,但其实14的左边应该没有按钮,虽然可以加一个条件判断当前的按钮是否是最左边的按钮如果是则不用判断左边是否有按钮,但这样判断左边是否有按钮需要的条件不容易找,




速度挑战 - 2小时完成HTML5拼图小游戏

初学lufylegend.js之日,我用lufylegend.js开发了第一个HTML5小游戏——拼图游戏,还写了篇博文来炫耀一下:HTML5小游戏《智力大拼图》发布,挑战你的思维风暴。不过当时初学游...
  • king16304
  • king16304
  • 2016年08月12日 14:22
  • 698

IDA*算法实现的数字拼图游戏

本篇文章主要受到了“华都烟梦” 同学的启发,看了他的博客和代码之后,我自己研究了很久,后来发现了一种时间上比较能够接受的方法,实现了这个拼图的机器求解。 详细参见:http://blog.csdn.n...
  • bywuu
  • bywuu
  • 2016年11月21日 13:03
  • 291

Unity3d制作简单拼图游戏

本文为原创,如需转载请注明原址:http://blog.csdn.net/cube454517408/article/details/7907247 最近一直在使用Unity,对它有了一些小...
  • cube454517408
  • cube454517408
  • 2012年08月25日 21:16
  • 9497

qt拼图游戏

拼图效果图 #ifndef WIDGET_H #define WIDGET_H #include #include #include class Frame; enum Level{ ...
  • qq_33200959
  • qq_33200959
  • 2017年08月09日 19:48
  • 699

QT版拼图游戏PuzzleGame(源码+可执行程序)

  • 2012年12月14日 19:37
  • 22.99MB
  • 下载

Qt实现推箱子小游戏

学习Qt有一个月了,想要实现一个推箱子的游戏来检验一下自己。今天先设计一下将要完成的具体表现,因为是第一次做,所以设计的稍微简单点,以后逐渐修改。首先要创建菜单栏,分为三个主菜单,第一个主菜单为开始游...
  • q5512049
  • q5512049
  • 2015年08月05日 16:52
  • 2947

从拼图游戏开始(四)_IDA*算法求解Java实现

终于,在学习了完深搜和广搜、Dijkstra、二叉堆和优先队列以及A*算法之后,可以看一下IDA*算法了。因为求解4x4的拼图游戏所要搜素的节点数很大,所以应该采用IDA*算法,而3x3的拼图游戏则可...
  • u011638883
  • u011638883
  • 2013年12月20日 08:11
  • 4165

自动解决智能拼图,A*算法

接上一篇博客 生成可解的智能拼图后(具体方法参见: http://blog.csdn.net/realmagician/article/details/17395035)就要想办法找到自动解决的...
  • realmagician
  • realmagician
  • 2013年12月21日 11:15
  • 4774

拼图算法分析...

From: http://blog.sina.com.cn/s/blog_6a4b57e30100mfch.html 一、题目说明:   (九宫问题)在一个3×3的九宫中有1-8这8个数及一个空格随...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2015年01月08日 17:19
  • 1226

移动拼图游戏(八数码问题)A*版

小时候玩过的移动拼图游戏。有一个3*3的棋盘,其中有0-8这9个数字,0表示空格,其他的数字可以和0交换位置。 求从初始状态 2 3 0 7 1 6 5 8 4 变到目标状态 1 2 3 ...
  • tuzigg123
  • tuzigg123
  • 2015年08月04日 17:06
  • 1301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:超简单拼图实现
举报原因:
原因补充:

(最多只允许输入30个字)