推箱子第一关核心代码

来源:互联网 发布:90后网络名词 编辑:程序博客网 时间:2024/05/02 02:52


#import"GameViewController.h"

#import "cAppDelegate.h"

@interface GameViewController()


@end


@implementationGameViewController

@synthesize m_box1;

@synthesize m_box2;

@synthesize m_box3;

@synthesize m_box4;

@synthesize m_target;

@synthesize destinationX;

@synthesize destinationY;

@synthesize ableMoveX;

@synthesize ableMoveY;

@synthesize boxFlag;


- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle*)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

       // Custominitialization

       //初始化游戏

       [selfinitGame];

    }

   return self;

}


- (void)viewDidLoad

{

   [superviewDidLoad];

   

   // Do any additional setup after loadingthe view from its nib.

}


- (void)didReceiveMemoryWarning

{

   [superdidReceiveMemoryWarning];

   // Dispose of any resources that can berecreated.

}

//初始化箱子的目的地数组,人物和箱子可以移动的坐标数组

-(void)initGame

{

   //初始化箱子和人物的位置

    m_target.center = CGPointMake(176.5, 275.5);

    m_box1.center = CGPointMake(141.5, 240.5);

    m_box2.center = CGPointMake(176.5, 240.5);

    m_box3.center = CGPointMake(141.5, 275.5);

    m_box4.center = CGPointMake(211.5, 275.5);

    

   destinationX =[[NSMutableArray alloc]init];

   destinationY =[[NSMutableArray alloc]init];

   ableMoveX =[[NSMutableArray alloc]init];

   ableMoveY =[[NSMutableArray alloc]init];

   //初始化箱子的目的地x坐标

   [destinationXaddObject:[NSNumber numberWithFloat:141.5]];

   [destinationXaddObject:[NSNumber numberWithFloat:71.5]];

   [destinationXaddObject:[NSNumber numberWithFloat:176.5]];

   [destinationXaddObject:[NSNumber numberWithFloat:246.5]];

   //初始化箱子的目的地y坐标

   [destinationYaddObject:[NSNumber numberWithFloat:345.5]];

   [destinationYaddObject:[NSNumber numberWithFloat:240.5]];

   [destinationYaddObject:[NSNumber numberWithFloat:170.5]];

   [destinationYaddObject:[NSNumber numberWithFloat:275.5]];

   //人物和箱子可以移动的x坐标

   [ableMoveXaddObject:[NSNumber numberWithFloat:141.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:141.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:141.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:106.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:176.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:176.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:176.5]];

   [ableMoveXaddObject:[NSNumber numberWithFloat:211.5]];

   //人物和箱子可以移动的y坐标

   [ableMoveYaddObject:[NSNumber numberWithFloat:310.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:275.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:240.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:240.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:205.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:240.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:275.5]];

   [ableMoveYaddObject:[NSNumber numberWithFloat:275.5]];

}

- (IBAction)btnBack:(id)sender {

   [cAppDelegateswitchViewController:1];

}

//接收触屏事件

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

   //获取当前应用程序的代理对象

    cAppDelegate * nowDelegate = [UIApplication sharedApplication].delegate;

    CGPoint touchPoint = [[touches anyObject]locationInView:nowDelegate.m_gameVC.view];

    [self moveTarget:touchPoint];

}

//人物和箱子移动

-(void)moveTarget:(CGPoint)touchPoint

