猫分享。必须精品

材料代号地址:http://blog.csdn.net/u013357243/article/details/44814523

原文地址:

viewmode=contents">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

版权声明:本文博主原创文章,博客,未经同意不得转载。

猫学习IOS(十五)UI以前的热的打砖块游戏的更多相关文章

  1. 猫学习IOS(五岁以下儿童)UI之360其他下载管理器广场UI

    猫分享.必须精品 下载材料:http://blog.csdn.net/u013357243/article/details/44486651 先看效果 主要是完毕了九宫格UI的搭建 代码 - (voi ...

  2. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  3. 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周

    java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...

  4. 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建

    目录 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建 14.1 RAID概念 14.1.1 RAID几种常见的类型 14.1.2 RAID-0工作原理 14.1.3 RAID-1工 ...

  5. 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录

    风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...

  6. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

  7. 猫学习IOS(四)UI半小时就搞定Tom猫

    阿土 首先对影响 下载项目的源材料: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 以前风靡一时 ...

  8. 猫学习IOS(三)UI纯代码UI——图片浏览器

    猫分享.必须精品 看看效果 主要实现相似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app能够非常easy知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义 ...

  9. Linux学习之十五、基础正规表示法\延伸正规表示法

    原文地址: http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_2.php 基础正规表示法 既然正规表示法是处理字串的一种表示方式,那么对字节排 ...

随机推荐

  1. POJ 1176 Party Lamps (DFS)

    对于一束灯光.提供四种改变彩灯状态(ON<=>OFF)的操作:a.改变全部彩灯状态:b.改变奇数彩灯状态.c.改变偶数彩灯状态:d.改变3k+1号彩灯状态(1,4,7,10...). 给定 ...

  2. 开始的iOS编程之前的准备

    原地址:http://www.appcoda.com/what-you-need-to-begin-ios-programming/ 1.准备一台苹果设备 这段基本是废话,我就不翻译了,IOS开发你懂 ...

  3. Iterator、Iterable接口的使用及详解

    Java集合类库将集合的接口与实现分离.同样的接口,可以有不同的实现. Java集合类的基本接口是Collection接口.而Collection接口必须实现Iterator接口. 以下图表示集合框架 ...

  4. 新版本NDK环境结构(避Cygwin,超快)

    曾经做Android的项目要用到NDK就必需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量... 麻烦到不想说 ...

  5. WPF学习(5)依赖属性

    今天我们来学习WPF一个比较重要的概念:依赖属性.这里推荐大家看看周永恒大哥的文章,讲的确实很不错.我理解的没那么深入,只能发表一下自己的浅见.提到依赖属性,不得不说我们经常使用的传统的.net属性, ...

  6. RandomAccessFile实时读取大文件(转)

    最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据是新增 ...

  7. mahout源码KMeansDriver分析之五CIMapper初探

    接着上篇,继续分析代码.下面就到了MR的循环了,这里MR应该算是比较好理解的,重点是退出循环的条件设置,即如何判断前后两次中心点误差小于给定阈值. 首先,while循环: while (iterati ...

  8. windows下一个,OracleServiceXXX和Oracle 关系实例

    其实,windows下的oracle,在oracle实例启动时,是全然依赖于 window服务中的OracleServiceXXX .这个XXX就是oracle的实例名(注意啊,不是数据库名称,而是实 ...

  9. JBPM4实例教程

    JBPM语言概述:全名  Java Business Process Management  ,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可运行流程语言框架. 是开源 ...

  10. [置顶] think in java interview-高级开发人员面试宝典(二)

    从现在开始,以样题的方式一一列出各种面试题以及点评,考虑到我在前文中说的,对于一些大型的外资型公司,你将会面临全程英语面试,因此我在文章中也会出现许多全英语样题. 这些题目来自于各个真实的公司,公司名 ...