功能

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. s5_day11作业

    # 1 文件内容如下,标题为:姓名,性别,年纪,薪资 # # egon male 18 3000 # alex male 38 30000 # wupeiqi female 28 20000 # yu ...

  2. GIT学习笔记(5):变基

    GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...

  3. Mac下 javac java 进行编译和运行含有包路径及引入jar包的类

    近两天因为刚入职,属于熟悉环境的阶段,研究了下算法(第四版),当不使用IDE工具直接使用终端进行javac 编译带有包的类,然后使用java 会出现如下错误提示: 使用谷歌搜索了很久,终于找到解决的办 ...

  4. URAL - 1900 Brainwashing Device

    While some people travel in space from planet to planet and discover new worlds, the others who live ...

  5. VS2012安装完成之后,用自带的Blend无法创建WPF项目,打开WPF项目无法设计

    Visual Studio 2012安装完成之后, 打开自带的Blend for Visual Studio 无法创建新的WPF或者Silverlight项.打开WPF项目无法编辑的原因: 1.VS自 ...

  6. 《Pro Git》第2章 Git基础

    1.获取Git仓库 1.1从现有的目录中初始化仓库 进入项目目录,git init,会创建一个名为.git的子目录 1.2克隆现有的仓库 git clone [url],会将远程Git仓库中的每一个文 ...

  7. 一个线程知识点, 一个MongoDB的知识点

    //WINForm窗体中切换前后台线程执行任务: protected void RunOnUI(Action action) { Invoke(action); } protected void Ru ...

  8. [SHOI2013]发微博

    Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ​ ! x 表示用户x发了一条微博: ​ + x y 表示用户x ...

  9. Windows7中pagefil.sys和Hiberfil.sys文件删除与转移

    第一步.在开始的功能表的搜索栏里输入 cmd,然后在搜索结果中的 cmd 按下右键,点选[以系统管理员身分运行] 第二步.在命令提示符窗口里输入下面命令然后按下Enter: powercfg –h o ...

  10. spark SQL学习(load和save操作)

    load操作:主要用于加载数据,创建出DataFrame save操作:主要用于将DataFrame中的数据保存到文件中 代码示例(默认为parquet数据源类型) package wujiadong ...