Java飞翔的鸟

创建三个包,存放代码。把图片放进文件中

APP包(运行)

GameApp类
package APP;
import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();}
}

mian包(主内容)

Barrier 类(障碍物)
package mian;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;import util.Constant;
import util.GameUtil;/** 障碍物类*/
public class Barrier {private Rectangle rect;//小鸟矩形对象//private boolean mob=true;private int speed=3;//障碍物移动速度private static BufferedImage[] imgs;//障碍物需要的三个图片//障碍物的状态private boolean visible;static {final int COUNT=3;//类加载的时候将三个图片化imgs=new BufferedImage[COUNT];for(int i=0;i<COUNT;i++) {imgs[i]=GameUtil.loadBufferedImage(Constant.BARRIER_IMG_PATH[i]);}}private int x,y;//位置private int width,height;//宽度和高度private int type;//障碍物的类型public static final int TYPE_TOP_NORMAL=0;public static final int TYPE_BOTTOM_NORMAL=2;public static final int TYPE_HOVER_NORMAL=4;public static final int TYPE_MOBLIE=6;//获得障碍物的宽带和高度public static final int BARRIRE_WIDTH=imgs[0].getWidth();public static final int BARRIRE_HEIGHT=imgs[0].getHeight();public static final int BARRIRE_HEAD_WIDTH=imgs[1].getWidth();public static final int BARRIRE_HEAD_HEIGHT=imgs[1].getHeight();public Barrier() {rect=new Rectangle();}public Barrier(int x,int y,int height,int type) {this.x=x;this.y=y;this.height=height;this.type=type;this.width=BARRIRE_WIDTH;}//根据不同的类型绘制不同的障碍物public void draw(Graphics g) {switch(type) {case TYPE_TOP_NORMAL:drawTopMormal(g);break;case TYPE_BOTTOM_NORMAL:drawMormalTop(g);break;case TYPE_HOVER_NORMAL:drawHoverNormal(g);break;case TYPE_MOBLIE:drawMobile(g);break;}}//绘制从上向下的障碍物private void drawTopMormal(Graphics g) {//求出所需要的障碍物的块数int count=(height-BARRIRE_HEAD_HEIGHT)/BARRIRE_HEIGHT+1;//for循环绘制障碍物for(int i=0;i<count;i++) {g.drawImage(imgs[0],x,y+i*BARRIRE_HEIGHT, null);}//绘制头int y=height-BARRIRE_HEAD_HEIGHT;g.drawImage(imgs[2],x-(BARRIRE_HEAD_WIDTH-BARRIRE_WIDTH)/2,y, null);x-=speed;if(x<-50) {visible=false;}rect(g);}//绘制从下到上的障碍物private void drawMormalTop(Graphics g) {//求出所需要的障碍物的块数int count=height/BARRIRE_HEIGHT+1;//for循环绘制障碍物for(int i=0;i<count;i++) {g.drawImage(imgs[0],x,Constant.FRAM_HEIGHT-i*BARRIRE_HEIGHT, null);}	//绘制头int y=Constant.FRAM_HEIGHT-height;g.drawImage(imgs[1],x-(BARRIRE_HEAD_WIDTH-BARRIRE_WIDTH)/2,y, null);x-=speed;if(x<-50) {visible=false;}rect(g);}	//绘制中间的障碍物private void drawHoverNormal(Graphics g) {//求出所需要的障碍物的块数int count=(height-BARRIRE_HEAD_HEIGHT)/BARRIRE_HEIGHT;//绘制上头g.drawImage(imgs[1],x,y,null);//for循环绘制障碍物for(int i=0;i<count;i++) {g.drawImage(imgs[0],x,y+BARRIRE_HEAD_HEIGHT+i*BARRIRE_HEIGHT, null);}	rect(g);//绘制下头int y11=y+height-BARRIRE_HEAD_HEIGHT;g.drawImage(imgs[2],x,y11, null);x-=speed;if(x<-50) {visible=false;}}	//绘制中间移动的障碍物private void drawMobile(Graphics g) {//求出所需要的障碍物的块数int count=(height-BARRIRE_HEAD_HEIGHT)/BARRIRE_HEIGHT;//绘制上头g.drawImage(imgs[1],x,y,null);//for循环绘制障碍物for(int i=0;i<count;i++) {g.drawImage(imgs[0],x,y+BARRIRE_HEAD_HEIGHT+i*BARRIRE_HEIGHT, null);}	rect(g);//绘制下头int y11=y+height-BARRIRE_HEAD_HEIGHT;g.drawImage(imgs[2],x,y11, null);x-=speed;if(x<-50) {visible=false;}if(mob) {y+=5;if(y>=250) {mob=false;}}else if(!mob) {y-=5;if(y<=100) {mob=true;}}}	/** 绘制障碍物矩形*/public void rect(Graphics g) {int x1=this.x;int y1=this.y;int w1=imgs[0].getWidth();
//		g.drawRect(x1, y1, w1,height);setRectyangle(x1,y1,w1,height);}/** 障碍物矩形参数*/public void setRectyangle(int x,int y,int width,int height) {rect.x=x;rect.y=y;rect.width=width;rect.height=height;}//判断什么时候绘制下一组障碍物public boolean isInFrame() {return 600-x>150;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getType() {return type;}public void setType(int type) {this.type = type;}public boolean isVisible() {return visible;}public void setVisible(boolean visible) {this.visible = visible;}public Rectangle getRect() {return rect;}}
Barrierpool类(管理池中所有的对象的容器)
package mian;
import java.util.ArrayList;
import java.util.List;/** 为了避免反复的创建和销毁对象,使用对象池来提前创建好一些对象* 使用的时候从池中获得,使用完毕后,归还*/
public class Barrierpool {//用于管理池中所有的对象的容器private static List<Barrier>pool=new ArrayList<>();//池中初始的对象个数public static final int initCount=16;//对象池中最大个数public static final int maxCount=20;static {//初始化池中的对象for(int i=0;i<initCount;i++) {pool.add(new Barrier());}}/** 从池中获取一个对象*/public static Barrier getPool() {int size=pool.size();//如果池中有对象才可以拿if(size>0) {//移除并返回对象System.out.println("拿走一个");return pool.remove(size-1);}else {//如果池中没有对象,只能newSystem.out.println("新的对象");return new Barrier();}}/** 将对象归还容器中*/public static void setPool(Barrier barrier) {if(pool.size()<maxCount) {pool.add(barrier);System.out.println("容器归还了");}}}
Bird(鸟)
package mian;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import static util.Constant.*;
import util.GameUtil;/** 小鸟类*/
public class Bird {//小鸟矩形对象private Rectangle rect;//小鸟加速度private int acceleration;//小鸟的生命值public boolean life=true;//存放小鸟图片private BufferedImage[] images;public static final int BIRD_IMG_COUNT=3;//鸟的状态private int state;public static final int STATE_NORMAR=0;//平着飞public static final int STATE_UP=1;//向上飞public static final int STATE_DOWN=2;//向下飞//小鸟的位置private int x=200,y=200;//小鸟的移动方向 上下private boolean up=false,down=false;//小鸟的移动速度private int speed=4;//构造方法中对资源初始化public Bird() {images=new BufferedImage[BIRD_IMG_COUNT];for(int i=0;i<BIRD_IMG_COUNT;i++) {images[i]=GameUtil.loadBufferedImage(BIRD_IMG[i]);}int w=images[0].getWidth();int h=images[0].getHeight();rect=new Rectangle(w,h);}//绘制小鸟public void draw(Graphics g) {flyLogic();g.drawImage(images[state],x,y, null);//绘制小鸟的矩形
//		g.drawRect(x, y,(int)rect.getWidth(),rect.height);rect.x=this.x;rect.y=this.y;}//控制小鸟移动方向public void flyLogic() {if(up) {acceleration--;y+=acceleration;if(acceleration<-10) {acceleration=-10;}if(y<20) {y=20;acceleration=0;}}if(!up) {acceleration++;y+=acceleration;if(acceleration>10) {acceleration=10;}if(y>475) {y=475;acceleration=0;}}}public void fly(int fly) {switch(fly) {case 1:state=1;up=true;break;case 5:state=2;up=false;break;}}public Rectangle getRect() {return rect;}/** 重新绘制小鸟的位置*/public void restartDraw() {life=true;x=200;y=200;}}
Cloud(云彩)
package mian;
import java.awt.Graphics;
import java.awt.image.BufferedImage;/** 云彩类*/
public class Cloud {private BufferedImage img;//云彩图片private int speed;//云彩速度private int x,y;//云彩位置public Cloud() {}public Cloud(BufferedImage img,int speed,int x,int y) {this.img=img;this.speed=speed;this.x=x;this.y=y;}public void draw(Graphics g) {x-=speed;g.drawImage(img, x, y, null);}/*用于判断云彩是否废除屏幕以外* */public boolean isOutFrame() {if(x<-100) {return true;}return false;}}
GameBackground(游戏背景)
package mian;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;import util.Constant;
import util.GameUtil;/** 游戏背景类*/
public class GameBackground {private BufferedImage bkimg;//背景需要的资源图片//构造器初始化资源public GameBackground() {bkimg=GameUtil.loadBufferedImage(Constant.BK_CATH_OATH);}//绘制图片public  void draw(Graphics g) {//填充背景颜色g.setColor(Constant.BK_COLOR);g.fillRect(0, 0, Constant.FRAM_WIDTH,Constant.FRAM_HEIGHT);g.setColor(Color.black);//得到图片的高宽和宽高int height=bkimg.getHeight();int width=bkimg.getWidth();//循环的次数int count=Constant.FRAM_WIDTH/width+1;for(int i=0;i<count;i++) {g.drawImage(bkimg,width*i,Constant.FRAM_HEIGHT-height, null);}}
}
GameBarrierLayer(游戏中障碍物层) 
package mian;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;/** 游戏中障碍物层*/
public class GameBarrierLayer {private GameTime gameTime;private int txt;private Random random=new Random();private List<Barrier>barriers;public GameBarrierLayer() {barriers=new ArrayList<>();gameTime=new GameTime();}//绘制障碍物public void draw(Graphics g,Bird bird) throws NumberFormatException, IOException {for(int i=0;i<barriers.size();i++) {Barrier barrier=barriers.get(i);if(barrier.isVisible()) {barrier.draw(g);}else {Barrier remove=barriers.remove(i);Barrierpool.setPool(remove);i--;}}collideBird(bird);logic(g);}public void logic(Graphics g) throws NumberFormatException, IOException {if(barriers.size()==0) {ran();gameTime.begin();insert(600,0,numberTop,0);insert(600,500-numberDown,numberDown,2);}else {long differ=gameTime.differ();g.setColor(Color.white);g.setFont(new Font("微软雅黑",1,20));g.drawString("坚持了:"+differ+"秒",30,50);txt=getTxt();if(differ<=txt) {g.drawString("最高成绩:"+txt,200,50);}else {setTxt(String.valueOf(differ));g.drawString("最高成绩:"+getTxt(),200,50);}//判断最后一个障碍物是否完全进入屏幕内Barrier last=barriers.get(barriers.size()-1);if(last.isInFrame()) {ran();if(number<50) {insert(600,32,440,4);}else if(number>450){insert(600,125,200,6);}else {insert(600,0,numberTop,0);insert(600,500-numberDown,numberDown,2);}}}}File file=new File("D:\\飞翔的小鸟.txt");/** 用于得到文件中的数据*/public int getTxt() throws NumberFormatException, IOException {BufferedReader in=new BufferedReader(new FileReader(file));int read=Integer.parseInt(in.readLine());in.close();return read;}/** 用于储存数据*/public void setTxt(String str) throws IOException {FileWriter fileWriter=new FileWriter(file);fileWriter.write(str);fileWriter.close();}/** 用来从池中获取对象,并把参数封装成barrier 存放barriers数组中*/public void insert(int x,int y,int num,int type) {Barrier top=Barrierpool.getPool();top.setX(x);top.setY(y);top.setHeight(num);top.setType(type);top.setVisible(true);barriers.add(top);}private int numberTop;//上方的随即高度private int numberDown;//下方的随即高度private int number;//产生两个100-500之间的随机高度public void ran() {numberTop=random.nextInt(400)+100;numberDown=random.nextInt(400)+100;number=random.nextInt(500);//如果管道重合,则重新随机if(numberTop+numberDown>450) {ran();}}/** 判断障碍物和小鸟碰撞*/public boolean collideBird(Bird bird) {for(int i=0;i<barriers.size();i++) {Barrier barrier=barriers.get(i);//判断是否相交if(barrier.getRect().intersects(bird.getRect())) {System.out.println("撞上啦");bird.life=false;}}return false;}/** 用于清空障碍物的池子*/public void restant() {barriers.clear();}}
GameFrame 
package mian;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;import static util.Constant.*;
import util.Constant;public class GameFrame extends Frame{//实例化GrameBackground类private GameBackground gameBackground;//实例化Bird类private Bird bird;//实例化GameBarrierLayerprivate GameBarrierLayer gameBarrierLayer;//实例化GameFrontground类private GameFrontground gameFrontground;//存放图片的图片private BufferedImage buffimg=new BufferedImage(FRAM_WIDTH,FRAM_HEIGHT,BufferedImage.TYPE_4BYTE_ABGR);//构造方法中初始化一些参数public GameFrame() {setVisible(true);//窗口是否可见setSize(FRAM_WIDTH,FRAM_HEIGHT);//窗体的大小setTitle(FRAM_Ttile);//窗体的标题setLocation(FRAM_x,FRAM_y);//窗体的初始位置setResizable(false);//窗体的大小不可改变//窗口的关闭事件addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);//结束程序}});//初始化游戏对象initGame();new run().start();//添加案件监听器addKeyListener(new KeyAdapter (){public void keyPressed(KeyEvent e) {//super.keyPressed(e);add(e);}public void keyReleased(KeyEvent e) {//super.keyReleased(e);minu(e);}});}//对游戏中的对象初始化public void initGame() {gameBackground=new GameBackground();bird=new Bird();gameFrontground=new GameFrontground();gameBarrierLayer=new GameBarrierLayer();}class run extends Thread{public void run() {while(true) {repaint();try {Thread.sleep(33);	}catch(InterruptedException e) {e.printStackTrace();}}}}/** 所有的我们需要绘制的内容都在此方法中进行调用绘制*/@Overridepublic void update(Graphics g) {if(bird.life) {//得到图片的画笔Graphics graphics=buffimg.getGraphics();gameBackground.draw(graphics);bird.draw(graphics);gameFrontground.draw(graphics);try {gameBarrierLayer.draw(graphics,bird);} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//一次性的将图片绘制到屏幕中g.drawImage(buffimg,0,0,null);}else {String over="游戏结束";g.setColor(Color.red);g.setFont(new Font("微软雅黑",1,60));g.drawString(over,300,250);String reset="Spce Reset Game";g.drawString(reset,25,350);}}//按键public void add(KeyEvent e) {switch(e.getKeyCode()) {case KeyEvent.VK_UP:bird.fly(1);break;case KeyEvent.VK_SPACE:if(bird.life==false) {restart();}break;}}//抬键public void minu(KeyEvent e) {switch(e.getKeyCode()) {case KeyEvent.VK_UP:bird.fly(5);break;}}/** * 重置游戏*/public void restart() {gameBarrierLayer.restant();bird.restartDraw();}}
GameTime(计时)
package mian;
/** 计时类*/
public class GameTime {private long begingTime;//开始private long endTime;//结束private long differ;//时间差public GameTime() {}public void begin() {begingTime=System.currentTimeMillis();}public long differ() {endTime=System.currentTimeMillis();return differ=(endTime-begingTime)/1000;}
}

util(窗体)

Constant 
package util;import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;import javax.imageio.ImageIO;public class GameUtil {public static BufferedImage loadBufferedImage(String imgpath) {try {return ImageIO.read(new FileInputStream(imgpath));}catch(IOException e){e.printStackTrace();}return null;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python获取json所有节点和子节点

使用python获取json的所有父结点和子节点 并使用父节点加下划线命名子节点 先展示一段json代码 {"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_…

电力行业的智能调度:数字孪生技术

随着科技的发展&#xff0c;数字孪生技术正逐渐渗透到各个行业领域&#xff0c;其中包括电力行业。数字孪生技术为电力行业带来了前所未有的机遇&#xff0c;使得电力系统的运行更加高效、安全和可持续。本文借用山海鲸可视化软件几个电力行业数字孪生案例探讨数字孪生技术在电…

介绍几种Go语言开发的IDE

文章目录 1.前言2.几种ide2.1 Goland2.2 VsCode示例 2.3 LiteIDE2.4 Eclipse插件GoClipse2.5 Atom2.6 Vim2.7 Sublime Text 3.总结写在最后 1.前言 Go语言作为一种新兴的编程语言&#xff0c;近年来受到了越来越多的关注。 它以其简洁、高效和并发性能而闻名&#xff0c;被广…

Jmeter 压测保姆级入门教程

1、Jmeter本地安装 1.1、下载安装 软件下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 选择一个压缩包下载即可 然后解压缩后进入bin目录直接执行命令jmeter即可启动 1.2 修改语言 默认是英文的&#xff0c;修改中文&#xff0c;点击…

关于解决C# WinForm中Chart控件增删数据时报错的解决方法

1.报错代码 System.InvalidOperationExceptionHResult=0x80131509Message=集合已修改;可能无法执行枚举操作。具体报错表现为,在Application.Run(Form1())中断。 2.解决方法 这个错误通常是由于在枚举集合时对集合进行了修改而引起的。在修改完chart控件中的内容后,可能会…

Linux---常用命令汇总

文章目录 关于目录操作的命令ls/llcdpwdmkdir 关于文件操作的命令touchechocatrmmvcpvim 关于查询操作的命令greppsnetstat 关于目录操作的命令 ls/ll ls : 列出当前目录下的目录和文件&#xff08;以行的展示形式&#xff09; ll &#xff1a; 列出当前目录下的目录和文件&…

Django之Cookie与Session,CBV加装饰器

前言 会话跟踪技术 在一个会话的多个请求中共享数据&#xff0c;这就是会话跟踪技术。例如在一个会话中的请求如下&#xff1a;  请求银行主页&#xff1b; 请求登录&#xff08;请求参数是用户名和密码&#xff09;&#xff1b;请求转账&#xff08;请求参数与转账相关的数…

Thread类常用成员方法

点击链接返回标题-> Java线程的学习-CSDN博客 目录 前言 有关线程名字的成员方法&#xff1a; String getName() void setName(String name) Thread(String name) 获取线程对象的成员方法&#xff1a; static Thread currentThread() 让线程睡眠的成员方法&#xff1…

时间序列分析算法的概念、模型检验及应用

时间序列分析是一种用于研究随时间变化的数据模式和趋势的统计方法。这类数据通常按照时间顺序排列&#xff0c;例如股票价格、气温、销售额等。时间序列分析的目标是从过去的观测中提取信息&#xff0c;以便预测未来的趋势。 以下是关于时间序列分析的一些重要概念、模型检验…

python 数据类型之集合

常见的数据类型&#xff1a; int&#xff0c;整数类型&#xff08;整形&#xff09;bool&#xff0c;布尔类型str&#xff0c;字符串类型list&#xff0c;列表类型tuple&#xff0c;元组类型dict&#xff0c;字典类型&#xff0c;一个容器且元素必须是键值对。set&#xff0c;…

I Doc View在线文档预览系统RCE漏洞(QVD-2023-45061)

0x01 产品简介 iDocView是一个在线文档解析应用&#xff0c;旨在提供便捷的文件查看和编辑服务。 0x02 漏洞概述 漏洞成因 本次漏洞出现在在线文档解析应用中的远程页面缓存功能。具体问题在于该应用未能对用户输入的URL进行充分的安全验证&#xff0c;从而导致存在安全隐患…

前端实现菜单快速检索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

红队攻防实战之内网穿透隐秘隧道搭建

别低头&#xff0c;皇冠会掉&#xff1b;别流泪&#xff0c;贱人会笑。 本文首发于先知社区&#xff0c;原创作者即是本人 0x00 前言 构建内网隐蔽通道&#xff0c;从而突破各种安全策略限制&#xff0c;实现对目标服务器的完美控制。 当我们从外网成功获得攻击点的时候&…

SAP BAPI For LU01/LU04 记账更改

场景&#xff1a;采购收货质检放行的时候&#xff0c;发现存在有些做QA11的时候&#xff0c;进入到TR-ZONE中&#xff0c;没有进入到指定的仓位 解决方案&#xff1a;前端通过LU04进入&#xff0c;可以查看到一些未清的记账更改通知单&#xff0c;点击工具栏上的创建转储单&am…

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/3)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

新的预测模型的局部评价指标-pAUROCc

新的预测模型的局部评价指标-pAUROCc Background 局部评价主要是用在不平衡数据上&#xff0c;其合理性&#xff1a;1.局部评价比全局评价敏感&#xff0c;更容易区分模型的优劣&#xff1b;2.临床决策曲线&#xff08;DCA&#xff09;可知&#xff0c;模型使用过程中&#x…

什么是JSX

在React组件中&#xff0c;JSX&#xff08;JavaScript XML&#xff09;是一种语法扩展&#xff0c;用于描述组件的结构和外观。JSX允许我们在JavaScript中编写类似HTML的标记语言&#xff0c;以创建React元素。 在React组件中&#xff0c;render方法是用于定义并返回组件的结构…

HarmonyOS开发(六):构建简单页面

1、Column&Row组件 1.1、概述 一个页面由很多组件组成&#xff0c;如果需要把这些组件组织起来布局好&#xff0c;需要借助容器组件来实现。 容器组件是一种特殊的组件&#xff0c;它可以包含其他组件&#xff0c;而且按照一定的规律布局&#xff0c;一个容器组件中可以…

Linux--初识和基本的指令(2)

目录 前言 1. 指令 1.1 cd其它携带指令 1.2 ls其它携带指令 1.3 which指令 1.4 alias指令 1.5 mkdir其他携带指令 1.7 yum -y install 安装指令 1.8 stat指令 1.9解决指令失控状态 1.10 rmdir&&rm指令 1.11 man指令 1.12 cp指令 1.13 mv指令 1.14 nano…

vue项目引入中国地图

先安装有china.js的版本 npm install echarts4.8 --save //以前的版本有china.js <template><div class"mapMain"><div id"map" style"width: 30vw; height: 30vw;" /></div> </template><script>//引入文…