植物大战僵尸设计思路.docVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
首先游戏设计,由于植物大战僵尸是2d游戏,最多算2.5d所以使用安卓的View完全足够。View有两个重点方法onDraw用于绘制,onTouchEvent用户触摸屏幕执行用来和用户交互。在构造函数进行相关初始化以后然后启动一个线程不断的循环执行绘图与逻辑函数这样就是一个简单的游戏框架。因为View不是双缓冲的所以需要创建一个图片然后使用这个图片的Canvas对象进行绘制,进行屏幕适应的时候在View的onDraw函数中将这张图片缩放到屏幕等大小,这样在任何屏幕下我们的画面都是全屏显示的,由于是在另外的线程中更新画面的,安卓不支持在非UI线程中更新画面,所以View提供了一个方法postInvalidate用于在非UI线程中更新画面。 首先了解植物大战僵尸含有哪些元素,有道具,有阳光,有僵尸,有能种植植物的草坪,有植物。有子弹。我们这里只是进行设计简单的实现游戏,植物有单发射手,双发射手,寒冰射手,僵尸有普通僵尸,红帽僵尸,铁通僵尸。 先设计最简单的阳光类Sun.java,阳光会从天空掉落和植物生成,从天空掉落的阳光会进行掉落运动,植物生成的阳光是禁止不动的,所以阳光有一个isStatic是否静止不动的布尔型标识,然后阳光在不是禁止不动的时候y坐标要增加就是下落,然后停止。所以在构造函数中随机一个目标y值,阳光非禁止不动状态下y坐标不断增加,当到达目标y值时候就把状态更改为禁止不动,其次阳光有一个消失标识,采用Vector动态数组存储阳光对象,绘制时候绘制该动态数组的所有阳光对象,如果该阳光的消亡标识为真就把该阳光从容器里面进行移除,阳光的消亡标识有两种情况下变成真,一是用户点击,二是到了一定时间消亡标识为真,所以阳光有一个计数器变量count,然后不断的自加,当到达阳光的消亡时间就让消亡标识为真,其次是用户点击了阳光,判断用户点到了阳光可以使用java中的Rect对象的contains方法判断点在矩形范围内,用户点击屏幕触摸坐标在阳光的矩形范围就让消亡标识为真。绘制的时候阳光要不断旋转,声明一个角度变量angle不断自加然后以阳光的中心点为旋转中心旋转阳光即可。 接着我们设计一个草坪类Grass.java,草坪类的作用是用来种植植物,总共有5x9块草坪,横9竖5总共45块草坪,草坪的属性相对较于简单,就有一个是否可种植植物的布尔型标识,有植物在这块草坪上就不能进行植物种植了,所以声明一个5x9的二维草坪数组,然后把草坪坐标宽高传进去,其次草坪要有一个编号用来传递给植物用于植物铲除索引出该草坪改变它的是否可种植植物标识,草坪的编号对应0到44,草坪的绘制方法用草坪的编号值%2除以2的余数如果是0就绘制蓝色草坪否则绘制绿色草坪,这里我就是直接绘制一个矩形,然后在View的绘制函数中for循环绘制所有草坪这样我们就可以看到蓝绿相间的草坪了,当然草坪的触摸方法还没写先写好其他类再接着写。 设计好了草坪我们设计一个僵尸类Jiangshi.java,僵尸有一个整形变量type代表僵尸的类型,0代表普通僵尸,1代表红帽僵尸,2代表铁桶僵尸,其次僵尸有一个整形变量hp代表僵尸的血量,然后有一个isMove布尔型标识表示僵尸是否可移动,僵尸在碰到植物的时候让僵尸停止移动即正在吃食物,僵尸与植物的碰撞检测可用矩形碰撞检测,java的Rect对象有一个intersect方法用来判断两个矩形是否交合用于矩形碰撞检测。另外还有个是否被寒冰子弹击中布尔型属性,如果是被寒冰子弹击中移动速度减半,僵尸的移动就是x坐标减去一个速度值即可即向左边移动,依旧使用一个Vector容器来进行存储僵尸,如果僵尸血量为0就从该容器移除僵尸,创建僵尸的时候可以使用一个固定二维数组,如下边所示 int LEVELS[][]={{0},{0,0},{0,0,1},{0,1,1},{0,1,2},{2,2,1,1,0,0},{0,0,0,0,0,1,1,1,1,2},{0,0,0,0,0,1,0,0,0,2,2,2,2,1,1},{0,0,0,0,1,1,2,2,2,2,2,1,1,1},{0,1,2,0,1,2,0,1,2,0,2,2,1,1,0,2}};这是一个二维数组,第一维长度为10代表10波僵尸第二维表示要创建的僵尸,0表示普通僵尸,1表示红帽僵尸,2表示铁桶僵尸,当到达一定的时间就循环该波数的数组长度创建僵尸,然后波数值增加,比如这里第一波是一个普通僵尸,第二波是两个普通僵尸,虽然僵尸数据是固定的,但是对僵尸出现的位置也要进行一下随机。其次可使用波数值作为关卡进度值在底部绘制一个进度条,另外僵尸有一个整形变量列属性,取值范围在0到4总共五列,表示僵尸在哪一列,其作用是用于绘制僵尸时候按顺序绘制,由远到近的先后顺序绘制。否则你可能看到第一列的僵尸的脚在第二列僵尸的脑袋

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档