编程实现贪吃蛇游戏界面的主要代码

- (void)viewDidLoad

{

    [super viewDidLoad];

    allsheshen=[[NSMutableArray alloc ] init];

    if (time==0)

    {

        time=1;                          

    }

    printf("time=%f",time);

    //allsheshen=[[NSMutableArray alloc] init];

    // Do any additional setup after loading the view from its nib.

    tim=[NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(moveSnake:) userInfo:nil repeats:YES]; //实现蛇身的动画移动 通过time来控制移动速度

//    [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(run) userInfo:nil repeats:YES];

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

   

    // Dispose of any resources that can be recreated.

}

//获得难度对应的时间

-(void)gettime:(int)nand;        //设置难度的时间,难度增加蛇移动的速度增快

{ NSLog(@"HUOLAI =======%d",nand);

    switch (nand)

    {

        case 1:

            time=1;

            break;

        case 2:

            time=0.9;

            break;

        case 3:

            time=0.8;

            break;

        case 4:

            time=0.7;

            break;

        case 5:

            time=0.6;

            break;

        case 6:

            time=0.5;

            break;

        case 7:

            time=0.4;

            break;

        case 8:

            time=0.3;

            break;

        case 9:

            time=0.2;

            break;

        case 10:

            time=0.1;

            break;

        default:

            break;

    }

    [tim invalidate];//让原来的失效 执行下面新的

    tim=[NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(moveSnake:) userInfo:nil repeats:YES];

}

-(IBAction)backToMenu:(id)sender{

    [AppDelegate switchViewController:0]; //跳转主要界面

    state=1;

}

- (IBAction)move:(id)sender {            //判断蛇的移动方向

    UIButton * nowbt=sender;

    switch (nowbt.tag)

    {

        case 100:

            a=1;

            break;

        case 101:

            a=2;

            break;

        case 102:

            a=3;

            break;

        case 103:

            a=4;

            break;

        default:

            break;

    }

    

    

}

//撞墙或者撞到自己

-(void)over

{

    [AppDelegate switchViewController:5];

    UIAlertView * aa=[[UIAlertView alloc]initWithTitle:@"Game Over" message:labfenshu.text delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

    [aa show];

    state=1;

    labfenshu.text=@"0";

    score=0;

    //结束就把身体清除

    UISnakeBody * now;

    for ( int i=[allsheshen count]-1;i>=0;i--)

    {

        now=[allsheshen objectAtIndex:i];

        [now removeFromSuperview];

    }

    //初始化身体数组

    allsheshen=[[NSMutableArray alloc] init];

}

//随机产生坐标

-(void)zuobiao{

    x=rand()%15*20+10;

    y=rand()%22*20+10;

}

//吃到食物

-(void)eat{

    score+=100;

    labfenshu.text=[[NSString alloc ]initWithFormat:@"分数%d",score ];

    labdian.center=CGPointMake(x, y);

    //添加一个节点到m_allBody的尾部

    UISnakeBody * labBody=[[UISnakeBody alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];

    labBody.backgroundColor=[UIColor yellowColor];

    UISnakeBody * lastBody=[[UISnakeBody alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];//蛇尾部

    if(allsheshen.count==0)

    {

        lastBody.center=CGPointMake(ax, ay);

        labBody.dir=a;//蛇头的方向

    }

    else

    {

        lastBody=allsheshen.lastObject;

        labBody.dir=lastBody.dir;//等于最后一个节点的方向

        switch (labBody.dir) {

            case 1://up

                labBody.center=CGPointMake(lastBody.center.x,lastBody.center.y+20);

                break;

            case 2://down

                labBody.center=CGPointMake(lastBody.center.x,lastBody.center.y-20);

                break;

            case 3://left

                labBody.center=CGPointMake(lastBody.center.x+20,lastBody.center.y);

                break;

            case 4://right

                labBody.center=CGPointMake(lastBody.center.x-20,lastBody.center.y);

                break;

                

            default:

                break;

        }

        

    }

    [allsheshen addObject:labBody];//保存到集合

    [self.view addSubview:labBody];



}

//检测随机产生的坐标是否和蛇身冲突

-(int)zbchongtu

{

    if (allsheshen.count!=0)

    {

        for (UISnakeBody * node in allsheshen)

        {

            if (x==node.center.x&&y==node.center.y) {

                return 2;

            }

            else

            {

                return 1;

            }

        }

    }

    return YES;

}

-(void)moveSnake:(int)dir

{

    NSLog(@"SSSSSS====%f",time);

    if (state==0)

    {

        AppDelegate * nowdelegate=[UIApplication sharedApplication].delegate;

        [UIView beginAnimations:nil context:NULL];

        [UIView setAnimationDuration:1];

        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:nowdelegate.window cache:YES];

        ax=labshe.center.x;

        ay= labshe.center.y;

        switch (a) {

            case 1://up

                self.labshe.center=CGPointMake(labshe.center.x, labshe.center.y-20);

                break;

            case 2://down

                self.labshe.center=CGPointMake(labshe.center.x, labshe.center.y+20);

                break;

            case 3://left

                

                self.labshe.center=CGPointMake(labshe.center.x-20, labshe.center.y);

                break;

            case 4://right

                self.labshe.center=CGPointMake(labshe.center.x+20, labshe.center.y);

                break;

            default:

                break;

        }

        //撞墙的时候

        

        if (labshe.center.x>[[UIScreen mainScreen]bounds].size.width||labshe.center.x<</span>0||labshe.center.y<</span>0||labshe.center.y>[[UIScreen mainScreen]bounds].size.height)

        {

            [self over];

            

        }

        //撞到自己身体的时候

        if (allsheshen.count!=0)

        {

            for (UISnakeBody * node in allsheshen)

            {

                if (labshe.center.x==node.center.x&&labshe.center.y==node.center.y)

                {

                    [self over];

                }

            }

        }

        //当蛇碰到了食物

        if(labshe.center.x==labdian.center.x&&

           labshe.center.y==labdian.center.y)

        {

            [self zuobiao];

            bool1=[self zbchongtu];

            while (bool1==2)

            {

                printf("684358739467356");

                [self zuobiao];

                bool1=[self zbchongtu];

            }

            [self eat];

        }

        //移动蛇的身体

        UISnakeBody * nowbody;

        UISnakeBody * prebody;

        if (allsheshen.count>0)

        {

            

            for ( int i=[allsheshen count]-1;i>0;i--)

            {

                nowbody=[allsheshen objectAtIndex:i];

                prebody=[allsheshen objectAtIndex:i-1];

                nowbody.center=prebody.center;

                

            }

            UISnakeBody * first=[allsheshen objectAtIndex:0];

            first.center=CGPointMake(ax, ay);

        }

        

    }


}

-(void)touchfx:(CGPoint)_cg{

    int mx=abs(_cg.x-labshe.center.x);

    int my=abs(_cg.y-labshe.center.y);

    if (mx>my)

    {

        if (_cg.x>labshe.center.x)

        {

            a=4;

        }

        else

        {

            a=3;

        }

    }

    else

    {

        if (_cg.y>labshe.center.y)

        {

            a=2;

        }

        else

        {

            a=1;

        }

    }

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值