关闭

灭灯小游戏 UI代码

标签: ui游戏布局视图
300人阅读 评论(1) 收藏 举报
分类:

在这个游戏里要理自己的思路,例如我从下向上写起, 如果你想要最终的结果,首先要考虑如何实现视图,那么就在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
0
0
查看评论

UI 代码 关灯小游戏 demo

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

c++小游戏代码

/*===========================Program Description==========================*/ /*程序名称:game.c */ /*程序目的:打砖块游戏演示 */ /*written by :董大钿 */ /*=======...
  • xulei229
  • xulei229
  • 2015-07-09 13:50
  • 586

C++小游戏源代码

C++小游戏源代码     neirongqian110yRj2B1e2I3qQIZY3GZaTE35ZA1zTM3OZM1gVKZaTH3TZkDeFiBkDqNuJsLhFhJuLiNdJkLjNeJqLsNlB8LjNkBvLfMlAnK9MmIdKiMhItIiCkMsI...
  • u011771757
  • u011771757
  • 2013-08-21 16:44
  • 190780

分享20个Android游戏源码,…

原文地址:分享20个Android游戏源码,希望大家喜欢哈!作者:我算哪根葱 分享20个Android游戏源码,希望大家喜欢哈! http://www.apkbus.com/android-21834-1-1.html Android 疯狂足球游戏源码 http://www.apkb...
  • leansmall
  • leansmall
  • 2014-05-30 10:57
  • 6961

教自己学Python(三)练手小游戏:不要猜中

不要猜中的小游戏背景和朋友闲待着两个人无聊,都想吃苹果又都不想洗,想起玩过的一个酒桌上猜数字的游戏,然后在手机上写了出来,三局两胜输了去洗苹果…… 游戏介绍0到99(包括边界),随机一个数两人(N人也可以)轮流猜测,如果没猜中,新的数将做为边界,一步步缩小可以猜测的范围,直到猜中为止
  • shadowkael
  • shadowkael
  • 2016-07-06 21:43
  • 1993

python趣味入门——写几个常玩的游戏

文档介绍 利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表/元组/字典/流程控制/库函数等等。 环境参数 linux平台,python 3.4。需要在linux中把python 3.4编译一下,这样编写...
  • buptlrw
  • buptlrw
  • 2014-12-14 14:19
  • 15400

java小游戏代码

游戏!对于我们年轻人来说,都是只会玩,哪里想过自己会编啊!学习还是自己的事情啊。。。。
  • u013910357
  • u013910357
  • 2014-06-26 21:14
  • 1680

python小游戏实现代码

用python写的一个小游戏,附上完整实现代码。
  • zhwangkaixuan
  • zhwangkaixuan
  • 2013-08-23 16:45
  • 4060

Objective-C语言编写(OC)打僵尸小游戏源码

学习OC课程的小练习使用到的知识点: 类的创建 对象的初始化 方法的声明和实现 类的继承 方法的调用 编译器:Xcode 7.0作业要求: 1.定义普通僵尸类: 实例变量:僵尸类型、僵⼫总血量、僵尸每次失血量。 实例方法:失血方法,死亡方法 2.定义道具僵尸 实例变量:僵尸总血量、僵尸每次...
  • ghost_lord
  • ghost_lord
  • 2016-01-28 21:48
  • 1294

1000行代码写小游戏(终)

最后献上完整的1000行代码,基本功能已经完成,可以通过配置小怪和矿的位置和大小控制玩家时长和难度: -------------------------------------------------------------------------------------------- -- Ad...
  • zhenyu5211314
  • zhenyu5211314
  • 2016-03-28 16:52
  • 1268
    个人资料
    • 访问:31686次
    • 积分:868
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:10篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论