Java贪食蛇编程日志(一) 随即产生Enum元素的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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值