用Java写贪吃蛇的移动方法,虽然思路简单,但是参考了一下网上的代码,思路尽管一样,但是发现自己写的十分杂乱,不方便阅读与修改。
原先:
public Node move(Direction direction){
//根据方向更新贪吃蛇的body
//返回移动之前的尾部Node
Node nodeBeforeMove = new Node(body.getLast().getX(),body.getLast().getY());//创建一个新节点
switch(direction){
case UP://向上移动
Node newHead = new Node(body.getFirst().getX(),body.getFirst().getY() - 1);//创建一个新节点
this.body.addFirst(newHead);//增加头节点
nodeBeforeMove = this.body.getLast();//将尾节点赋给该节点
this.body.removeLast();//删除尾节点
break;
case RIGHT://向右移动
Node newHead1 = new Node(body.getFirst().getX() + 1,body.getFirst().getY());//创建一个新节点
this.body.addFirst(newHead1);//增加头节点
nodeBeforeMove = this.body.getLast();//将尾节点赋给该节点
this.body.removeLast();//删除尾节点
break;
case DOWN://向下移动
Node newHead2 = new Node(body.getFirst().getX(),body.getFirst().getY() + 1);//创建一个新节点
this.body.addFirst(newHead2);//增加头节点
nodeBeforeMove = this.body.getLast();//将尾节点赋给该节点
this.body.removeLast();//删除尾节点
break;
case LEFT://向左移动
Node newHead3 = new Node(body.getFirst().getX() - 1,body.getFirst().getY());//创建一个新节点
this.body.addFirst(newHead3);//增加头节点
nodeBeforeMove = this.body.getLast();//将尾节点赋给该节点
this.body.removeLast();//删除尾节点
break;
}
return nodeBeforeMove;//返回移动之前的尾节点
}
改进后
public Node moveImproved(Direction direction){
int xOfHead = body.getFirst().getX();
int yOfHead = body.getFirst().getY();
Node newHead = null;
switch(direction){
case UP:
newHead = new Node(xOfHead,yOfHead - 1);
break;
case DOWN:
newHead = new Node(xOfHead,yOfHead + 1);
break;
case LEFT:
newHead = new Node(xOfHead - 1,yOfHead);
break;
case RIGHT:
newHead = new Node(xOfHead + 1,yOfHead);
break;
}
body.addFirst(newHead);
return body.removeLast();
}
总结:
1.写代码时一定要简洁,改进后的代码用变量xOfHead代替了body.getFirst().getX()冗长的代码。
2.思路一定要清晰,这样才能写出可读性高的代码。
3.使用Java中各种方法时尽量理解这个方法实现的功能,返回值等等,比如
-
public E removeLast()
Removes and returns the last element from this list.-
Specified by:
-
removeLast
in interfaceDeque<E>
Returns:
- the last element from this list Throws:
-
NoSuchElementException
- if this list is empty
-
改进后代码参考自https://github.com/thissentenceiswrong/Snake-mini-game