灭灯小游戏 UI代码

原创 2015年11月21日 19:13:54

在这个游戏里要理自己的思路,例如我从下向上写起, 如果你想要最终的结果,首先要考虑如何实现视图,那么就在LightView.m 开始布局视图

#import "LightView.h"
#import "LightButton.h"

#define kRow_Number 9   //行数

#define kColumn_Number 8  //列数

#define kButton_Width  40  //button的宽度

#define kButton_Height 40  //button的高度

#define kMargin_Top   100   //距上边界的距离

#define kMargin_Left  25   //距左边界的距离



@implementation LightView
//重写init
- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // Initialization code

        self.lightBtnArr = [NSMutableArray array];

        [self setupTitleView];

        [self setupTitleLabel];

        [self setupLightView];

        [self setupStartButton];

        [self setupRestartButton];

    }

    return self;

}

//初始化titleView

- (void)setupTitleView

{

    UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(30,20,260, 30)];

    aLabel.textColor = [UIColor blackColor];

    aLabel.text =@"Lights the game Endless Edition";

    aLabel.textAlignment =NSTextAlignmentCenter;

    [self addSubview:aLabel];

    [aLabel release];

}

//初始化titleLabel

- (void)setupTitleLabel

{

    self.titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,50,320,40)];

    _titleLabel.textAlignment =NSTextAlignmentCenter;

    _titleLabel.textColor = [UIColor blackColor];

    _titleLabel.font = [UIFont systemFontOfSize:14];

    _titleLabel.text =@"当前亮灯的数量为0";
    _titleLabel.textColor = [UIColor redColor];

    [self  addSubview:_titleLabel];

    [_titleLabel release];

}

//初始化关灯界面

- (void)setupLightView

{

   static CGFloat x =kMargin_Left;

    CGFloat y =kMargin_Top;

    for (int i = 0; i < kRow_Number; i++) {

        for (int j =0; j <kColumn_Number; j++) {
            UIButton *lightBtn = [UIButton  buttonWithType:UIButtonTypeCustom];


            lightBtn.frame = CGRectMake(x, y, kButton_Width, kButton_Height);

            [lightBtn setImage:[UIImage imageNamed:@"1.png"]forState:UIControlStateNormal];
//            [lightBtn setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateSelected];

            lightBtn.tag = 100 + 100 * (i + 1) + j;
            [self addSubview:lightBtn];

            x += kButton_Width;

           lightBtn.selected = NO;

            [self.lightBtnArr  addObject:lightBtn];

        }

        x = 25;

        y += kButton_Height;

    }

}

- (void)setupStartButton

{  self.beginButton = [UIButton buttonWithType:UIButtonTypeSystem];

    _beginButton.backgroundColor = [UIColor greenColor];

    _beginButton.layer.cornerRadius=50;

    _beginButton.frame =CGRectMake(40,kMargin_Top + kButton_Height * kRow_Number +30,100,100);

    [_beginButton setTitle:@"开始游戏" forState:UIControlStateNormal];

    [_beginButton setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];

    [self addSubview:_beginButton];

}

- (void)setupRestartButton

{

    self.restartButton = [UIButton buttonWithType:UIButtonTypeSystem];

    _restartButton.backgroundColor = [UIColor  orangeColor];

    _restartButton.layer.cornerRadius=50;

    _restartButton.frame =CGRectMake(180,kMargin_Top + kButton_Height * kRow_Number +30,100,100);

    [_restartButton setTitle:@"重新开始" forState:UIControlStateNormal];

    [_restartButton setTitleColor:[UIColor  blackColor]forState:UIControlStateNormal];

    [self addSubview:_restartButton];

}

- (void)dealloc

{

    self.restartButton =nil;

    self.beginButton =nil;

    self.lightBtnArr =nil;

    [super dealloc];

}

@end

这里VIew里只负责布局视图
然后在LightViewController.m中去进行实现,首先初始化一个视图与屏幕等大,并定义为根视图。

在根视图中为灯泡添加点击事件。注意这里我之前是把所有的button放在了数组中,这里我们要去数组中去取

 //为灯泡添加点击事件

    for (id n in lv.lightBtnArr) {
        if ([n isKindOfClass:[UIButton class]] ) {
            [n addTarget:self action:@selector(turnOff:) forControlEvents:UIControlEventTouchUpInside];
        }
    }

取到数组中的button之后,对button进行定义点击事件,并实现

@interface ViewController ()
{
    NSInteger _lightOnNumber;
    NSInteger _PassCount;

}

