设计思路
先自定义一个kuai类继承于UIView,在self里面新建一个%4的随机数然后根据随机数决定方块颜色
新建存放方块的backgroundView类
核心函数一newkuai,
- 用定时器调用新建四个全局View,(self.view1,self.view2,,,)每次新建一个图块就赋值给self.view用来控制他们的行为(下降,左右)
- 定时器每次调用self.view就下降30
- 将视图区域坐标化,新键一个可变字典 dir(存放坐标),可变字典 kuaizu(存放UIView)横坐标0-7纵坐标0-14;比如(0,1,140,141)作为key,初始value为@“1”
- 定义横坐标为i纵坐标为j初始值为0,每次方块移动(j++,左右i++.i--),view停止时要清空i,j,
- 每次调用newkuai时先取出self.view1.2.3.4,下一步位置的坐标(j*10+i+10)的值,if判断如果这个值为2(表示这个位置有方块)或者这些self.view有一个的坐标为420(方块到了底部),那么根据坐标修改对应的值为2;将4个 self.view放入字典kauizu,
- 调用判断函数4次
- (根据随机数)重新创建四个view把它们复制给四个self.view.清空所有i,j.
- self.view就下降30
核心函数二(panduan)判断最后一行,或者所有行
- 获取最后一行8个的值,判断是否全部等于2,如果是遍历kuaizu字典,把所有方块view向下移动30;
- 在此之前遍历坐标字典如果当前块于下一行的这一块值不同,就要把当前付给下一行,因为view移动,下一行块值等于当前行的值。
- 控制函数
- 每种块有四种变变换或者两种;同样采用全局标志位,判断当前这个块是那种块那种变幻形态;每次变幻i.j值都要修改(小心认真修改)。
- 左右控制只需要i++,i--就可以;
- 暂停,控制定时器停止恢复
扩展
- 难度,控制定时器时间
- 分一点视图展示下一个块是什么块;该位置每次块初始化之后就生成全局的随机数,视图根据这个view显示下个图块,下次初始化再根据这个随机数初始化块
- 快速下降;当点击向下按钮时,遍历字典,判断当前位置下面一个个为2的坐标点,得到他的上一行,把块移动到这一行 self.view.frame;j+n;同样在进行改值,赋值,初始化,清空i,j,一系列操作。
- 加动画
//
// backgroundView.h
// erKinf
//
// Created by root1 on 18-1-7.
// Copyright (c) 3018年 root. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "kuai.h"
@interface backgroundView : UIViewController
@property kuai *view1;
@property kuai *view2;
@property kuai *view3;
@property kuai *view4;
@property kuai *changview1;
@property kuai *changview2;
@property kuai *changview3;
@property kuai *changview4;
@property NSTimer *time1;
- (IBAction)changeBtn:(UIButton *)sender;
@property bool *isrich;
@property NSMutableDictionary *dir;
@property int i; //横坐标
@property int j; //纵坐标
@property int view1i; //view1操控view的横坐标
@property int view1j;
@property int view2i;
@property int view2j;
@property int view3i;
@property int view3j;
@property int view4i;
@property int view4j;
@property int bianXing1; //控制方块变形
@property int fangkuaiKind;
- (IBAction)leftBtn:(UIButton *)sender;
- (IBAction)right:(UIButton *)sender;
- (IBAction)pouse:(UIButton *)sender;
@property NSMutableArray *kuaiZu;
@property (weak, nonatomic) IBOutlet UIView *ViewTo;
@property BOOL pauseNum;
@end
//
// backgroundView.m
// erKinf
//
// Created by root1 on 18-1-7.
// Copyright (c) 3018年 root. All rights reserved.
//
#import "backgroundView.h"
#import "kuai.h"
#import "point.h"
@interface backgroundView ()
@end
@implementation backgroundView
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
self.kuaiZu=[[NSMutableArray alloc]init]; //装kuai的数组初始化
[self.view bringSubviewToFront:self.ViewTo]; //遮盖视图移到最上
self.pauseNum=false;
//给空间分块定坐标
self.dir=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"1",@0,@"1",@1,@"1",@2,@"1",@3,@"1",@4,@"1",@5,@"1",@6,@"1",@7,
@"1",@10,@"1",@11,@"1",@12,@"1",@13,@"1",@14,@"1",@15,@"1",@16,@"1",@17,
@"1",@30,@"1",@21,@"1",@22,@"1",@23,@"1",@24,@"1",@25,@"1",@26,@"1",@27,
@"1",@30,@"1",@31,@"1",@32,@"1",@33,@"1",@34,@"1",@35,@"1",@36,@"1",@37,
@"1",@40,@"1",@41,@"1",@42,@"1",@43,@"1",@44,@"1",@45,@"1",@46,@"1",@47,
@"1",@50,@"1",@51,@"1",@52,@"1",@53,@"1",@54,@"1",@55,@"1",@56,@"1",@57,
@"1",@60,@"1",@61,@"1",@62,@"1",@63,@"1",@64,@"1",@65,@"1",@66,@"1",@67,
@"1",@70,@"1",@71,@"1",@72,@"1",@73,@"1",@74,@"1",@75,@"1",@76,@"1",@77,
@"1",@80,@"1",@81,@"1",@82,@"1",@83,@"1",@84,@"1",@85,@"1",@86,@"1",@87,
@"1",@90,@"1",@91,@"1",@92,@"1",@93,@"1",@94,@"1",@95,@"1",@96,@"1",@97,
@"1",@100,@"1",@101,@"1",@102,@"1",@103,@"1",@104,@"1",@105,@"1",@106,@"1",@107,
@"1",@110,@"1",@111,@"1",@112,@"1",@113,@"1",@114,@"1",@115,@"1",@116,@"1",@117,
@"1",@130,@"1",@121,@"1",@122,@"1",@123,@"1",@124,@"1",@125,@"1",@126,@"1",@127,
@"1",@130,@"1",@131,@"1",@132,@"1",@133,@"1",@134,@"1",@135,@"1",@136,@"1",@137,
@"1",@140,@"1",@141,@"1",@142,@"1",@143,@"1",@144,@"1",@145,@"1",@146,@"1",@147,
nil