{

    int w = abs(touchPoint.x- m_target.center.x);

    int h = abs(touchPoint.y -m_target.center.y);

   if(w>h)  //left or right

    {

       if(touchPoint.x<<spanstyle="color: #4f8187">m_target.center.x)

       {

          dir = left;

       }

       else

       {

          dir = right;

       }

    }

   else  //up ordown

    {

       if(touchPoint.y<<spanstyle="color: #4f8187">m_target.center.y)

       {

          dir = up;

       }

       else

       {

          dir = down;

       }

    }

    switch (dir) {

       caseup:

          //判断下一个点是否可以走

          if([self judge:CGPointMake( m_target.center.x,m_target.center.y-35)]==YES)

           {

              //判断一个点是否有箱子

              if ([self judgeBoxExist:CGPointMake( m_target.center.x,m_target.center.y-35)]==YES)

              {

                 //如果箱子存在,判断箱子是否能走到下一个点

                 if([self judge:CGPointMake( m_target.center.x,m_target.center.y-70)]==YES)

                 {

                    //判断当前箱子的下一个点是否有其他箱子,如果没有箱子则可以移动,反之则不能

                    if ([self judgeBoxExist:CGPointMake( m_target.center.x,m_target.center.y-70)]==NO)

                     {

                        //移动人物

                        m_target.center = CGPointMake( m_target.center.x,m_target.center.y-35);

                        //移动箱子

                        [self moveTheBox];

                     }

                 }

              }

              else

              {

                 //移动人物

                 m_target.center = CGPointMake( m_target.center.x,m_target.center.y-35);

              }

           }

          break;

       casedown:

          //判断下一个点是否可以走

          if([self judge:CGPointMake( m_target.center.x,m_target.center.y+35)]==YES)

           {

              //判断一个点是否有箱子

              if ([self judgeBoxExist:CGPointMake( m_target.center.x,m_target.center.y+35)]==YES)

              {

                 //如果箱子存在,判断箱子是否能走到下一个点

                 if([self judge:CGPointMake( m_target.center.x,m_target.center.y+70)]==YES)

                 {

                    //判断当前箱子的下一个点是否有其他箱子,如果没有箱子则可以移动,反之则不能

                    if ([self judgeBoxExist:CGPointMake( m_target.center.x,m_target.center.y+70)]==NO)

                     {

                        //移动人物

                        m_target.center = CGPointMake( m_target.center.x,m_target.center.y+35);

                        //移动箱子

                        [self moveTheBox];

                     }

                 }

              }

              else

              {

                 //移动人物

                 m_target.center = CGPointMake( m_target.center.x,m_target.center.y+35);

              }

           }

          break;

       caseleft:

          //判断下一个点是否可以走

          if ([self judge:CGPointMake( m_target.center.x-35,m_target.center.y)]==YES)

           {

              if ([self judgeBoxExist:CGPointMake( m_target.center.x-35,m_target.center.y)]==YES)

              {

                 //如果箱子存在,判断箱子是否能走到下一个点

                 if([self judge:CGPointMake( m_target.center.x-70,m_target.center.y)]==YES)

                 {

                    //判断当前箱子的下一个点是否有其他箱子,如果没有箱子则可以移动,反之则不能

                    if ([self judgeBoxExist:CGPointMake( m_target.center.x-70,m_target.center.y)]==NO)

                     {

                        //移动人物

                        m_target.center = CGPointMake( m_target.center.x-35,m_target.center.y);

                        //移动箱子

                        [self moveTheBox];

                     }

                 }

              }

              else

              {

                 //移动人物

                 m_target.center = CGPointMake( m_target.center.x-35,m_target.center.y);

              }


           }

          break;

       caseright:

          //判断下一个点是否可以走

          if([self judge:CGPointMake( m_target.center.x+35,m_target.center.y)]==YES)

           {

              if ([self judgeBoxExist:CGPointMake( m_target.center.x+35,m_target.center.y)]==YES)

              {

                 if([self judge:CGPointMake( m_target.center.x+70,m_target.center.y)]==YES)

                 {

                    //判断当前箱子的下一个点是否有其他箱子,如果没有箱子则可以移动,反之则不能

                    if ([self judgeBoxExist:CGPointMake( m_target.center.x+70,m_target.center.y)]==NO)

                     {

                        //移动人物

                        m_target.center = CGPointMake( m_target.center.x+35,m_target.center.y);

                        //移动箱子

                        [self moveTheBox];


                     }

                 }

              }

              else

              {

                 //移动人物

                 m_target.center = CGPointMake( m_target.center.x+35,m_target.center.y);

              }

           }

          break;

    }

}

//判断人物或箱子将要移动的坐标是否正确

-(BOOL)judge:(CGPoint)nextPoint

{

    for(inti=0;i<<span style="color:#4f8187">ableMoveX.count;i++)

    {

       int w=abs(nextPoint.x - [[ableMoveX objectAtIndex:i]floatValue]);

       int h =abs( nextPoint.y - [[ableMoveY objectAtIndex:i]floatValue]);

       //误差小于10

       if(w<<span style="color: #272ad8">10&&h<<spanstyle="color: #272ad8">10)

       {

          return YES;

       }

    }

    for (int i=0; i<<span style="color:#4f8187">destinationX.count;i++)

    {

       int w=abs( nextPoint.x - [[destinationX objectAtIndex:i]floatValue]);

       int h =abs(nextPoint.y - [[destinationY objectAtIndex:i]floatValue]);

       //误差小于10

       if(w<<span style="color: #272ad8">10&&h<<spanstyle="color: #272ad8">10)

       {

          return YES;

       }

    }

    

   return NO;

}

//判断人物的下一个坐标是否有箱子

-(BOOL)judgeBoxExist:(CGPoint)nextPoint

{

    int w = abs( nextPoint.x - m_box1.center.x);

    int h =  abs(nextPoint.y - m_box1.center.y);

   //误差小于10

    if (w<<span style="color:#272ad8">10&&h<<span style="color:#272ad8">10)

    {

       boxFlag =1;

       returnYES;

    }

    w = abs(nextPoint.x - m_box2.center.x);

    h = abs(nextPoint.y - m_box2.center.y);

   //误差小于10

    if (w<<span style="color:#272ad8">10&&h<<span style="color: #272ad8">10)

    {

       boxFlag =2;

       returnYES;

    }

    w = abs(nextPoint.x - m_box3.center.x);

    h = abs(nextPoint.y - m_box3.center.y);

   //误差小于10

    if ( w<<span style="color:#272ad8">10&&h<<span style="color: #272ad8">10)

    {

       boxFlag =3;

       returnYES;

    }

    w =abs(nextPoint.x - m_box4.center.x);

    h =abs(nextPoint.y - m_box4.center.y);

   //误差小于10

    if ( w<<span style="color:#272ad8">10&&h<<span style="color: #272ad8">10)

    {

       boxFlag =4;

       returnYES;

    }

   return NO;

}

