用OC语言实现贪吃蛇小游戏

// 首先进行界面布局,初始化颜色
    _headColor = [UIColor blueColor];
    _backColor = [UIColor cyanColor];
    _snakeColor = [UIColor colorWithRed:0.899 green:0.409 blue:0.184 alpha:1.000];
    _foodColor = [UIColor colorWithRed:0.962 green:0.441 blue:1.000 alpha:1.000];
    for (int i = 0; i < 37; i++) {
        for (int j = 0; j < 22; j++) {
            UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20 * j - 13, 20 * i, 20, 20)];
            if (j == 0 || j == 21 || i == 36 || i == 0) {
                view.backgroundColor = [UIColor redColor];
            }
            else {
                view.layer.borderWidth = 0.5;
                view.layer.borderColor = [UIColor blackColor].CGColor;
                view.backgroundColor = _backColor;
                view.tag = 100 * i + j; // 用tag值标记View,前两位代表行数,后两位代表列数
                view.userInteractionEnabled = NO;
            }
            [self addSubview:view];
        }
    }
int a[200]; // 全局变量 用来存储贪吃蛇的tag值
<pre name="code" class="objc">    _direction = 1; // 代表方向,下一个View与当前View的tag值之差
    // 为贪吃蛇赋初始值
    [self.rv viewWithTag:1510].backgroundColor = self.rv.headColor;
    [self.rv viewWithTag:1510].layer.cornerRadius = 10;
    [self.rv viewWithTag:1509].backgroundColor = self.rv.snakeColor;
    [self.rv viewWithTag:1509].layer.cornerRadius = 5;
    a[0] = 1510;
    a[1] = 1509;
    _length = 2; // 代表贪吃蛇的长度
#define flag (arc4random() % 35 + 1) * 100 + (arc4random() % 21 + 1)
     _flag = flag; // 随机生成 事物所在的tag值
    if ([[self.rv viewWithTag:a[0] + _direction].backgroundColor isEqual:self.rv.backColor]) { // 判断食物出现位置是否合理
        [self.rv viewWithTag:_flag].backgroundColor = self.rv.foodColor;
        [self.rv viewWithTag:_flag].layer.cornerRadius = 20;
    }
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(move) userInfo:nil repeats:YES];

- (void)move {
    if ([[self.rv viewWithTag:a[0] + _direction].backgroundColor isEqual:self.rv.backColor]) { // 单纯的移动
        [self.rv viewWithTag:a[0] + _direction].backgroundColor = self.rv.headColor; // 将下一个View变为蛇头
        [self.rv viewWithTag:a[0] + _direction].layer.cornerRadius = 10;
        
        [self.rv viewWithTag:a[0]].backgroundColor = self.rv.snakeColor; // 将原本的蛇头改为蛇身
        [self.rv viewWithTag:a[0]].layer.cornerRadius = 5;
        
        [self.rv viewWithTag:a[_length - 1]].backgroundColor = self.rv.backColor; // 将蛇尾变为背景
        [self.rv viewWithTag:a[_length - 1]].layer.cornerRadius = 0;
        
        for (int i = _length - 1; i > 0; i--) { // 更新数组中存放的tag值
            a[i] = a[i - 1];
        }
        a[0] += _direction;
    }
    else if ([[self.rv viewWithTag:a[0] + _direction].backgroundColor isEqual:self.rv.foodColor]) { // 吃到食物的情况
        [self.rv viewWithTag:a[0] + _direction].backgroundColor = self.rv.headColor;
        [self.rv viewWithTag:a[0] + _direction].layer.cornerRadius = 10;
        
        [self.rv viewWithTag:a[0]].backgroundColor = self.rv.snakeColor;
        [self.rv viewWithTag:a[0]].layer.cornerRadius = 5;
        
        _length++; // 长度增加
        for (int i = _length - 1; i > 0; i--) {
            a[i] = a[i - 1];
        }
        a[0] += _direction;
        
        _flag = flag;
        while (![[self.rv viewWithTag:_flag].backgroundColor isEqual:self.rv.backColor]) {
            _flag = flag;
        }
        [self.rv viewWithTag:_flag].backgroundColor = self.rv.foodColor;
        [self.rv viewWithTag:_flag].layer.cornerRadius = 20;
    }
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值