- (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<0||labshe.center.y<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