/*蛇:
属性:节点,长度,运动的方向,生长的标记;
方法:构造一条蛇,移动,改变方向
食物:
属性:颜色,横坐标,纵坐标;
方法:初始化食物
网格:
属性:行,列,格子大小,背景的颜色;
方法:初始化;
游戏:
属性:蛇,食物,网格,蛇的移动速度,串口,画布,绘画对象
方法:判断是否能吃到自己 ,判断是否撞到墙,化蛇,画食物,画网格
节点:行,列
Rows =6,cols=5,color:yellow;
随机出现,不能与蛇重叠。
蛇的初始化:direction = down;
[{row=3,cols=5},{row=3,cols=4},{row=3,cols=3}]
Color:green
蛇的移动:改变移动方向,生长。
网格的初始化:row=25,cols=30,color=black;
游戏的初始化:
移动蛇,改变蛇的移动方向,初始化蛇,初始化事物,初始化网格,回执,蛇,事物,网格。开始游戏
作业:画边框
比较两个点,只需输入一个参数。
This,可作为另一个参数。
举例:public booleanmeetGrid(Node node){
return node.row < 0 || node.row > 23 ||
node.col < 0 ||node.col> 23;
}
说明,判断出来是真返回真,不是直接可以返回判断的那个条件。
Question:按顺(逆)时针连按3个,就直接咔嚓了
/**
* 判断蛇头能不能碰到自己
* @param node舌头节点
* @return true-碰到了 false- 没碰到
*/
public boolean Eatself(Nodenode) {
for (int i= 1; i < body.size(); i++){
if (body.get(i).row ==node.row && body.get(i).col ==node.col)
return true;
}
return false;
}
解决思路:
在键盘监听的switch里输出每次按键后的头结点。看看是不是头结点或者body发生了变化。
发现原因:解释如下:
蛇头改变方向的监听如下:
case 39:if(snake.getDirection()!= Snake.LEFT)
snake.setDirection(Snake.RIGHT);
System.out.println("链表的第一个元素是 : " + snake.getBody().getFirst().row+","
+snake.getBody().getFirst().col);
break;
我只设置了不能直接从left->right,但是如果
先按up,再按right,就实现了从left方向到right方向
此时,蛇的下一个节点与蛇身碰到一起,因而游戏结束。
解决办法:
Public 1
定义一个新方向direction1为空,每次键盘键入就给新方向赋值。
在线程里将direction1赋值给direction.direction1设置为空。
用方向的十进制值进行判断。
增加: 积分,蛇头,加速。