【编程】我的第三个android程序-Snake之穿墙贪吃蛇

        自从写完了第二个android程序后,我就彻底迷上了android。于是我讲Snake作为我的第三个android程序,在第二个程序编写完后,我在第二周就基本看懂了Snake的全部源代码。之后我尝试改变一下,使贪吃蛇具备穿墙的功能。我主要改了以下两个个地方:

        (1)加入onTouchEvent

        目标:用onTouchEvent替代onKeyDown,因为现在的android手机大多没有方向键了。

        算法:根据onTouchEvent中UP时得到的x,y值与Down的x,y值进行做差,同时比较根据δx与δy的绝对值的大小以及δx、δy的正负,判断用户的手势。

        源代码如下:

        //SnakeView.java

 public boolean onTouchEvent(MotionEvent event){
  
        float x = event.getX();
        float y = event.getY();
            
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
            	mX = x;
            	mY = y;
                //update();    
            	return true;
            case MotionEvent.ACTION_UP:
            	float dx = x-mX;
            	float dy = y-mY;
            	if(Math.abs(dx)>=0 || Math.abs(dy)>=0)
            	{
            	    if(Math.abs(dx) >= Math.abs(dy))
            	    {
            	    	if(dx>0.0f)
            	    	{
            	    		if (mDirection != WEST) 
            	    		{
            	                mNextDirection = EAST;
            	    	    }
            	    		return true;
            	    	}
            	    	else
            	    	{
            	    		 if (mDirection != EAST) 
            	    		 {
            	                mNextDirection = WEST;
            	    	     }
            	    		 return true;
            	        }
                    }
            	    else
            	    {
            	        if(dy<0.0f)
            	        {
            	    		 if (mMode == READY | mMode == LOSE) 
            	    		 {
            	                /*
            	                 * At the beginning of the game, or the end of a previous one,
            	                 * we should start a new game.
            	                 */
            	                 initNewGame();
            	                 setMode(RUNNING);
            	                 update();
            	                 return (true);
            	             }

            	             if (mMode == PAUSE) 
            	             {
            	                /*
            	                 * If the game is merely paused, we should just continue where
            	                 * we left off.
            	                 */
            	                 setMode(RUNNING);
            	                 update();
            	                 return (true);
            	             }
            	    	
            	    	     if (mDirection != SOUTH) 
            	    	     {
        	                     mNextDirection = NORTH;
            	             }
            	    	     return true;
            	         }//if(dy>0.0f)
            	    	 else
            	    	 {
            	         	 if (mDirection != NORTH) 
            	         	 {
        	                     mNextDirection = SOUTH;
            	             }
            	         	 return true;
                         }
                    }//else
            	}//if(Math...
            	//return true;
        }//switch
        return (true);
     }//onTouchEvent   


        (2)使贪吃蛇具备穿墙功能

         Snake的源代码如下:

          //SnakeView.java

        if ((newHead.x < 1) || (newHead.y < 1) || (newHead.x > mXTileCount - 2)
                || (newHead.y > mYTileCount - 2)) {
            setMode(LOSE);//失败
            return;
        }

 

        穿墙算法:当贪吃蛇头部到达墙时,及时改变其头部的坐标。

        源代码如下:

        //SnakeView.java

if (newHead.x < 1) {
     newHead.x = mXTileCount - 2;
     //return;
}
else if(newHead.y < 1)
{
     newHead.y = mYTileCount - 2;
     //return; 	
}
else if(newHead.x > mXTileCount - 2)
{
    newHead.x = 1;
    //return;
}
else if(newHead.y > mYTileCount - 2)
{
    newHead.y = 1;
    //return;   	
}

 

APK下载地址:http://download.csdn.net/detail/chjr1000/4990935

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用 Object-C 写一个贪吃蛇程序需要使用到若干基本的编程知识,包括: 1. 熟悉 Object-C 的语法和基本概念 2. 掌握基本的图形绘制和动画技巧 3. 理解贪吃蛇游戏的基本规则和操作流程 代码示例如下: ``` #import "ViewController.h" #import "Snake.h" @interface ViewController () @property (nonatomic, strong) Snake *snake; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.snake = [[Snake alloc] initWithFrame:self.view.bounds]; [self.view addSubview:self.snake]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.snake start]; } @end ``` 这是一个简单的代码示例,其中包含了贪吃蛇游戏的基本框架。你还需要自己实现 Snake 类和其他相关类,完成具体的绘制和控制逻辑。 注意事项: 1.这只是一个简单的代码示例,还需要根据具体的需求进行相应的修改。 2.如果你是新手,建议先掌握Object-C的基本知识。 ### 回答2: 贪吃蛇是一个非常经典的游戏,可以用Objective-C来编写一个贪吃蛇程序。 首先,我们需要创建一个Snake类来表示贪吃蛇。这个类可以有属性包括贪吃蛇的身体坐标数组和当前的移动方向。我们还可以定义方法来实现贪吃蛇的移动、吃食物和检测碰撞等功能。 接下来,我们需要创建一个Food类来表示食物。这个类可以有属性包括食物的坐标。我们还可以定义方法来生成随机的食物位置。 然后,我们需要创建一个Game类来管理游戏的整个过程。这个类可以包含贪吃蛇和食物的实例,以及游戏的状态信息。我们还可以定义方法来处理用户的操作输入、更新游戏状态、绘制游戏界面等功能。 在Game类中,我们可以使用Core Graphics框架来绘制游戏界面,使用定时器来定期刷新界面和更新游戏状态。我们也可以使用手势识别来处理用户的滑动操作,以改变贪吃蛇的移动方向。 最后,我们需要在AppDelegate类中创建一个游戏窗口,将Game类的实例添加到窗口中,并启动游戏的运行循环。 通过以上的步骤,我们就可以用Objective-C来编写一个贪吃蛇程序了。程序运行时,玩家可以通过滑动屏幕来控制贪吃蛇的移动方向,贪吃蛇会自动移动并吃掉食物,当贪吃蛇碰到自己的身体或者边界时,游戏结束。玩家可以通过吃食物来增加得分,并挑战自己的最高分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值