交换、消除、填补算法
public void setExchange() {
if (isSelected) {
isExchange = true;
isSelected = false;
doExchange();
}
}
private void moveRightDown() {
if (currentX == BODY_W - 1 || currentY == BODY_H - 1) {
isSelected = false;
}
currentX = ++currentX % BODY_W;
currentY = ++currentY % BODY_H;
setExchange();
}
private void moveLeftDown() {
if (currentX == 0 || currentY == BODY_H - 1) {
isSelected = false;
}
currentX = (--currentX + BODY_W) % BODY_W;
currentY = ++currentY % BODY_H;
setExchange();
}
private void moveRightUp() {
if (currentY == 0 || currentX == BODY_W - 1) {
isSelected = false;
}
currentX = ++currentX % BODY_W;
currentY = (--currentY + BODY_H) % BODY_H;
setExchange();
}
private void moveLeftUp() {
if (currentX == 0 || currentY == 0) {
isSelected = false;
}
currentX = (--currentX + BODY_W) % BODY_W;
currentY = (--currentY + BODY_H) % BODY_H;
setExchange();
}
private void moveUp() {
if (currentY == 0) {
isSelected = false;
}
currentY = (--currentY + BODY_H) % BODY_H;
setExchange();
}
private void moveDown() {
if (currentY == BODY_H - 1) {
isSelected = false;
}
currentY = ++currentY % BODY_H;
setExchange();
}
private void moveLeft() {
if (currentX == 0) {
isSelected = false;
}
currentX = (--currentX + BODY_W) % BODY_W;
setExchange();
}
private void moveRight() {
if (currentX == BODY_W - 1) {
isSelected = false;
}
currentX = ++currentX % BODY_W;
setExchange();
}
private void doExchange() {
if (currentX - selectedX == -1) {
if (currentY - selectedY == -1) {
tempMove[currentX][currentY] = 9;
tempMove[selectedX][selectedY] = 1;
} else if (currentY - selectedY == 0) {
tempMove[currentX][currentY] = 6;
tempMove[selectedX][selectedY] = 4;
} else if (currentY - selectedY == 1) {
tempMove[currentX][currentY] = 3;
tempMove[selectedX][selectedY] = 7;
}
} else if (currentX - selectedX == 0) {
if (currentY - selectedY == -1) {
tempMove[currentX][currentY] = 8;
tempMove[selectedX][selectedY] = 2;
} else if (currentY - selectedY == 1) {
tempMove[currentX][currentY] = 2;
tempMove[selectedX][selectedY] = 8;
}
} else if (currentX - selectedX == 1) {
if (currentY - selectedY == -1) {
tempMove[currentX][currentY] = 7;
tempMove[selectedX][selectedY] = 3;
} else if (currentY - selectedY == 0) {
tempMove[currentX][currentY] = 4;
tempMove[selectedX][selectedY] = 6;
} else if (currentY - selectedY == 1) {
tempMove[currentX][currentY] = 1;
tempMove[selectedX][selectedY] = 9;
}
}
int temp = body[selectedX][selectedY];
body[selectedX][selectedY] = body[currentX][currentY];
body[currentX][currentY] = temp;
}
分享到:
2011-07-19 11:18
浏览 2338
评论
2 楼
programming
2011-09-20
meimei35 写道
楼主,谢谢分享。我想问下玩家已经不能消去任何图标时,将清空游戏池,用新的图标填充,这个要怎么判断没有消去的图标?
一种:横向扫一遍,纵向扫一遍,遇到可以消去则跳出,
第二各种:对这个生成数据结构进行统计。
1 楼
meimei35
2011-09-19
楼主,谢谢分享。我想问下玩家已经不能消去任何图标时,将清空游戏池,用新的图标填充,这个要怎么判断没有消去的图标?