功能

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

展示

 java学习群669823128
 

部分源码

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);
}
}
java学习群669823128

Java局域网对战游戏、天气预报项目的更多相关文章

  1. 27.Java 飞机游戏小项目

    开篇 游戏项目基本功能开发 飞机类设计 炮弹类设计 碰撞检测设计 爆炸效果的实现 其他功能 计时功能 游戏项目基本功能开发 这里将会一步步实现游戏项目的基本功能. 使用 AWT 技术画出游戏主窗口 A ...

  2. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  3. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  4. Java学习路径及练手项目合集

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...

  5. 基于Udp的五子棋对战游戏

    引言 本文主要讲述在局域网内,使用c#基于Udp协议编写一个对战的五子棋游戏.主要从Udp的使用.游戏的绘制.对战的逻辑这三个部分来讲解. 开发环境:vs2013,.Net4.0,在文章的末尾提供源代 ...

  6. 基于Java的开源3D游戏引擎jMonkeyEngine

    jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...

  7. Java实现贪吃蛇游戏(含账号注册登录,排行榜功能)

    这是我第一次工程实践的作业,选题很多,但我只对其中的游戏开发感兴趣,可游戏就两三个类型,最终还是选择了贪吃蛇.其实就贪吃蛇本身的代码实现还算是比较简单的,可是实践要求代码行达到一定数量,所以我就额外给 ...

  8. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  9. ADO.Net(五)——实战:对战游戏

    对战游戏 要求: 自建数据表(例如:数据表包含:代号,姓名,性别,血量,攻击力,防御力,命中,闪避,等级等字段) 需要通过程序向数据表添加人员 添加的时候,根据用户输入的名字,自动计算生成相应的血量. ...

随机推荐

  1. Maven实战--- dependencies与dependencyManagement的区别

    在上一个项目中遇到一些jar包冲突的问题,之后还有很多人分不清楚dependencies与dependencyManagement的区别,本篇文章将这些区别总结下来. 1.DepencyManagem ...

  2. DateTable To Json

    private string aaaa(DataTable dt) { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerial ...

  3. List To Json

    命名空间 using Newtonsoft.Json; 实例代码 /// <summary> /// 将list集合转换为json /// </summary> /// < ...

  4. python继承,判断类型,多态

    1.python中继承 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init_ ...

  5. os包方法

    os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...

  6. CentOS7/6 关闭防火墙

    CentOS6关闭防火墙使用以下命令, //临时关闭 service iptables stop //禁止开机启动 chkconfig iptables off CentOS7中若使用同样的命令会报错 ...

  7. E - Water Distribution

    E - Water Distribution 题目大意: 有\(N\)座城市,给定这\(N\)座城市的坐标和初始的水量\(x_i,y_i,a_i\),在两个城市之间运水的花费是两个城市的欧几里得距离. ...

  8. 进程管理工具supervisor

    1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...

  9. Bellman-Ford算法 - 有向图单源最短路径

    2017-07-27  08:58:08 writer:pprp 参考书目:张新华的<算法竞赛宝典> Bellman-Ford算法是求有向图单源最短路径的,dijkstra算法的条件是图中 ...

  10. java-登陆界面

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...