Java贪食蛇编程日志(一) 随即产生Enum元素的Bug
2013-09-07 21:29
357 查看
产生蛇的节点时,由于程序有一个线程让它移动的,代码部分如下:
for(int i=0; i<this.bodyNodes.size(); i++) {
Node node = this.bodyNodes.get(i);
switch (node.dir) {
case Up: {
node.posY--;
break;
}
case Down: {
node.posY++;
break;
}
case Left: {
node.posX--;
break;
}
case Right: {
node.posX++;
break;
}
}
if(i != 0) {
tempDir = preDir;
preDir = node.dir;
node.dir = tempDir;
}
}
然后添加新节点代码如下:
Node tailNode = this.bodyNodes.get(this.bodyNodes.size()-1);
dir = tailNode.dir;
switch(tailNode.dir) {
case Up: {
posX = tailNode.posX;
posY = tailNode.posY+1;
break;
}
case Down: {
posX = tailNode.posX;
posY = tailNode.posY-1;
break;
}
case Left: {
posX = tailNode.posX+1;
posY = tailNode.posY;
break;
}
case Right: {
posX = tailNode.posX-1;
posY = tailNode.posY;
break;
}
}
}
this.bodyNodes.add(new Node(posX, posY, dir));
因为我是在new出蛇的时候给它循环5次addNode()的方法,结果偶尔来会出现几个节点不相连的情况,我以为是同步问题,就是说它添加一半的时候蛇移动的那个线程参合进来,当拿到最后节点位置后,线程切换,另一个线程把已有的节点给挪开了,导致新添加的节点就跟最后一个节点隔了一段距离。。。
最后发现不是的,是蛇的方向使用了Enum,然后开始的时候是随机产生的方向,结果,switch 的一个case把posY写成了posX,由于随机产生,所以bug时隐时现,导致我以为是线程问题产生的bug。
for(int i=0; i<this.bodyNodes.size(); i++) {
Node node = this.bodyNodes.get(i);
switch (node.dir) {
case Up: {
node.posY--;
break;
}
case Down: {
node.posY++;
break;
}
case Left: {
node.posX--;
break;
}
case Right: {
node.posX++;
break;
}
}
if(i != 0) {
tempDir = preDir;
preDir = node.dir;
node.dir = tempDir;
}
}
然后添加新节点代码如下:
Node tailNode = this.bodyNodes.get(this.bodyNodes.size()-1);
dir = tailNode.dir;
switch(tailNode.dir) {
case Up: {
posX = tailNode.posX;
posY = tailNode.posY+1;
break;
}
case Down: {
posX = tailNode.posX;
posY = tailNode.posY-1;
break;
}
case Left: {
posX = tailNode.posX+1;
posY = tailNode.posY;
break;
}
case Right: {
posX = tailNode.posX-1;
posY = tailNode.posY;
break;
}
}
}
this.bodyNodes.add(new Node(posX, posY, dir));
因为我是在new出蛇的时候给它循环5次addNode()的方法,结果偶尔来会出现几个节点不相连的情况,我以为是同步问题,就是说它添加一半的时候蛇移动的那个线程参合进来,当拿到最后节点位置后,线程切换,另一个线程把已有的节点给挪开了,导致新添加的节点就跟最后一个节点隔了一段距离。。。
最后发现不是的,是蛇的方向使用了Enum,然后开始的时候是随机产生的方向,结果,switch 的一个case把posY写成了posX,由于随机产生,所以bug时隐时现,导致我以为是线程问题产生的bug。
相关文章推荐
- 已知有枚举类型定义:enum MyEn{a=101,b,c=207,d,e,f,g},编程输出第5个枚举元素的序号值
- java随即产生8位数的密码
- IE6、7下li元素的子元素为dl,ul,ol时产生的bug
- java使用log4j产生日志,使用自定义日志名称
- java编程思想恶心的enum状态机示例
- Java学习日志(24-1-网络编程-自定义服务端与客户端)
- Java编程:删除 List 元素的三种正确方法
- Java编程基础——数组删除元素操作汇总
- java编程思想_008产生指定数组类
- java随即产生8位数的密码
- 五个常见的Java编程BUG处理与方法,你知道吗?
- Java学习日志(23-3-网络编程-TCP)
- 阿里巴巴Java 开发手册编程规约之异常日志
- moon 枚举类型 (enum) java编程思想第19章
- 解决IE6浮动元素产生的“双边距”BUG问题及解决办法
- java随即产生8位数的密码
- Java编程:删除 List 元素的三种正确方法
- java随即产生8位数的密码
- java随即产生8位数的密码
- java随即产生8位数的密码