#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