貓貓學IOS(十五)UI之曾經大熱的打磚塊小遊戲,ios打磚塊

來源:互聯網
上載者:User

貓貓學IOS(十五)UI之曾經大熱的打磚塊小遊戲,ios打磚塊

貓貓分享,必須精品

素材代碼地址:http://blog.csdn.net/u013357243/article/details/44814523
原文地址:http://blog.csdn.net/u013357243?viewmode=contents

!素材代碼裡面有我寫的全部代碼,注釋齊全,方便學習

先看

代碼
//ps:建立iOS交流學習群:304570962 可以加貓貓QQ:1764541256 或則znycat 讓我們一起努力學習吧。 原文:http://blog.csdn.net/u013357243?viewmode=contents//  ViewController.m//  打磚塊////  Created by liufan on 13-8-17.//  Copyright (c) 2013年 itcast. All rights reserved.//@interface ViewController : UIViewController// 磚塊映像數組@property (strong, nonatomic) IBOutletCollection(UIImageView) NSArray *blockImages;// 小球映像視圖@property (weak, nonatomic) IBOutlet UIImageView *ballImageView;// 擋板映像視圖@property (weak, nonatomic) IBOutlet UIImageView *paddleImageView;// 訊息標籤@property (weak, nonatomic) IBOutlet UILabel *messageLabel;// 點擊螢幕手勢識別@property (strong, nonatomic) IBOutlet UITapGestureRecognizer *tapGesure;// 點按螢幕,開始遊戲- (IBAction)tapScreen:(id)sender;// 拖拽擋板- (IBAction)dragPaddle:(UIPanGestureRecognizer *)sender;@end#import <QuartzCore/QuartzCore.h>@interface ViewController (){    // 小球的初始位置    CGPoint         _originBallCenter;    // 擋板的初始位置    CGPoint         _originPaddleCenter;    // 遊戲時鐘    CADisplayLink   *_gameTimer;    // 小球的速度    CGPoint         _ballVelocity;    // 擋板的水平速度    CGFloat         _paddleVelocityX;}@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    // 記錄小球初始中心點位置    _originBallCenter = _ballImageView.center;    // 記錄擋板初始中心點位置    _originPaddleCenter = _paddleImageView.center;}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}#pragma mark - 碰撞檢測方法// 與螢幕的碰撞檢測- (void)intersectWithScreen{    // 與螢幕上方的碰撞檢測    if (CGRectGetMinY(_ballImageView.frame) <=0) {        _ballVelocity.y = ABS(_ballVelocity.y);    }    // 與螢幕左側的碰撞檢測    if (CGRectGetMinX(_ballImageView.frame) <= 0) {        _ballVelocity.x = ABS(_ballVelocity.x);    }    // 與螢幕右側的碰撞檢測    if (CGRectGetMaxX(_ballImageView.frame) >= self.view.bounds.size.width) {        _ballVelocity.x = -ABS(_ballVelocity.x);    }    // 從螢幕下方掉出,遊戲結束    if (CGRectGetMinY(_ballImageView.frame) >= self.view.bounds.size.height) {        NSLog(@"你輸了!");        // 關閉時鐘        [_gameTimer invalidate];        // 提示使用者輸了        [_messageLabel setHidden:NO];        [_messageLabel setText:@"你輸啦~~~"];        // 啟用點擊螢幕手勢識別        [_tapGesure setEnabled:YES];    }}// 與磚塊的碰撞檢測- (void)intersectWithBlocks{    for (UIImageView *block in _blockImages) {        // 迴圈檢測磚塊是否與小球碰撞,如果發生碰撞,翻轉小球的速度        if (CGRectIntersectsRect(block.frame, _ballImageView.frame) && ![block isHidden]) {            // 把磚塊隱藏起來            [block setHidden:YES];            // 翻轉小球Y方向速度            _ballVelocity.y *= -1;        }    }    // 所有的磚塊都被隱藏了,說明遊戲勝利    BOOL win = YES;    for (UIImageView *block in _blockImages) {        if (![block isHidden]) {            win = NO;            break;        }    }    // 遊戲勝利的處理    if (win) {        // 關閉時鐘        [_gameTimer invalidate];        // 提示使用者輸了        [_messageLabel setHidden:NO];        [_messageLabel setText:@"歐耶~~~"];        // 啟用點擊螢幕手勢識別        [_tapGesure setEnabled:YES];    }}// 與擋板的碰撞檢測- (void)intersectWithPaddle{    if (CGRectIntersectsRect(_paddleImageView.frame, _ballImageView.frame)) {        // 小球Y方向速度翻轉        _ballVelocity.y = -ABS(_ballVelocity.y);        // 增加小球水平方向的速度,簡單修正一下小球的水平速度        _ballVelocity.x += _paddleVelocityX / 120.0;    }}// 螢幕重新整理時執行的方法- (void)step{    NSLog(@"螢幕重新整理了");    [self intersectWithScreen];    [self intersectWithBlocks];    [self intersectWithPaddle];    // 更新小球位置    [_ballImageView setCenter:CGPointMake(_ballImageView.center.x + _ballVelocity.x,                                         _ballImageView.center.y + _ballVelocity.y)];}// 點擊螢幕,開始遊戲- (IBAction)tapScreen:(id)sender{    NSLog(@"點擊螢幕了!");    // 禁用點擊螢幕手勢識別    [_tapGesure setEnabled:NO];    // 訊息標籤隱藏    [_messageLabel setHidden:YES];    // 小球    [_ballImageView setCenter:_originBallCenter];    // 擋板    [_paddleImageView setCenter:_originPaddleCenter];    // 磚塊,把隱藏的磚塊恢複    for (UIImageView *block in _blockImages) {        [block setHidden:NO];    }    // 給小球設定初始速度    _ballVelocity = CGPointMake(0.0, -5.0);    // 定義遊戲時鐘    _gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];    // 把遊戲時鐘添加到主運行迴圈中    [_gameTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];}// 拖拽擋板- (IBAction)dragPaddle:(UIPanGestureRecognizer *)sender{    // 拖拽手指時,改變擋板的位置    // 需要判斷手指是否在拖動    if (UIGestureRecognizerStateChanged == sender.state) {        // 取出手指移動到的位置        CGPoint location = [sender locationInView:self.view];        // 將擋板的水平位置設定為手指的位置        [_paddleImageView setCenter:CGPointMake(location.x, _paddleImageView.center.y)];        // 記錄擋板的水平移動速度        _paddleVelocityX = [sender velocityInView:self.view].x;        NSLog(@"%f", _paddleVelocityX);    } else if (UIGestureRecognizerStateEnded == sender.state) {        // 恢複手指移動速度        _paddleVelocityX = 0;    }}@end
遊戲規則

1-》螢幕上⽅方有四排磚塊
2-》點擊螢幕開始遊戲
3-》遊戲開始時,⼩小球向上⽅方運⾏行
4-》⼩小球與磚塊撞擊可以撞碎磚塊並反彈
5-》⼩小球與螢幕頂部、右側、左側碰撞會反彈
6-》⼩小球與擋板碰撞會反彈
7-》左右移動⼿手指可以挪動擋板
8-》⼩小球從螢幕下⽅方掉出遊戲結束

開發步驟

1-》建立項⽬目
2-》搭建界⾯面
擷取界⾯面對象並監聽螢幕事件(storyboard設定介面,脫線)
3-》代碼實現
點擊螢幕讓⼩小球動起來 (遊戲時鐘,重新整理位置)
磚塊碰撞檢測 (碰撞後隱藏)
拖動擋板改變⼩小球⽅方向 (得到拖拽手勢速度,改變小球速度)
勝負判斷及重設遊戲 (小球的位置中y的最小值有沒有大於螢幕y最大值)

ps:建立iOS交流學習群:304570962
可以加貓貓QQ:1764541256 或則znycat
讓我們一起努力學習吧。
原文:http://blog.csdn.net/u013357243?viewmode=contents

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.