⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 updatetrackfunction.java

📁 一套MMORPG手机网络游戏的服务端
💻 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 + -