猫猫学IOS(十五)UI之曾经大热的打砖块小游戏

猫猫分享,必须精品

素材代码地址: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

### 回答1: 我不太清楚如何用Java来实现躲猫猫小游戏,但是可以提供一些建议:首先,需要创建一个类来表示猫,然后定义一些方法来控制它的移动;其次,可以使用Java的GUI功能来创建游戏的用户界面;最后,可以使用Java的线程类来实现猫的自动移动和游戏的计时。 ### 回答2: 躲猫猫是一款非常经典的小游戏,让我们使用Java来实现吧! 首先,我们需要创建一个游戏窗口,可以使用Java Swing库来实现。在窗口中,我们可以添加一个游戏地图,猫咪和玩家。 游戏地图可以是一个清空的二维数组,其中0表示空格,1表示墙壁,2表示猫咪,3表示玩家。我们可以在构造函数中初始化地图并随机放置猫咪和玩家。 然后,我们可以使用键盘监听器来监听玩家的上下左右移动指令,并在地图上更新玩家的位置。玩家每次移动后,我们需要检查是否成功躲开了猫咪。 在检查躲猫猫的过程中,我们可以使用深度优先搜索算法来判断猫咪是否可以到达玩家的位置。如果玩家和猫咪之间没有路径,那么玩家就成功躲过了猫咪。 最后,我们可以在游戏窗口中显示游戏地图,并根据玩家的移动更新地图上的猫咪和玩家的位置。 实现躲猫猫小游戏可以提高我们的编程能力和逻辑思维能力,同时也很有趣。希望以上的解答对您有帮助! ### 回答3: 躲猫猫小游戏是一款常见的游戏玩法,需要通过编程实现其中的逻辑。在Java中,我们可以通过面向对象的思想来设计和实现这个游戏。 首先,我们需要创建一个Cat类和一个Mouse类。Cat类表示猫的属性和行为,Mouse类表示老鼠的属性和行为。在这两个类中,我们可以定义猫和老鼠的初始位置,以及它们的移动方式。 接着,我们可以创建一个Game类,用于处理游戏的逻辑。在游戏开始时,先创建一个地图,并随机生成猫和老鼠的初始位置。然后,循环进行以下操作:首先,根据输入的方向键来移动猫和老鼠的位置;然后,判断猫是否追到了老鼠或者老鼠成功逃脱,以决定游戏是否结束;最后,根据游戏结果输出相应的消息,并问玩家是否继续游戏。 为了实现游戏界面的交互,我们可以使用Java图形界面库,如Swing或JavaFX。在游戏界面上,我们可以显示地图和猫、老鼠的位置,同时提供方向键控制猫的移动。 最后,为了使游戏更加有趣,我们还可以添加额外的功能,如设置障碍物,增加关卡难度等。 总之,通过使用Java编程语言,我们可以轻松实现躲猫猫小游戏。这个游戏不仅可以让玩家感受到编程的乐趣,还可以锻炼玩家的逻辑思维和操作能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值