首頁 > 軟體

iOS實現拼圖小遊戲

2022-03-24 13:01:16

本文範例為大家分享了iOS實現拼圖小遊戲的具體程式碼,供大家參考,具體內容如下

首先找到這8張圖片,還需要一張空白的圖片,自己隨便剪一張吧。

定義三個屬性:button可變陣列,圖片可變陣列,正確順序的圖片陣列。

@property(retain, nonatomic)NSMutableArray *buttonArray;
@property(retain, nonatomic)NSMutableArray *a;
@property(retain, nonatomic)NSArray        *aa;

鋪好拼圖介面

//圖片陣列a,用來儲存每個圖片名稱,並且用於後來的打亂
self.a = [NSMutableArray arrayWithObjects:@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg",@"5.jpg",@"6.jpg",@"7.jpg",@"8.jpg",@"9.jpg", nil];
//備份一個正確順序的圖片陣列,用於判斷遊戲是否過關
self.aa = [NSArray arrayWithArray:self.a];
//重新開始按鈕
UIButton *star = [[UIButton alloc] initWithFrame:CGRectMake(120, 400, 100, 40)];
[star setTitle:@"重新開始" forState:UIControlStateNormal];
[star setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
star.layer.cornerRadius = 6.6f;
star.layer.backgroundColor = [[UIColor colorWithRed:0.922 green:0.925 blue:0.929 alpha:1]CGColor];
//新增點選事件
[star addTarget:self action:@selector(kaishi) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:star];
[star release];

//鋪出9個button
    self.buttonArray = [NSMutableArray array];
    NSInteger count = 0;
    NSInteger wight = 351 / 3;
    NSInteger higth = 351 / 3;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(j * (wight+2) + 10, i * (higth + 2) + 20, wight, higth)];
            button.backgroundColor = [UIColor blackColor];
            //給每個button上圖片
            [button setImage:[UIImage imageNamed:self.a[count]] forState:UIControlStateNormal];
            [self.view addSubview:button];
            //給每個button新增點選事件
            [button addTarget:self action:@selector(change:) forControlEvents:UIControlEventTouchUpInside];
            //把button放入陣列
            [self.buttonArray addObject:button];
            button.tag = count;
            [button release];
            count++;
        }
}

實現button的點選事件

- (void)change:(UIButton *)sender{
    NSInteger flag = 0;
    int p = 0;
    //「9.jpg」是空白的那個,打亂後,得在圖片陣列裡找到所在下標,用flag存在來
    for (NSInteger i = 0; i < 9; i++) {
        if ([self.a[i] isEqualToString:@"9.jpg"]) {
            flag = i;
        }
    }

    //如果所點選的button的上下左右其中有一個是空白圖片的話,就跟空白圖片交換在圖片陣列的位置
    if (sender.tag - flag == 3 || sender.tag - flag == -3 || sender.tag - flag == 1 || sender.tag - flag == -1) {
        [self.a exchangeObjectAtIndex:flag withObjectAtIndex:sender.tag];
    }
    //重新給每個button上圖片
    for (int i = 0; i < 9; i++) {
        [self.buttonArray[i] setImage:[UIImage imageNamed:self.a[i]] forState:UIControlStateNormal];
    }

    //判斷是否拼圖成功,每對應了一張圖片p就加一,如果p最後等於9說明遊戲通關
    for (int i = 0; i < 9 ; i++) {
        if ([self.a[i] isEqualToString:self.aa[i]]) {
            p++;
        }else{
            break;
        }
    }
    if (p == 9) {
        NSLog(@"%d",p);
        UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"恭喜!" message:@"已通關" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];
        [a show];
        [a release];
    }
}

打亂所有圖片

- (void)kaishi{
//產生0到8兩個亂數,通過下標交換圖片陣列中的兩張圖片
    for (int i = 0; i < 10; i++) {
        [self.a exchangeObjectAtIndex:(arc4random() % 9)
                    withObjectAtIndex:(arc4random() % 9)];
    }
    //給每個button上圖片
    for (int i = 0; i < 9; i++) {
        [self.buttonArray[i] setImage:[UIImage imageNamed:self.a[i]] forState:UIControlStateNormal];
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com