📄 updatetrackfunction.java
字号:
package com.swing.game.crystal.function;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.swing.game.crystal.CrystalPlayer;
import com.swing.server.common.GameFunction;
import com.swing.game.crystal.*;
import com.swing.game.crystal.utils.SingleMap;
public class UpdateTrackFunction extends GameFunction {
public static Logger logger = Logger.getLogger(UpdateTrackFunction.class);
static {
PropertyConfigurator.configure("./cfg/Log4j.properties");
}
public List handleRequest(String player, String message) {
String[] request = message.split(CrystalController.SPLITTER_2);
if (request.length > 1) {
synchronized (gc.playersByPlayerId) {
for (Iterator iter = gc.playersByPlayerId
.values().iterator(); iter.hasNext();) {
CrystalPlayer u = (CrystalPlayer) iter.next();
if (!u.id.equals(player))
u.addUserTrack(player, request[1]);
// update this user's position data using the track data
else {
u.time = System.currentTimeMillis(); ////////////////
updatePos(u, request[1]);
}
}
}
}
return new ArrayList();
}
private void updatePos(CrystalPlayer u, String track) {
int status = 0;
int direction = 0;
int step = 0;
StringBuffer sb = new StringBuffer();
SingleMap m = (SingleMap) CrystalController.MapDatas
.get("" + u.mapCode);
// n1s1w1e1
for (int i = 0; i < track.getBytes().length; i++) {
switch (track.charAt(i)) {
case 'n':
if (status == 0) {
status = 1;
direction = 'n';
} else if (status == 1) {
step = Integer.parseInt(sb.toString());
change(u, step, direction, m.width, m.height);
direction = 'n';
sb.delete(0, sb.length());
}
break;
case 's':
if (status == 0) {
status = 1;
direction = 's';
} else if (status == 1) {
step = Integer.parseInt(sb.toString());
change(u, step, direction, m.width, m.height);
direction = 's';
sb.delete(0, sb.length());
}
break;
case 'w':
if (status == 0) {
status = 1;
direction = 'w';
} else if (status == 1) {
step = Integer.parseInt(sb.toString());
change(u, step, direction, m.width, m.height);
direction = 'w';
sb.delete(0, sb.length());
}
break;
case 'e':
if (status == 0) {
status = 1;
direction = 'e';
} else if (status == 1) {
step = Integer.parseInt(sb.toString());
change(u, step, direction, m.width, m.height);
direction = 'e';
sb.delete(0, sb.length());
}
break;
default:
if (status == 1)
sb.append(track.charAt(i));
break;
}
}
step = Integer.parseInt(sb.toString());
change(u, step, direction, m.width, m.height);
}
private void change(CrystalPlayer u, int step, int direction, int width,
int height) {
switch (direction) {
case 'n':
u.mapYPosition -= step;
if (u.mapYPosition < 0)
u.mapYPosition = 0;
break;
case 's':
u.mapYPosition += step;
if (u.mapYPosition >= height)
u.mapYPosition = height - 1;
break;
case 'w':
u.mapXPosition -= step;
if (u.mapXPosition < 0)
u.mapXPosition = 0;
break;
case 'e':
u.mapXPosition += step;
if (u.mapXPosition >= width)
u.mapYPosition = width - 1;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -