{"id":338,"date":"2012-06-14T14:36:12","date_gmt":"2012-06-14T06:36:12","guid":{"rendered":"http:\/\/wangkaixuan.tech\/?p=338"},"modified":"2020-06-06T14:38:35","modified_gmt":"2020-06-06T06:38:35","slug":"java-%e5%9d%a6%e5%85%8b%e5%a4%a7%e6%88%98%e5%8d%95%e6%9c%ba%e7%89%88-%e6%ba%90%e4%bb%a3%e7%a0%81","status":"publish","type":"post","link":"http:\/\/www.wangkaixuan.tech\/?p=338","title":{"rendered":"Java \u5766\u514b\u5927\u6218\u5355\u673a\u7248 \u6e90\u4ee3\u7801"},"content":{"rendered":"\n<p>\u5c1a\u5b66\u5802\u7248\u672c\u7684\u4fee\u6539\u7248<\/p>\n\n\n\n<p>\u73a9\u6cd5\uff1a<br>\u65b9\u5411\u952e\uff1a\u63a7\u5236\u8d70\u52a8<br>Ctrl\uff1a\u63a7\u5236\u53d1\u5f39<br>A\uff1a\u8d85\u7ea7\u5b50\u5f39<br>X\uff1a\u516b\u65b9\u5411\u53d1\u5f39<br>=\uff1a\u6dfb\u52a0\u654c\u65b9\u5766\u514b<br>F2\uff1a\u91cd\u65b0\u5f00\u59cb<br>\u5176\u4ed6\u529f\u80fd\uff1a<br>\u5728\u5934\u4e0a\u5b9e\u65f6\u663e\u793a\u8840\u6761<br>\u5403\u5230\u8840\u5757\u65f6\u80fd\u8865\u8840<br>\u81ea\u52a8\u79ef\u5206<br>\u654c\u65b9\u5766\u514b\u8fc7\u5c11\u65f6\u81ea\u52a8\u6dfb\u52a0<br>\u6536\u83b7\uff1a<br>\u7cfb\u7edf\u590d\u4e60\u4e86J2SE\u7684\u57fa\u672c\u4e0a\u6240\u6709\u5185\u5bb9<br>\u5bf9\u8f6f\u4ef6\u5de5\u7a0b\u7684\u7406\u89e3\u8fdb\u4e00\u6b65\u52a0\u6df1<br>\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u601d\u60f3\u53ca\u5176\u4f18\u70b9\u8fdb\u4e00\u6b65\u52a0\u6df1<br>\u719f\u6089\u4e86eclipse\u7684\u4f7f\u7528\uff0c\u5305\u62ec\u6253\u5305\u53d1\u5e03\u4ee5\u53caDoc\u7684\u751f\u6210<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"811\" height=\"606\" src=\"http:\/\/wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/1.png\" alt=\"\" class=\"wp-image-339\" srcset=\"http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/1.png 811w, http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/1-300x224.png 300w, http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/1-768x574.png 768w, http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/1-361x270.png 361w\" sizes=\"auto, (max-width: 811px) 100vw, 811px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"570\" src=\"http:\/\/wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/2.png\" alt=\"\" class=\"wp-image-340\" srcset=\"http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/2.png 1024w, http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/2-300x167.png 300w, http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/2-768x428.png 768w, http:\/\/www.wangkaixuan.tech\/wp-content\/uploads\/2020\/06\/2-485x270.png 485w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u6e90\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/TankClient.java\n \npackage edu.wkx;\nimport java.awt.Color;\nimport java.awt.Frame;\nimport java.awt.Graphics;\nimport java.awt.Image;\nimport java.awt.event.KeyAdapter;\nimport java.awt.event.KeyEvent;\nimport java.awt.event.MouseAdapter;\nimport java.awt.event.MouseEvent;\nimport java.awt.event.WindowAdapter;\nimport java.awt.event.WindowEvent;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Random;\n \n\/**\n * \u5766\u514b\u5ba2\u6237\u7aef\u4e3b\u7c7b\n * @author Java_Bean \u738b\u51ef\u65cb\n *\n *\/\n \n@SuppressWarnings(\"serial\")\npublic class TankClient extends Frame {\n \n\tstatic final int GAME_WIDTH = 800;\n\tstatic final int GAME_HEIGHT = 600;\n\tprivate int x = 50;\n\tprivate int y = 50;\n\tprivate int refreshTime = 16;\n\tprivate int bloodTime = 500;\n\tprivate int bloodStep = 0;\n\tprivate int maxBloods = 10;\n\tprivate int minTanks = 3;\n\tprivate int maxTanks = 20;\n\tprivate Image bufImg = null;\n\tprivate Color bgColor = Color.GREEN;\n\tprivate boolean hasGetdist = false;\n\tprivate int disX = 0;\n\tprivate int disY = 0;\n\tprivate int enemyNum = 10;\n\tprivate static Random rand = new Random();\n\tprivate boolean start = false;\n\tprivate int score = 0;\n\tprivate int killPoint = 5;\n \n\tprivate List&lt;Explode> explodes = new ArrayList&lt;Explode>();\n\tprivate List&lt;Tank> tanks = new ArrayList&lt;Tank>();\n\tprivate List&lt;Missile> missiles = new ArrayList&lt;Missile>();\n\tprivate List&lt;Wall> walls = new ArrayList&lt;Wall>();\n\tprivate List&lt;Blood> bloods = new ArrayList&lt;Blood>();\n \n\t\/**\n\t * \u542f\u52a8\u7a97\u53e3\n\t *\/\n\t\n\tpublic void launchFrame() {\n\t\tthis.setTitle(\"TankWar\");\n\t\tthis.setLocation(300, 300);\n\t\tthis.setSize(GAME_WIDTH, GAME_HEIGHT);\n\t\tthis.setResizable(false);\n\t\tthis.addWindowListener(new WindowAdapter() {\n \n\t\t\tpublic void windowClosing(WindowEvent e) {\n\t\t\t\tSystem.exit(0);\n\t\t\t}\n \n\t\t});\n\t\tthis.addMouseListener(new MouseAdapter() {\n \n\t\t\tpublic void mouseReleased(MouseEvent e) {\n\t\t\t\thasGetdist = false;\n\t\t\t}\n \n\t\t});\n\t\tthis.addMouseMotionListener(new MouseAdapter() {\n \n\t\t\tpublic void mouseDragged(MouseEvent e) {\n \n\t\t\t\tif (!hasGetdist) {\n\t\t\t\t\tdisX = e.getX();\n\t\t\t\t\tdisY = e.getY();\n\t\t\t\t\thasGetdist = true;\n\t\t\t\t}\n\t\t\t\tsetLocation(e.getXOnScreen() - disX, e.getYOnScreen() - disY);\n\t\t\t}\n \n\t\t});\n\t\tthis.setBackground(bgColor);\n\t\tthis.addKeyListener(new KeyMonitor());\n\t\tthis.setVisible(true);\n\t\tgameInit();\n\t}\n\t\n\tprivate void gameInit() {\n\t\ttanks.add(new Tank(x, y, true, this));\n\t\taddTank(10);\n\t\twalls.add(new Wall(300, 400, 300, 30));\n\t\twalls.add(new Wall(400, 300, 10, 200));\n\t\tscore = 0;\n\t\tstart = true;\n\t}\n \n\t\/\/ \u91cd\u5199paint\u65b9\u6cd5\n \n\tprivate void addBlood() {\n\t\tbloodStep++;\n\t\tif (bloodStep >= bloodTime &amp;&amp; bloods.size() &lt; maxBloods) {\n\t\t\tbloodStep = 0;\n\t\t\tBlood blood = new Blood(x, y);\n\t\t\tblood.setX(rand.nextInt(GAME_WIDTH - blood.getSize()));\n\t\t\tblood.setY(rand.nextInt(GAME_HEIGHT - blood.getSize() - 25) + 25);\n\t\t\tfor (int i = 0; i &lt; tanks.size(); i++)\n\t\t\t\tif (blood.getRect().intersects(tanks.get(i).getRect()))\n\t\t\t\t\treturn;\n\t\t\tfor (int i = 0; i &lt; walls.size(); i++)\n\t\t\t\tif (blood.getRect().intersects(walls.get(i).getRect()))\n\t\t\t\t\treturn;\n\t\t\tfor (int i = 0; i &lt; bloods.size(); i++)\n\t\t\t\tif (blood.getRect().intersects(bloods.get(i).getRect()))\n\t\t\t\t\treturn;\n\t\t\tbloods.add(blood);\n\t\t}\n\t}\n \n\t\/**\n\t * \u6e38\u620f\u5bf9\u8c61\u7ed8\u5236\u65b9\u6cd5\n\t *\/\n\t\n\tpublic void paint(Graphics g) {\n\t\tif (start) {\n\t\t\taddBlood();\n\t\t\tg.drawString(\"MissilesCount : \" + missiles.size(), 10, 40);\n\t\t\tg.drawString(\"ExplodeCount : \" + explodes.size(), 10, 50);\n\t\t\tg.drawString(\"TanksCount : \" + (tanks.size()), 10, 60);\n\t\t\tg.drawString(\"WallsCount : \" + walls.size(), 10, 70);\n\t\t\tg.drawString(\"BloodsCount : \" + bloods.size(), 10, 80);\n\t\t\tg.drawString(\"Score : \" + score, 10, 100);\n\t\t\tfor (int i = 0; i &lt; explodes.size(); i++)\n\t\t\t\texplodes.get(i).draw(g);\n\t\t\tfor (int i = 0; i &lt; missiles.size(); i++) {\n\t\t\t\tMissile missile = missiles.get(i);\n\t\t\t\tfor (int j = 0; j &lt; walls.size(); j++) {\n\t\t\t\t\tWall w = walls.get(j);\n\t\t\t\t\tif (missile.hitWall(w))\n\t\t\t\t\t\tmissiles.remove(missile);\n\t\t\t\t}\n\t\t\t\tfor (int k = 0; k &lt; tanks.size(); k++) {\n\t\t\t\t\tTank tank = tanks.get(k);\n\t\t\t\t\tif (missiles.contains(missile) &amp;&amp; missile.hitTank(tank)) {\n\t\t\t\t\t\tmissiles.remove(missile);\n\t\t\t\t\t\tint life = tank.getLife() - missile.getAttackHurt();\n\t\t\t\t\t\tif (life &lt;= 0) {\n\t\t\t\t\t\t\tscore += killPoint;\n\t\t\t\t\t\t\ttanks.remove(tank);\n\t\t\t\t\t\t\texplodes.add(new Explode(tank.getX()\n\t\t\t\t\t\t\t\t\t+ tank.getSize() \/ 2, tank.getY()\n\t\t\t\t\t\t\t\t\t+ tank.getSize() \/ 2, this));\n\t\t\t\t\t\t\tif (tank.isGood())\n\t\t\t\t\t\t\t\tgameOver();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttank.setLife(life);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (int i = 0; i &lt; tanks.size(); i++) {\n\t\t\t\tTank t = tanks.get(i);\n\t\t\t\tt.draw(g);\n\t\t\t\tif (t.isGood())\n\t\t\t\t\tg.drawString(\"TankLife : \" + t.getLife(), 10, 90);\n\t\t\t\tfor (int j = 0; j &lt; bloods.size(); j++) {\n\t\t\t\t\tBlood blood = bloods.get(j);\n\t\t\t\t\tif (blood.getRect().intersects(t.getRect())) {\n\t\t\t\t\t\tbloods.remove(blood);\n\t\t\t\t\t\tt.setLife(t.getLife() + blood.getBlood());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (int i = 0; i &lt; missiles.size(); i++)\n\t\t\t\tmissiles.get(i).draw(g);\n\t\t\tfor (int i = 0; i &lt; walls.size(); i++)\n\t\t\t\twalls.get(i).draw(g);\n\t\t\tfor (int i = 0; i &lt; bloods.size(); i++)\n\t\t\t\tbloods.get(i).draw(g);\n\t\t\tif(tanks.size()&lt;minTanks)\n\t\t\t\taddTank(maxTanks-tanks.size());\n\t\t} else {\n\t\t\tg.drawString(\"GAME OVER\", 10, 40);\n\t\t\tg.drawString(\"SCORE : \" + score, 10, 60);\n\t\t\tg.drawString(\"PRESS F2 TO RESTART\", 10, 80);\n\t\t}\n\t}\n \n\tprivate void gameOver() {\n\t\ttanks.clear();\n\t\tmissiles.clear();\n\t\tbloods.clear();\n\t\twalls.clear();\n\t\tstart = false;\n\t}\n \n\t\/**\n\t * \u6dfb\u52a0\u53cc\u7f13\u51b2\u6d88\u9664\u5c4f\u5e55\u95ea\u70c1\n\t *\/\n \n\tpublic void update(Graphics g) {\n \n\t\tif (bufImg == null)\n\t\t\t\/\/ \u521b\u5efa\u4e00\u4e2a\u865a\u62df\u5c4f\u5e55\uff08\u56fe\u7247\uff09\n\t\t\tbufImg = this.createImage(GAME_WIDTH, GAME_HEIGHT);\n\t\t\/\/ \u5f97\u5230\u865a\u62df\u5c4f\u5e55\u7684\u56fe\u50cf\u7c7b\n\t\tGraphics gBufImg = bufImg.getGraphics();\n\t\t\/\/ \u4fdd\u5b58\u865a\u62df\u5c4f\u5e55\u7684\u753b\u7b14\u989c\u8272\n\t\tColor c = gBufImg.getColor();\n\t\t\/\/ \u91cd\u7ed8\u80cc\u666f\n\t\tgBufImg.setColor(bgColor);\n\t\tgBufImg.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);\n\t\t\/\/ \u6062\u590d\u865a\u62df\u5c4f\u5e55\u7684\u753b\u7b14\u989c\u8272\n\t\tgBufImg.setColor(c);\n\t\t\/\/ \u8c03\u7528paint\u65b9\u6cd5\u5728\u865a\u62df\u5c4f\u5e55\u4e0a\u7ed8\u5236\u56fe\u5f62\n\t\tpaint(gBufImg);\n\t\t\/\/ \u5c06\u865a\u62df\u5c4f\u5e55\u8d34\u5230\u5c4f\u5e55\n\t\tg.drawImage(bufImg, 0, 0, null);\n\t}\n \n\t\/\/ \u8fd0\u884c\u7ebf\u7a0b\n \n\tprivate class PaintThread implements Runnable {\n \n\t\tpublic void run() {\n\t\t\twhile (true) {\n\t\t\t\ttry {\n\t\t\t\t\tThread.sleep(refreshTime);\n\t\t\t\t} catch (InterruptedException e) {\n\t\t\t\t\te.printStackTrace();\n\t\t\t\t}\n\t\t\t\trepaint();\n\t\t\t}\n\t\t}\n \n\t}\n \n\t\/\/ \u6dfb\u52a0\u952e\u76d8\u76d1\u542c\u5668\u7c7b\n \n\tprivate class KeyMonitor extends KeyAdapter {\n \n\t\tpublic void keyReleased(KeyEvent e) {\n\t\t\tif (start) {\n\t\t\t\tfor (int i = 0; i &lt; tanks.size(); i++) {\n\t\t\t\t\ttanks.get(i).keyReleased(e.getKeyCode());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n \n\t\tpublic void keyPressed(KeyEvent e) {\n\t\t\tif (start) {\n\t\t\t\tfor (int i = 0; i &lt; tanks.size(); i++) {\n\t\t\t\t\ttanks.get(i).keyPressed(e.getKeyCode());\n\t\t\t\t}\n \n\t\t\t\tif (e.getKeyCode() == KeyEvent.VK_EQUALS) {\n\t\t\t\t\taddTank(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!start &amp;&amp; e.getKeyCode() == KeyEvent.VK_F2) {\n\t\t\t\tgameInit();\n\t\t\t\tstart = true;\n\t\t\t}\n \n\t\t}\n\t}\n\t\n\tprivate void addTank(int tankNum){\n\t\twhile(true&amp;&amp;tankNum>0){\n\t\t\tboolean addAble=true;\n\t\t\tTank t = new Tank(x, y, false, TankClient.this);\n\t\t\tt.setX(rand.nextInt(GAME_WIDTH - t.getSize()));\n\t\t\tt.setY(rand.nextInt(GAME_HEIGHT - t.getSize() - 25) + 25);\n\t\t\tfor (int i = 0; i &lt; tanks.size(); i++)\n\t\t\t\tif (t.getRect().intersects(tanks.get(i).getRect())){\n\t\t\t\t\taddAble=false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tfor (int i = 0; i &lt; walls.size(); i++)\n\t\t\t\tif (t.getRect().intersects(walls.get(i).getRect())){\n\t\t\t\t\taddAble=false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tif(addAble){\n\t\t\t\ttanks.add(t);\n\t\t\t\ttankNum--;\t\n\t\t\t}\n\t\t}\n\t}\n \n\t\/**\n\t * \u4e3b\u65b9\u6cd5\n\t * @param args \u547d\u4ee4\u884c\u53c2\u6570\n\t *\/\n \n\tpublic static void main(String&#91;] args) {\n\t\tTankClient tc = new TankClient();\n\t\ttc.launchFrame();\n\t\tnew Thread(tc.new PaintThread()).start();\n\t}\n \n\tpublic int getX() {\n\t\treturn x;\n\t}\n \n\tpublic void setX(int x) {\n\t\tthis.x = x;\n\t}\n \n\tpublic int getY() {\n\t\treturn y;\n\t}\n \n\tpublic void setY(int y) {\n\t\tthis.y = y;\n\t}\n \n\tpublic int getRefreshTime() {\n\t\treturn refreshTime;\n\t}\n \n\tpublic void setRefreshTime(int refreshTime) {\n\t\tthis.refreshTime = refreshTime;\n\t}\n \n\tpublic Image getBufImg() {\n\t\treturn bufImg;\n\t}\n \n\tpublic void setBufImg(Image bufImg) {\n\t\tthis.bufImg = bufImg;\n\t}\n \n\tpublic Color getBgColor() {\n\t\treturn bgColor;\n\t}\n \n\tpublic void setBgColor(Color bgColor) {\n\t\tthis.bgColor = bgColor;\n\t}\n \n\tpublic boolean isHasGetdist() {\n\t\treturn hasGetdist;\n\t}\n \n\tpublic void setHasGetdist(boolean hasGetdist) {\n\t\tthis.hasGetdist = hasGetdist;\n\t}\n \n\tpublic int getDisX() {\n\t\treturn disX;\n\t}\n \n\tpublic void setDisX(int disX) {\n\t\tthis.disX = disX;\n\t}\n \n\tpublic int getDisY() {\n\t\treturn disY;\n\t}\n \n\tpublic void setDisY(int disY) {\n\t\tthis.disY = disY;\n\t}\n \n\tpublic List&lt;Explode> getExplodes() {\n\t\treturn explodes;\n\t}\n \n\tpublic void setExplodes(List&lt;Explode> explodes) {\n\t\tthis.explodes = explodes;\n\t}\n \n\tpublic List&lt;Tank> getTanks() {\n\t\treturn tanks;\n\t}\n \n\tpublic void setTanks(List&lt;Tank> tanks) {\n\t\tthis.tanks = tanks;\n\t}\n \n\tpublic List&lt;Missile> getMissiles() {\n\t\treturn missiles;\n\t}\n \n\tpublic void setMissiles(List&lt;Missile> missiles) {\n\t\tthis.missiles = missiles;\n\t}\n \n\tpublic int getEnemyNum() {\n\t\treturn enemyNum;\n\t}\n \n\tpublic void setEnemyNum(int enemyNum) {\n\t\tthis.enemyNum = enemyNum;\n\t}\n\tpublic List&lt;Wall> getWalls() {\n\t\treturn walls;\n\t}\n \n\tpublic void setWalls(List&lt;Wall> walls) {\n\t\tthis.walls = walls;\n\t}\n \n \n}<\/code><\/pre>\n\n\n\n<p>\u521a\u521a\u6536\u5230\u90ae\u4ef6\uff0c\u5e78\u8fd0\u83b7\u5f97\u4e86\u767e\u5ea6\u4e4b\u661f\u7684\u7eaa\u5ff5T-shirt \uff0c\u54c7\u54c8\u54c8\u54c8~~<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5c1a\u5b66\u5802\u7248\u672c\u7684\u4fee\u6539\u7248 \u73a9\u6cd5\uff1a\u65b9\u5411\u952e\uff1a\u63a7\u5236\u8d70\u52a8Ctrl\uff1a\u63a7\u5236\u53d1\u5f39A\uff1a\u8d85\u7ea7\u5b50\u5f39X\uff1a\u516b\u65b9\u5411\u53d1\u5f39=\uff1a\u6dfb\u52a0\u654c\u65b9\u5766\u514bF2\uff1a\u91cd\u65b0\u5f00\u59cb\u5176\u4ed6\u529f\u80fd\uff1a\u5728\u5934\u4e0a\u5b9e\u65f6\u663e\u793a\u8840\u6761\u5403\u5230\u8840\u5757\u65f6\u80fd\u8865\u8840&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"http:\/\/www.wangkaixuan.tech\/?p=338\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-338","post","type-post","status-publish","format-standard","hentry","category-06-03-play-ground"],"_links":{"self":[{"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=\/wp\/v2\/posts\/338","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=338"}],"version-history":[{"count":0,"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=\/wp\/v2\/posts\/338\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=338"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=338"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wangkaixuan.tech\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}