




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
子任务2:贪吃蛇的游动和控制任务六项目流程任务简介任务分析支撑知识任务实施任务小结扩展训练自定义组件的方法和监听器了解什么是组件的方法和监听器1任务简介任务分析支撑知识任务实施任务小结扩展训练1.1简介方法:组件外部调用方法改变组件内部监听器:组件发生了某个事件,从而驱动外部行为组件内部组件的监听器触发外部Activity调用组件的方法1.1定义监听器在自定义组件内部定义一个public的接口,在该接口内定义抽象方法;在自定义组件内部申明该接口的对象,在发生事件时(比如检测到按钮被单击、CheckBox被勾选),调用该对象的抽象方法;在自定义组件内部定义public的方法,该方法含有一个接口类型的参数,外部Activity可以调用这个方法将创建的监听器传入到组件内部。项目流程任务简介任务分析支撑知识任务实施任务小结扩展训练子任务分析了解游戏的数据结构和绘制要点1任务简介任务分析支撑知识任务实施任务小结扩展训练首先我们需要分析一下游戏的几种状态:运行状态:蛇开始移动,并且可以接受玩家的控制;暂停状态:蛇暂停移动;死亡状态:游戏结束状态。1.1游戏状态蛇撞墙游戏第一次运行,进行初始化单击【暂停】运行状态死亡状态暂停状态单击【开始】单击【开始】,游戏初始化1.2方法和监听器监听器说明publicinterfaceOnSnakeEatFoodListener{voidOnSnakeEatFood(intfoodcnt);}该监听器会在蛇吃到食物时触发,接口中抽象方法的参数为当前蛇吃到食物的个数。publicinterfaceOnSnakeDeadListener{voidOnSnakeDead();}该监听器会在蛇撞墙时触发,接口中抽象方法无需参数。首先分析贪吃蛇需要在什么时候触发外部的Activity进行处理,我们归纳出以下几点:贪吃蛇吃到食物时需要通知外部Activity进行分数TextView的更新;贪吃蛇撞墙时,需要通知外部Activity进行游戏结束的处理,如弹出Dialog输入玩家信息等。1.2方法和监听器方法说明publicvoidstartGame()开始游戏:如果游戏处于运行状态,调用该方法无效如果游戏处于死亡状态,将重新初始化运行游戏如果游戏处于暂停状态,将恢复游戏运行publicvoidpauseGame()暂停游戏:游戏处于运行状态时,会暂停游戏其他状态时,调用该方法无效publicvoidcontrolGame(intdir)游戏处于运行状态时,调用该方法可以控制蛇游动的方法,参数为上下左右四个方向其他状态时,调用该方法无效voidsetOnSnakeEatFoodListener(OnSnakeEatFoodListenerlistener)该方法设定蛇吃到食物的监听器voidsetOnSnakeDeadListener(OnSnakeDeadListenerlistener)该方法设定蛇死亡的监听器组件功能实现实现贪吃蛇的定时移动、组件重要方法、监听器2任务简介任务分析支撑知识任务实施任务小结扩展训练在SnakeView类中,声明游戏元素相关的成员变量:
privateThreadthread=null; //周期性任务的子线程
privateHandlerhandler=null; //子线程与UI线程交互的HandlerprivatefinalintMSG_MOVE=1; //蛇周期性移动的消息ID
privateintgameStatus; //游戏状态
privatefinalintSTATUS_RUN=1; //运行状态
privatefinalintSTATUS_DEAD=2; //死亡状态
privatefinalintSTATUS_PAUSE=3;//暂停状态2.1蛇定时移动-成员变量我们将initGame中初始化蛇和食物的处理独立放在initSnake新的方法中privatevoidinitSnake(){snakeLen=4; //蛇初始包括四段身体snakeX[0]=3;snakeY[0]=0;snakeX[1]=2;snakeY[1]=0;snakeX[2]=1;snakeY[2]=0;snakeX[3]=0;snakeY[3]=0;foodX=4; //初始化食物的坐标foodY=4;foodCnt=0; //蛇吃到的食物数清零snakeDir=DIR_RIGHT; //蛇初始向右移动}2.1蛇定时移动改造initGame方法:调用initSnake方法初始化游戏元素的位置保留画笔初始化代码添加初始化游戏状态为暂停启动子线程初始化Handler的处理2.1蛇定时移动蛇移动的规律比较简单,身体的移动是连续的,就是后一段身体跟随前一段身体移动首先根据蛇游动的方向计算蛇头的最新位置,然后蛇身体需要依次向前移动形成身体连续挪动的效果。本质上新位置中第N段身体的坐标就是旧位置第(N-1)段身体的坐标。2.1蛇定时移动序号身体坐标新位置旧位置(3,0)0123(2,0)(1,0)(0,0)(4,0)0123(3,0)(2,0)(1,0)向右移动2.1蛇定时移动终止根据蛇的方向计算蛇头新的位置游戏状态是否为运行中?YN终止终止NY判断蛇头是否超过游戏边界?设定游戏状态为死亡判断蛇头是否与食物重合?随机生成下一个食物增加蛇身长和蛇吃到的食物个数更新蛇身体的位置更新蛇头的位置YN触发重绘2.2方法实现根据状态图实现以下方法:方法说明startGame()当游戏处于死亡状态,会将蛇位置进行初始化重新开始游戏;当游戏处于暂停状态,会将游戏切换到运行状态。pauseGame()只有当游戏处于运行状态时才会将游戏切换到暂停状态。controlGame()用于控制蛇移动的方向,只有当游戏处于运行状态时才会改变蛇移动的方向。首先申明两个监听器的接口类型:publicinterfaceOnSnakeEatFoodListener{voidOnSnakeEatFood(intfoodcnt);}publicinterfaceOnSnakeDeadListener{voidOnSnakeDead();}2.3监听器实现-STEP1然后申明两个监听器的成员变量:
privateOnSnakeEatFoodListenersnakeEatFoodListener;//蛇吃到食物的监听器
privateOnSnakeDeadListenersnakeDeadListener;//游戏结束的监听器2.3监听器实现-STEP2创建了两个public的方法,外部Activity可以将创建的监听器对象赋值给SnakeView组件的监听器成员变量:publicvoidsetOnSnakeEatFoodListener(OnSnakeEatFoodListenerlistener){snakeEatFoodListener=listener;}publicvoidsetOnSnakeDeadListener(OnSnakeDeadListenerlistener){snakeDeadListener=listener;}2.3监听器实现-STEP3需要在合适的时机调用触发监听器的方法:
if(newheadx==foodX&&newheady==foodY){Randomrandom=newRandom();foodX=random.nextInt(regionWidth-1);foodY=random.nextInt(regionHeight-1);snakeLen++;foodCnt++;if(snakeEatFoodListener!=null)snakeEatFoodListener.OnSnakeEatFood(foodCnt);}2.3监听器实现-STEP4还有什么地方需要触发两个接口的回调方法。2.3监听器实现-思考Activity功能实现实现MainActivity的功能,从而实现蛇的控制3任务简介任务分析支撑知识任务实施任务小结扩展训练在MainActivity类中,调用SnakeView类的方法和监听该组件的事件,实现以下功能:【开始】【暂停】方向控制分数显示提示游戏结束3.1简介在MainActivity类中申明所有组件的成员变量,请通过findViewByID获得组件对象: Buttonbutton_start; Buttonbutton_pause; Buttonbutton_up; Buttonbutton_down; Buttonbutton_left; Buttonbutton_right; TextViewtextview_score; SnakeViewsnakeview;3.2成员变量请通过调用SnakeView组件的方法,实现【开始】【暂停】【4个方向】按钮的单击事件。【开始】:StartGame()【暂停】:PauseGame()【方向】:ControlGame(intdir)3.3方法调用在MainActivity类实现以下两个功能:贪吃蛇分数的实时更新;游戏结束时Toast提示。3.4监听器的监听在监听器的OnSnakeEatFood方法中实现TextView内容更新:snakeview.setOnSnakeEatFoodListener(newSnak
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自建光缆施工方案
- 儿童心理学发展理论试题集
- 心理学认知过程知识点梳理与试题集
- 2025年各类商品买卖合同
- 2025电子书出版合同模板
- 2025北京某建筑工程有限公司施工合同争议
- 2025年张华与南方集团财务有限责任公司、广东省金丰房地产综合开发有限公司借款合同纠纷民事判决书
- 2025卧室装修合同样本
- 家庭 收纳的成功案例试题及答案
- 2025医疗设备租赁协议合同
- 教学运行管理
- 幼儿园绘本:《小蛇散步》 课件
- Unit 6 Food and Drinks-Grammar 可数名词与不可数名词课件(共12张PPT)-2022-2023学年中职英语新高教版(2021)基础模块1
- 《艺术学概论考研》课件艺术本体论-形式论
- 墙面裱糊工程施工方案及工艺方法
- 核电厂安全核电厂安全设计
- 电解质分析仪MI操作规程 sop
- 常用酶切位点表含保护碱基
- 男性生育报销女方未就业证明(共1页)
- 彩钢棚施工方案
- 热固板施工方案
评论
0/150
提交评论