Java局域网对战游戏、天气预报项目

来源:互联网 发布:象棋旋风软件下载 编辑:程序博客网 时间:2024/04/28 07:22

功能

1.天气预报
2.局域网对战

展示

微信公众号:JavaWeb架构师

部分源码

package game.weather;import java.util.HashMap;public class Weather {    /**     * @Fields 今天的天气数据,整体     */    private JSONObject today;    /**     * @Fields 今天的天气指数 index第一个String是指数中文名,index的Map键值为"ivalue" "detail";     */    private JSONArray index;    /**     * @Fields 一周的天气,JSONObject:"night" "day";     */    private JSONArray daily;    private JSONArray hourly;    private JSONObject aqi;    /**     *      * @Title: getSubJSONObject @Description: TODO(这里用一句话描述这个方法的作用) @param     * JSONObject obj ,String key @return JSONObject 返回类型 @throws     */    public JSONObject getToday(JSONObject obj) {        return today = (JSONObject) obj;    }    public JSONArray getIndex(JSONObject obj){        return index = (JSONArray) obj.get("index");    }    public JSONArray getDaily(JSONObject obj) {        return daily = (JSONArray) obj.get("daily");    }    public JSONArray getHourly(JSONObject obj){        return hourly = (JSONArray) obj.get("hourly");    }    public JSONObject getAqi(JSONObject obj){        return aqi = obj.getJSONObject("aqi");    }    public static JSONObject getSubJSONObject(JSONObject obj, String key) {        Object obj2 = obj.get(key);        if (obj2 instanceof JSONObject) {            return (JSONObject) obj2;        } else {            System.out.println(key + "不是一个JSONObject");        }        return null;    }    public static JSONObject ipToWeather(String ip) {        String host = "http://jisutqybmf.market.alicloudapi.com";        String path = "/weather/query";        String method = "GET";        String appcode = "8c97675e6493491d8153093a1facdc0e";        Map<String, String> headers = new HashMap<String, String>();        headers.put("Authorization", "APPCODE " + appcode);        Map<String, String> querys = new HashMap<String, String>();        // System.out.println(ip);        querys.put("ip", ip);//      Map<String, String> res = new HashMap<>();        try {            HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);            // 获取response的body            System.out.println("111");            String json = EntityUtils.toString(response.getEntity());            // json = (json == null)? "{}":json;            System.out.println("222");            if (json.equals("")) {                System.out.println("333");                return null;            }            System.out.println(json);            // 解析json            JSONObject obj = JSONObject.fromString(json);            String ret = (String) obj.get("msg");            if (ret.equals("ok")) {                // 获取result里的json数据                String ret2 = obj.getString("result");                JSONObject obj2 = JSONObject.fromString(ret2);//              // 直接提取数据,城市//              String value = obj2.getString("city");//              res.put("city", value);//              // 日期//              value = obj2.getString("date");//              res.put("date", value);//              // 周次//              value = obj2.getString("week");//              res.put("week", value);//              // 天气//              value = obj2.getString("weather");//              res.put("weather", value);//              // 温度//              value = obj2.getString("temp");//              res.put("temp", value);////              analysisJson(obj2);                return obj2;            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    // 递归解析JSON    private static void analysisJson(JSONObject obj) {        Iterator keys = obj.keys();        while (keys.hasNext()) {            String keyName = keys.next().toString();            Object obj2 = obj.get(keyName);            if (obj2 instanceof JSONObject) {                analysisJson((JSONObject) obj2);            } else if (obj2 instanceof JSONArray) {                for (int i = 0; i < ((JSONArray) obj2).length(); ++i) {                    JSONObject obj3 = ((JSONArray) obj2).getJSONObject(i);                    System.out.println("[");                    analysisJson(obj3);                    System.out.println("]");                }            } else {                System.out.println(keyName + ": " + (String) obj2);            }        }    }    public static void main(String[] args) {        Weather.ipToWeather("119.75.217.109");    }}
package game.ui;import java.awt.geom.Rectangle2D;/** *  * @ClassName: Main * @Description: 游戏启动界面 * @author: Administrator * @date: 2017年7月5日 下午6:37:53 */public class Main extends Application {    /**     * 滚动信息的总条数     */    private static final int countLabel = 23;    /**     * 背景的WebView     */    private WebView w;    /**     * 按下鼠标时的x     */    private double xOffset;    /**     * 按下鼠标开始拖动窗体时的x     */    private double startX;    /**     * 按下鼠标开始拖动窗体时的y     */    private double startY;    /**     * 按下鼠标时的y     */    private double yOffset;    /**     * 川师一区     */    private ToggleButton cs1;    /**     * 川师二区     */    private ToggleButton cs2;    /**     * 屏幕宽度     */    private static final int width = 1000;    /**     * 屏幕高度     */    private static final int hight = 655;    /**     * 按钮互斥组     */    ToggleGroup csGroup = new ToggleGroup();    /**     * Web引擎     */    WebEngine webEngine;    /**     * 滚动信息的Label存储List     */    List<Label> rollInfor = new ArrayList<>();    /**     * 加载fxml的root     */    Parent root;    /**     * 存放滚动和信息的VBox     */    private VBox rollBox;    /**     * 主舞台     */    private Stage primaryStage;    /**     * 开始游戏按钮     */    private Button startG;    /**     * 播放声音的线程     */    private Thread thradePlay;    /**     * 旋转     */    private RotateTransition rotateTransition;    /**     * 声音     */    private String[] soundPath = { "sound//start1.wav", "sound//start2.wav", "sound//start3.wav" };    /**     * 退出游戏     */    private Button exitButton;    /**     * 健康按钮     */    private Button healthButton;    /**     * 设置按钮     */    private Button setButton;    private GridPane mainPane;    private LineChart<Number, Number> lineChart;    XYChart.Series series;    private Axis<Number> xAxis;    private Axis<Number> yAxis;    private WebView bgWeb;    private WebEngine bgEngine;    private GridPane gp;    /*     * (non Javadoc)     *      * @Title: start     *      * @Description: 舞台初始化     *      * @param primaryStage     *      * @see javafx.application.Application#start(javafx.stage.Stage)     */    @Override    public void start(Stage primaryStage) {        try {            primaryStage.getIcons().add(new Image(new File("img//icon.png").toURL().toString()));            primaryStage.setTitle("血战川师实验楼");            this.primaryStage = primaryStage;            Parent root = FXMLLoader.load(getClass().getResource("/game/ui/main.fxml"));            this.root = root;            Scene scene = new Scene(root);            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());            primaryStage.setScene(scene);            // 加载组件            loadModule(root);            // 加载网页            loadHTML("start//index.html",webEngine);            // 加载提示信息            loadRollInfor();            // 窗口关闭            closeWindow();            // 进入游戏点击事件            clickedStartG();            // 播放声音            CSTool.playSound("sound//introduce.wav");            thradePlay = new Thread(new CSTool.PlaySound(soundPath));            thradePlay.start();            // 关闭窗口            clickedExit();            // 健康按钮            clickedHealth();            // 设置按钮            clickedSet();            // 天气旋转//          transWeather();            // 创建图标            createChat();            // 滚动控制            rollLabel();            // Stage设置            prepareStage(primaryStage);        } catch (Exception e) {            e.printStackTrace();        }    }    private void createChat() {        // 定义序列对<x,y>        series = new XYChart.Series();        // 把序列对添加到坐标系        lineChart.getData().add(series);        lineChart.setLayoutY(100);    }////  private void transWeather() {////      try {//          weaherIV.setImage(new Image(new File("img//head.png").toURL().toString()));//      } catch (MalformedURLException e) {//          // TODO 自动生成的 catch 块//          e.printStackTrace();//      }////      weaherIV.setFitWidth(200);//      weaherIV.setFitHeight(200);//      rotateTransition = RotateTransitionBuilder.create().node(weaherIV).duration(Duration.seconds(4))//              .axis(new Point3D(0, 100, 0)).fromAngle(0).toAngle(180).cycleCount(Timeline.INDEFINITE)//              .autoReverse(true).build();//      rotateTransition.play();//  }    /**     *      * @Title: loadModule     * @Description: 从root寻找组件     * @param root     * @return: void     */    private void loadModule(Parent root) {        gp = (GridPane) root.lookup("#gp");        // 背景webView        bgWeb = (WebView) root.lookup("#bgWeb");        bgEngine = bgWeb.getEngine();        // 加载WebView        w = (WebView) root.lookup("#w");        // 加载WebViewEngine        webEngine = w.getEngine();        // 川师一区        cs1 = (ToggleButton) root.lookup("#cs1");        // 川师二区        cs2 = (ToggleButton) root.lookup("#cs2");        // 互斥按钮组        cs1.setToggleGroup(csGroup);        cs2.setToggleGroup(csGroup);        // 提示消息        rollBox = (VBox) root.lookup("#rollBox");        // 进入游戏        startG = (Button) root.lookup("#startG");        // 退出游戏        exitButton = (Button) root.lookup("#exitButton");        // 健康按钮        healthButton = (Button) root.lookup("#healthButton");        // 设置按钮        setButton = (Button) root.lookup("#setButton");        // 天气View//      weaherIV = (ImageView) root.lookup("#weaherIV");        // 折线图        lineChart = (LineChart<Number, Number>) root.lookup("#lineChart");        // y轴        yAxis = (NumberAxis) root.lookup("#yAxis");        // x轴        xAxis = (NumberAxis) root.lookup("#xAxis");    }    /**     *      * @Title: clickedStartG     * @Description: 点击进入游戏事件     * @return: void     */    private void clickedStartG() {        // 登录        if (startG != null) {            startG.setOnMouseClicked((MouseEvent event) -> {                // 启动客户端                new TankClient().launchFrame();//              primaryStage.close();                // new TankClient().lauchFrame();//              primaryStage.hide();                if (thradePlay.isAlive()) {                    thradePlay.stop();                }            });        }    }    /**     *      * @Title: clickedExit     * @Description: 退出按钮     * @return: void     */    private void clickedExit() {        // 退出        if (exitButton != null) {            exitButton.setOnMouseClicked((MouseEvent event) -> {                System.exit(0);            });        }    }    /**     *      * @Title: closeWindow     * @Description: 关闭窗口     * @return: void     */    private void closeWindow() {        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {            @Override            public void handle(WindowEvent event) {                System.exit(0);            }        });    }    /**     *      * @Title: clickedExit     * @Description: 退出按钮     * @return: void     */    private void clickedHealth() {        // 健康        if (healthButton != null) {            healthButton.setOnMouseClicked((MouseEvent event) -> {                new Health().start(new Stage());            });        }    }    /**     *      * @Title: clickedSet     * @Description: 设置按钮     * @return: void     */    private void clickedSet() {        // 设置        if (setButton != null) {            setButton.setOnMouseClicked((MouseEvent event) -> {                System.out.println("设置按钮");                loadHTML("bg//index.html",bgEngine);                rotateTransition = RotateTransitionBuilder.create().node(gp).duration(Duration.seconds(4))                        .axis(new Point3D(0, 100, 0)).fromAngle(0).toAngle(180).cycleCount(2)                        .autoReverse(true).build();                rotateTransition.play();            });        }    }    /**     *      * @Title: rollLabel     * @Description: 滚动信息控制     * @return: void     */    private void rollLabel() {        Timer timer = new Timer();        timer.scheduleAtFixedRate(new TimerTask() {            int countChat = 1;            int countWeb = 0;            int i = 1;            @Override            public void run() {                while (true) {                    Platform.runLater(() -> {                        rollBox.getChildren().clear();                        if (countWeb == 20) {                            countWeb = 1;                            series.getData().clear();                            countChat = 0;                            loadHTML("start//index.html",webEngine);                        }                        ++countWeb;                    });                    Platform.runLater(() -> {                        XYChart.Data xy = new XYChart.Data(i, Math.random() * 1000);                        series.getData().add(xy);                    });                    ++countChat;                    int j = 1;                    while (j <= countLabel) {                        if (i >= countLabel) {                            i = i % countLabel;                        }                        Label l = rollInfor.get(i);                        Platform.runLater(() -> {                            rollBox.getChildren().add(l);                        });                        ++i;                        ++j;                    }                    ++i; // next作为current                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        // TODO 自动生成的 catch 块                        e.printStackTrace();                    }                }            }        }, 1000, 5000);    }    /**     *      * @Title: loadRollInfor     * @Description: 滚动信息设置     * @return: void     */    private void loadRollInfor() {        // 1        rollInfor.add(new Label("欢迎来到血战川师实验楼!"));        // 2        rollInfor.add(new Label("您是第1024位玩家!"));        // 3        rollInfor.add(new Label("玩家枸杞子加入游戏!"));        // 4        rollInfor.add(new Label("玩家孤独求败加入游戏!"));        // 5        rollInfor.add(new Label("玩家晓风寒月加入游戏!"));        // 6        rollInfor.add(new Label("川师第一实验楼失守!"));        // 7        rollInfor.add(new Label("川师第二实验楼受到第一轮进攻!"));        // 8        rollInfor.add(new Label("抵制盗版游戏!"));        // 9        rollInfor.add(new Label("游戏有害健康"));        // 10        rollInfor.add(new Label("每日限制登录4小时!"));        // 11        rollInfor.add(new Label("川师第二实验楼受到第二轮进攻!"));        // 12        rollInfor.add(new Label("玩家枸杞子取得狗头一个!"));        // 13        rollInfor.add(new Label("新枪支黄金战枪上线"));        // 14        rollInfor.add(new Label("活动期间,购买商品价格减半"));        // 15        rollInfor.add(new Label("玩家阡陌上线!"));        // 16        rollInfor.add(new Label("您已登录5小时,请注意合理游戏!"));        // 17        rollInfor.add(new Label("有版本可更新,请下载!"));        // 18        rollInfor.add(new Label("由于苹果商店限制,已取消热更新功能!"));        // 19        rollInfor.add(new Label("川师第一实验楼已被修复!"));        // 20        rollInfor.add(new Label("川师第二实验楼失守!"));        // 21        rollInfor.add(new Label("川师第三实验楼受到第一轮进攻!"));        // 22        rollInfor.add(new Label("您的账号近期出现异地登录,请尽快修改密码!"));        // 23        rollInfor.add(new Label("川师一区开服!"));        for (int i = 0; i < countLabel; ++i) {            rollBox.getChildren().add(rollInfor.get(i));        }    }    /**     *      * @Title: prepareStage     * @Description: 舞台准备     * @param primaryStage     * @return: void     */    private void prepareStage(Stage primaryStage) {        primaryStage.setResizable(false);        primaryStage.setWidth(width);        primaryStage.setHeight(hight);        primaryStage.show();    }    /**     *      * @Title: loadHTML     * @Description: 加载HTML网页     * @param filePath     * @return: void     */    private void loadHTML(String filePath,WebEngine webEngine) {        try {            File file = new File(filePath);            if (file.exists()) {                System.out.println("00");            }            webEngine.load(file.toURL().toString());        } catch (MalformedURLException e) {            e.printStackTrace();        }        w.setMinWidth(width);        w.setMinHeight(hight);    }    /**     *      * @Title: snapshot     * @Description: 网页截图     * @param view     * @return: void     */    public void snapshot(Node view) {        Image image = view.snapshot(null, null);        try {            System.out.println("sdsds");            ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png",                    new File("f:\\" + System.currentTimeMillis() + ".png"));        } catch (IOException e) {            e.printStackTrace();        }    }    /**     *      * @Title: noBorderMove     * @Description: 无边框,可移动     * @param primaryStage     * @param root     * @return: void     */    private void noBorderMove(Stage primaryStage, Parent root) {        primaryStage.initStyle(StageStyle.UNDECORATED);// 设定窗口无边框        // 可拖动        root.setOnMousePressed((MouseEvent event) -> {            event.consume();            xOffset = event.getScreenX();            startX = primaryStage.getX();            startY = primaryStage.getY();            yOffset = event.getScreenY();            // System.out.println(xOffset + ":" + yOffset);        });        // root.setOnMouseDragEntered        root.setOnMouseDragged((MouseEvent event) -> {            // System.out.println(event.getSceneX() + "-" + event.getSceneY());            double xx = event.getScreenX();            double yy = event.getScreenY();            double x = xx - xOffset + startX;            double y = yy - yOffset + startY;            primaryStage.setX(x);            primaryStage.setY(y);        });    }    // 自己实现多线程调用截屏,较麻烦    private class Snap implements Runnable {        public void run() {            while (true) {                try {                    Thread.sleep(1000);// 该命令不可直接在Fx用户线程执行,否则会导致前台的渲染线程暂停,页面不会被加载                    Platform.runLater(new Runnable() {                        @Override                        public void run() {                            snapshot(w);// 在后台线程中不可以直接操作UI,需要借助runLater                        }                    });                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }    /**     *      * @Title: main     * @Description: 主函数     * @param args     * @return: void     */    public static void main(String[] args) {        launch(args);    }}

其它

  • 源码下载
关注下方公众号,选择开源项目菜单
  • 欢迎加入交流群:451826376

  • 更多信息:www.itcourse.top

完整教程PDF版本下载

阅读全文
0 0
原创粉丝点击