iOS之俄罗斯方块

设计思路


先自定义一个kuai类继承于UIView,在self里面新建一个%4的随机数然后根据随机数决定方块颜色

新建存放方块的backgroundView类

核心函数一newkuai,

  1. 用定时器调用新建四个全局View,(self.view1,self.view2,,,)每次新建一个图块就赋值给self.view用来控制他们的行为(下降,左右)
  2. 定时器每次调用self.view就下降30
  3. 将视图区域坐标化,新键一个可变字典 dir(存放坐标),可变字典  kuaizu(存放UIView)横坐标0-7纵坐标0-14;比如(0,1,140,141)作为key,初始value为@“1”
  4. 定义横坐标为i纵坐标为j初始值为0,每次方块移动(j++,左右i++.i--),view停止时要清空i,j,
  5. 每次调用newkuai时先取出self.view1.2.3.4,下一步位置的坐标(j*10+i+10)的值,if判断如果这个值为2(表示这个位置有方块)或者这些self.view有一个的坐标为420(方块到了底部),那么根据坐标修改对应的值为2;将4个 self.view放入字典kauizu,
  6. 调用判断函数4次
  7. (根据随机数)重新创建四个view把它们复制给四个self.view.清空所有i,j.
  8. self.view就下降30

核心函数二(panduan)判断最后一行,或者所有行

  1. 获取最后一行8个的值,判断是否全部等于2,如果是遍历kuaizu字典,把所有方块view向下移动30;
  2. 在此之前遍历坐标字典如果当前块于下一行的这一块值不同,就要把当前付给下一行,因为view移动,下一行块值等于当前行的值。
  3. 控制函数
  4. 每种块有四种变变换或者两种;同样采用全局标志位,判断当前这个块是那种块那种变幻形态;每次变幻i.j值都要修改(小心认真修改)。
  5. 左右控制只需要i++,i--就可以;
  6. 暂停,控制定时器停止恢复

扩展

  1. 难度,控制定时器时间
  2. 分一点视图展示下一个块是什么块;该位置每次块初始化之后就生成全局的随机数,视图根据这个view显示下个图块,下次初始化再根据这个随机数初始化块
  3. 快速下降;当点击向下按钮时,遍历字典,判断当前位置下面一个个为2的坐标点,得到他的上一行,把块移动到这一行 self.view.frame;j+n;同样在进行改值,赋值,初始化,清空i,j,一系列操作。
  4. 加动画

//
//  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
           
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值