@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    LightView *lv = [[LightView alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
    self.view = lv;
    //为灯泡添加点击事件

    for (id n in lv.lightBtnArr) {
        if ([n isKindOfClass:[UIButton class]] ) {
            [n addTarget:self action:@selector(turnOff:) forControlEvents:UIControlEventTouchUpInside];
        }
    }
//    
//         [lv.lightBtn addTarget:self action:@selector(turnOff:) forControlEvents:UIControlEventTouchUpInside];





    [lv.beginButton addTarget:self action:@selector(beginGame:)forControlEvents:UIControlEventTouchUpInside];

    [lv.restartButton addTarget:self action:@selector(restartGame:)forControlEvents:UIControlEventTouchUpInside];




    [lv release];
    // Do any additional setup after loading the view.
}
//实现turnOff方法
- (void)turnOff:(UIButton *)lightBtn {
    [self turnLightButtonWithTag: lightBtn.tag - 1];
    [self turnLightButtonWithTag: lightBtn.tag + 1];
    [self turnLightButtonWithTag: lightBtn.tag - 100];
    [self turnLightButtonWithTag :lightBtn.tag +100];
    [self turnLightButtonWithTag:lightBtn.tag]; //改变点击灯泡
}
//根据tag 值获取对应的灯泡,修改灯泡的状态
- (void)turnLightButtonWithTag:(NSInteger)tag  {
    LightView *lv = (LightView *)self.view;//
    UIButton *btn = [self.view viewWithTag:tag];
    btn.selected = !btn.selected;
   [btn setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateSelected];//在实现中更改灯泡的图片
    if (btn) {

        _lightOnNumber += btn.selected ?1 : -1;

        lv.titleLabel.text =_lightOnNumber ? [NSString stringWithFormat:@"亮灯的数量为%ld",_lightOnNumber] : @"恭喜你,胜利啦!即将开始下一局...";

        if (!_lightOnNumber) {

            [self performSelector:@selector(beginGame:) withObject:nil afterDelay:2.0];//delay 延迟

        }

    }




}


//开始游戏按钮

- (void)beginGame:(UIButton *)btn1

{

    btn1.enabled = NO;//一旦开始游戏,就关掉开始游戏按钮的交互事件

    //如果当前关没有完成,就不能到下一关.

    if (_lightOnNumber) {

        return;

    }

    _PassCount++;

    LightView *lightView = (LightView *)self.view;

    NSInteger count = [lightView.lightBtnArr count];

    for (int i = 0; i < _PassCount; i++) {

        NSInteger index = arc4random() % count;

        [self turnOff:lightView.lightBtnArr[index]];

    }

}


//重新开始按钮

- (void)restartGame:(UIButton *)btn

{

    _lightOnNumber = 0;

    [self viewDidLoad];

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

UI 代码 关灯小游戏 demo

光灯小游戏 知识点: tag值得运用 思路: 1.新建一个UIViewController视图控制器文件 (用来实现事件) 2.新建一个UIView 类文件(LightView) 用于对整个页面做...
  • MHTios
  • MHTios
  • 2014年09月01日 10:15
  • 1275

利用java基础写的一个简单的小游戏,没有UI界面,只是涉及到类的封装,方法的调用,方便日后复习用

游戏要求:1.有猫和狗两个对象,两者一言不合就开战,猫和狗都有一定的HP; 2.猫和狗都有一定的攻击力; 3.猫和狗谁先发起攻击,是随机的,猫先发起攻击的概率为60%,狗先发起攻击的概率为40%;...

拼图小游戏"ST--拼图"开发篇之开始界面UI布局

首先先寻找思路,看布局需要怎么做 开始界面 开始界面还是很容易搭出来的 开始界面的布局 ...

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

猫猫分享,必须精品素材代码地址:http://blog.csdn.net/u013357243/article/details/44814523 原文地址:http://blog.csdn.net/...

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

猫猫分享,必须精品素材代码地址:http://download.csdn.net/detail/u013357243/8555567 原文地址:http://blog.csdn.net/u01335...

#Objective - C - UI-design - 第四天 -UIKit框架-UIKit-事件手势-刮刮乐小游戏

响应者 iOS中所有能响应事件(触摸、晃动、远程事件)的对象都是响应者。 系统定义了一个抽象的父类UIResponder来表示响应者。 其子类都是响应者。 阻断响应者链 响应者链可以被打断。无法完成检...

Android五子棋小游戏之UI篇

最近一直在学习Android自定义View方面的知识,正好看到一个讲解制作五子棋小游戏的案例,遂学习一番,记录下学习过程,帮助那些有需要的人。 首先放上效果图: 下面我将带领大家一步步完成这个五子...

基于UI的汤姆猫小游戏

  • 2016年01月15日 17:52
  • 14.43MB
  • 下载

自己写的灌田小游戏代码分析(VC6 GDI+)第一章

“ 写游戏”是很多投身程序员行业人士的童年梦想,我也不例外。不过,我最后却不想把自己的爱好变成工作而放弃从事游戏行业,虽然有点可惜;但现在也可以没事偷偷的写个小游戏给自己玩^_^ 废话少说,这次我直接...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:灭灯小游戏 UI代码
举报原因:
原因补充:

(最多只允许输入30个字)