//移动箱子

-(void)moveTheBox

{

    switch (dir)

    {

       caseup:

          switch (boxFlag)

          {

              case 1 //移动m_box1

                 m_box1.center = CGPointMake(m_box1.center.x, m_box1.center.y-35);

                 break;

              case 2 //移动m_box2

                 m_box2.center = CGPointMake(m_box2.center.x, m_box2.center.y-35);

                 break;

              case 3 //移动m_box3

                 m_box3.center = CGPointMake(m_box3.center.x, m_box3.center.y-35);

                 break;

              case 4 //移动m_box4

                 m_box4.center = CGPointMake(m_box4.center.x, m_box4.center.y-35);

                 break;

           }

          break;

       casedown:

          switch (boxFlag)

           {

              case 1 //移动m_box1

                 m_box1.center = CGPointMake(m_box1.center.x, m_box1.center.y+35);

                 break;

              case 2 //移动m_box2

                 m_box2.center = CGPointMake(m_box2.center.x, m_box2.center.y+35);

                 break;

              case 3 //移动m_box3

                 m_box3.center = CGPointMake(m_box3.center.x, m_box3.center.y+35);

                 break;

              case 4 //移动m_box4

                 m_box4.center = CGPointMake(m_box4.center.x, m_box4.center.y+35);

                 break;

           }


          break;

       caseleft:

          switch (boxFlag)

           {

              case 1 //移动m_box1

                 m_box1.center = CGPointMake(m_box1.center.x-35,m_box1.center.y);

                 break;

              case 2 //移动m_box2

                 m_box2.center = CGPointMake(m_box2.center.x-35,m_box2.center.y);

                 break;

              case 3 //移动m_box3

                    m_box3.center = CGPointMake(m_box3.center.x-35,m_box3.center.y);

                 break;

              case 4 //移动m_box4

                    m_box4.center = CGPointMake(m_box4.center.x-35,m_box4.center.y);

                 break;

           }

          break;

       caseright:

          switch (boxFlag)

           {

              case 1 //移动m_box1

                 m_box1.center = CGPointMake(m_box1.center.x+35,m_box1.center.y);

                 

                 break;

              case 2 //移动m_box2

                 m_box2.center = CGPointMake(m_box2.center.x+35,m_box2.center.y);

                 break;

              case 3 //移动m_box3

                 m_box3.center = CGPointMake(m_box3.center.x+35,m_box3.center.y);

                 break;

              case 4 //移动m_box4

                 m_box4.center = CGPointMake(m_box4.center.x+35,m_box4.center.y);

                 break;

           }

          break;

    }

   [selfNextEevel];

}

//成功闯关

-(void)NextEevel

{

    int num = 0;

    for (int i=0; i<<span style="color:#4f8187">destinationX.count;i++)

    {

       int w =abs(m_box1.center.x-[[destinationX objectAtIndex:i]floatValue]);

       int h =abs(m_box1.center.y-[[destinationY objectAtIndex:i]floatValue]);

       //误差为10

       if(w<<span style="color: #272ad8">10&&h<<spanstyle="color: #272ad8">10)

       {

           num++;

       }

       w = abs(m_box2.center.x-[[destinationX objectAtIndex:i]floatValue]);

       h = abs(m_box2.center.y-[[destinationY objectAtIndex:i]floatValue]);

       //误差为10

       if(w<<span style="color: #272ad8">10&&h<<spanstyle="color: #272ad8">10)

       {

           num++;

       }

       w = abs(m_box3.center.x-[[destinationX objectAtIndex:i]floatValue]);

       h = abs(m_box3.center.y-[[destinationY objectAtIndex:i]floatValue]);

       //误差为10

       if(w<<span style="color: #272ad8">10&&h<<spanstyle="color: #272ad8">10)

       {

           num++;

       }

       w = abs(m_box4.center.x-[[destinationX objectAtIndex:i]floatValue]);

       h = abs(m_box4.center.y-[[destinationY objectAtIndex:i]floatValue]);

       //误差为10

       if(w<<span style="color: #272ad8">10&&h<<spanstyle="color: #272ad8">10)

       {

           num++;

       }


    }

    if (num ==4)

    {

       UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"祝贺您"message:@"成功闯关!"delegate:self cancelButtonTitle:@"再玩一次"otherButtonTitles:@"下一关",nil];

       [alert show];

    }

}

//处理警告结果

- (void)alertView:(UIAlertView *)alertViewclickedButtonAtIndex:(NSInteger)buttonIndex

{

    switch (buttonIndex)

    {

       case0:

          //再玩一次          

          [self initGame];

          break;

       case1:

          //进入第二关

          [cAppDelegateswitchViewController:7];

          break;

    }

}


@end


原创粉丝点击