《java贪吃蛇演示稿.ppt》由会员分享,可在线阅读,更多相关《java贪吃蛇演示稿.ppt(24页珍藏版)》请在金锄头文库上搜索。
1、javajava贪吃蛇贪吃蛇 设计涉及到的类个各类所涉及到的方法GamePanel类GamePanel 类 void display();/ 显示Snake类void move(); / 移动(走一步)void changeDirection(); / 改变方向void eatFood(); / 吃食物(身体变长)boolean isEatBody(); / 蛇是否吃到了自己的身体void drawMe(); / 显示自己定时移动Food类boolean isSnakeEatFood(Snake);/ 判断蛇是否吃到了食物 void drawMe();/ 显示Ground类boolean is
2、SnakeEatRock(Snake);/ 蛇是否吃到石头void drawMe();/ 显示各个类之间的关系Ground Food Snake定时移动 controller处理按键事件处理逻辑事件 Controller Game panel重新显示Controller通过事件监听建立联系Snake定时移动MainFrame移动后, 触发事件snakeMovedSnakeListener处理按键事件状态改变需要重新显示触发按键事件重新显示事件源事件源SnakeListenervoid snakeMoved(Snake); 总的包与类为了方便查看定义不同的包game包括GameOptionPan
3、el,MainFrame类Controller包括controller类Entities包括food ground snake类Listeners包括GameListener,SnakeListener接口Util包括global类View包括GamePanel类怎么表示蛇, 食物, 石头可以把显示区域想象成一个大大表格, 其中的一个格子可以代表一个食物或一块石头, 几个连在一起的格子就代表一条蛇怎么区分格子呢(怎么表示这个格子呢)? 用坐标,每个格子有它自己的坐标,左上角的那个格子的坐标是 (0,0)怎么表示蛇, 食物, 石头食物(0, 0)(1, 0)石头(0, 1)石头蛇头(1, 2)蛇
4、身(2, 2)蛇身(3, 2)石头石头石头石头y 坐标x 坐标0123456789012345蛇怎么移动蛇向前移动一步,可以看作是蛇头前面增加了一个节点,蛇的尾巴上少了一个节点 (即去尾,加头)去掉去掉蛇蛇头移动前新新头原来的第二节原来的蛇头移动后用什么数据结构存放蛇的身体节点 分析: 要区分蛇头和蛇尾巴,这就要求这个数据结构是有序的,还要(经常的)访问第一个和最后一个节点, 所以 LinkedList 最合适,因为它有 getFirst() , getLast()方法 和 removeLast() 方法蛇的移动方向蛇下一步移动到哪儿, 是由方向来控制的。 用什么表示方向呢? 在这里我们用 i
5、nt 型的常量表示 根据原蛇头和方向计算新蛇头的坐标 (2, 1) (1, 2)蛇头(2, 2) (3, 2) (2,3)y 坐标x 坐标0123401234向上移动y 坐标减 1向左移动x 坐标减 1向下移动y 坐标加 1向右移动x 坐标加 1 格子的宽度和高度像素坐标(x, y)矩形(格子)的高度CELL_HEIGHT矩形(格子)的宽度CELL_WIDTH格子坐标和像素坐标格子坐标(2,1)这个点的像素坐标为x 坐标: 格子的宽度 * lefty 坐标: 格子的高度 * toptop= 1left= 2left 是这个格子距左边界的距离top 是这个格子距上边界的距离关于方向关于方向, 有
6、两个要注意地方有两个要注意地方1. 相反方向相反方向2. 无效方向无效方向什么是相反方向什么是相反方向和和上一次移动的方向上一次移动的方向相反的方向即为相反相反的方向即为相反方向方向如果输入的是相反方向则应该忽略如果输入的是相反方向则应该忽略( (判断相反方向时应该注意方向的有效性判断相反方向时应该注意方向的有效性) )在蛇的这一次移动之后和下一次移动之前这个时间间隔内输入了多个方向, 只有最后一个是有效方向, 其余的都为无效方向无效方向蛇蛇头向向上上移移动蛇移动一次的时间间隔之内无效方向相反方向无效方向蛇移动后可能出现的三种情况 l1. 吃到食物l2. 吃到石头l3. 吃到自己的身体(什么都没吃到)吃到了什么?比坐标比坐标, 坐标重合坐标重合, 就代表吃到了就代表吃到了 判断吃到什么东西判断吃到什么东西, , 只需判断蛇头只需判断蛇头, , 因因为蛇的身体都是走蛇头走过的地方为蛇的身体都是走蛇头走过的地方