电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java實(shí)現(xiàn)坦克大戰(zhàn)小游戲

瀏覽:113日期:2022-08-17 17:48:08

用java程序編寫的一個(gè)坦克大戰(zhàn),可以實(shí)現(xiàn)兩人同時(shí)在線

需要代碼的可以私信聯(lián)系我

package com.mr.frame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.image.BufferedImage;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.Vector;import javax.swing.JPanel;import com.mr.model.Base;import com.mr.model.Boom;import com.mr.model.Bot;import com.mr.model.Bullet;import com.mr.model.Level;import com.mr.model.Map;import com.mr.model.Tank;import com.mr.model.wall.Wall;import com.mr.type.GameType;import com.mr.type.TankType;import com.mr.util.ImageUtil;/** * 游戲面板 實(shí)際大小[794,572] * * @author www.mingrisoft.com * */public class GamePanel extends JPanel implements KeyListener { /** * 游戲界面刷新時(shí)間:20毫秒 */ public static final int FRESH = 20; private BufferedImage image;// 在面板中顯示的主圖片 private Graphics2D g2;// 圖片的繪圖對(duì)象 private MainFrame frame;// 主窗體 private GameType gameType;// 游戲模式 private Tank play1, play2;// 玩家1、玩家2 private boolean y_key, s_key, w_key, a_key, d_key, up_key, down_key, left_key, right_key, num1_key;// 按鍵是否按下標(biāo)志,左側(cè)單詞是按鍵名 private int level;// 關(guān)卡值 private List<Bullet> bullets;// 所有子彈集合 private volatile List<Tank> allTanks;// 所有坦克集合 private List<Tank> botTanks;// 電腦坦克集合 private final int botCount = 20;// 電腦坦克總數(shù) private int botReadyCount = botCount;// 準(zhǔn)備出場(chǎng)的電腦坦克總數(shù) private int botSurplusCount = botCount;// 電腦坦克剩余量 private int botMaxInMap = 6;// 場(chǎng)上最大電腦坦克數(shù) private int botX[] = { 10, 367, 754 };// 電腦坦克出生的3個(gè)橫坐標(biāo)位置 private List<Tank> playerTanks;// 玩家坦克集合 private volatile boolean finish = false;// 游戲是否結(jié)束 private Base base;// 基地 private List<Wall> walls;// 所有墻塊 private List<Boom> boomImage;// 坦克陣亡后的爆炸效果集合 private Random r = new Random();// 隨機(jī)數(shù)對(duì)象 private int createBotTimer = 0;// 生產(chǎn)電腦計(jì)時(shí)器 private Tank survivor;// (玩家)幸存者,用于繪制最后一個(gè)爆炸效果 /** * 游戲面板構(gòu)造方法 * * @param frame * - 主窗體 * @param level * - 關(guān)卡 * @param gameType * - 游戲模式 */ public GamePanel(MainFrame frame, int level, GameType gameType) { this.frame = frame; this.level = level; this.gameType = gameType; setBackground(Color.WHITE);// 面板使用白色背景 init();// 初始化組件 Thread t = new FreshThead();// 創(chuàng)建游戲幀刷新線程 t.start();// 啟動(dòng)線程 addListener();// 開(kāi)啟監(jiān)聽(tīng) } /** * 組件初始化 */ private void init() { bullets = new ArrayList<Bullet>();// 實(shí)例化子彈集合 allTanks = new ArrayList<>();// 實(shí)例化所有坦克集合 walls = new ArrayList<>();// 實(shí)例化所有墻塊集合 boomImage = new ArrayList<>();// 實(shí)例化爆炸效果集合 image = new BufferedImage(794, 572, BufferedImage.TYPE_INT_BGR);// 實(shí)例化主圖片,采用面板實(shí)際大小 g2 = image.createGraphics();// 獲取主圖片繪圖對(duì)象 playerTanks = new ArrayList<>();// 實(shí)例化玩家坦克集合 play1 = new Tank(278, 537, ImageUtil.PLAYER1_UP_IMAGE_URL, this, TankType.player1);// 實(shí)例化玩家1 if (gameType == GameType.TWO_PLAYER) {// 如果是雙人模式 play2 = new Tank(448, 537, ImageUtil.PLAYER2_UP_IMAGE_URL, this, TankType.player2);// 實(shí)例化玩家2 playerTanks.add(play2);// 玩家坦克集合添加玩家2 } playerTanks.add(play1);// 玩家坦克集合添加玩家1 botTanks = new Vector<>();// 實(shí)例化電腦坦克集合 botTanks.add(new Bot(botX[0], 1, this, TankType.bot));// 在第一個(gè)位置添加電腦 botTanks.add(new Bot(botX[1], 1, this, TankType.bot));// 在第二個(gè)位置添加電腦 botTanks.add(new Bot(botX[2], 1, this, TankType.bot));// 在第三個(gè)位置添加電腦 botReadyCount -= 3;// 準(zhǔn)備出場(chǎng)的坦克總數(shù)減去初始化數(shù)量 allTanks.addAll(playerTanks);// 所有坦克集合添加玩家坦克集合 allTanks.addAll(botTanks);// 所有坦克集合添加電腦坦克集合 base = new Base(367, 532);// 實(shí)例化基地 initWalls();// 初始化地圖中的墻塊 } /** * 組件監(jiān)聽(tīng) */ private void addListener() { frame.addKeyListener(this);// 主窗體載入鍵盤監(jiān)聽(tīng),本類已實(shí)現(xiàn)KeyListener接口 } /** * 初始化地圖中的墻塊 */ private void initWalls() { Map map = Map.getMap(level);// 獲取當(dāng)前關(guān)卡的地圖對(duì)象 walls.addAll(map.getWalls());// 墻塊集合添加當(dāng)前地圖中所有墻塊 walls.add(base);// 墻塊集合添加基地 } /** * 重寫繪制組件方法 */ public void paint(Graphics g) { paintTankActoin();// 執(zhí)行坦克動(dòng)作 CreateBot();// 循環(huán)創(chuàng)建電腦坦克 paintImage();// 繪制主圖片 g.drawImage(image, 0, 0, this); // 將主圖片繪制到面板上 } /** * 繪制主圖片 */ private void paintImage() { g2.setColor(Color.WHITE);// 使用白色 g2.fillRect(0, 0, image.getWidth(), image.getHeight());// 填充一個(gè)覆蓋整個(gè)圖片的白色矩形 panitBoom();// 繪制爆炸效果 paintBotCount();// 在屏幕頂部繪制剩余坦克數(shù)量 panitBotTanks();// 繪制電腦坦克 panitPlayerTanks();// 繪制玩家坦克 allTanks.addAll(playerTanks);// 坦克集合添加玩家坦克集合 allTanks.addAll(botTanks);// 坦克集合添加電腦坦克集合 panitWalls();// 繪制墻塊 panitBullets();// 繪制子彈 if (botSurplusCount == 0) {// 如果所有電腦都被消滅 stopThread();// 結(jié)束游戲幀刷新線程 paintBotCount();// 在屏幕頂部繪制剩余坦克數(shù)量 g2.setFont(new Font('楷體', Font.BOLD, 50));// 設(shè)置繪圖字體 g2.setColor(Color.green);// 使用綠色 g2.drawString('勝 利 !', 250, 400);// 在指定坐標(biāo)繪制文字 gotoNextLevel();// 進(jìn)入下一關(guān)卡 } if (gameType == GameType.ONE_PLAYER) {// 如果是單人模式 if (!play1.isAlive()) {// 如果玩家陣亡 stopThread();// 結(jié)束游戲幀刷新線程 boomImage.add(new Boom(play1.x, play1.y));// 添加玩家1爆炸效果 panitBoom();// 繪制爆炸效果 paintGameOver();// 在屏幕中央繪制game over gotoPrevisousLevel();// 重新進(jìn)入本關(guān)卡 } } else {// 如果是雙人模式 if (play1.isAlive() && !play2.isAlive()) {// 如果玩家1是 幸存者 survivor = play1;// 幸存者是玩家1 } else if (!play1.isAlive() && play2.isAlive()) { survivor = play2;// 幸存者是玩家2 } else if (!(play1.isAlive() || play2.isAlive())) {// 如果兩個(gè)玩家全部陣亡 stopThread();// 結(jié)束游戲幀刷新線程 boomImage.add(new Boom(survivor.x, survivor.y));// 添加幸存者爆炸效果 panitBoom();// 繪制爆炸效果 paintGameOver();// 在屏幕中央繪制game over gotoPrevisousLevel();// 重新進(jìn)入本關(guān)卡 } } if (!base.isAlive()) {// 如果基地被擊中 stopThread();// 結(jié)束游戲幀刷新線程 paintGameOver();// 在屏幕中央繪制game over base.setImage(ImageUtil.BREAK_BASE_IMAGE_URL);// 基地使用陣亡圖片 gotoPrevisousLevel();// 重新進(jìn)入本關(guān)卡 } g2.drawImage(base.getImage(), base.x, base.y, this);// 繪制基地 } /** * 在屏幕頂部繪制剩余坦克數(shù)量 */ private void paintBotCount() { g2.setColor(Color.BLUE);// 使用藍(lán)色 g2.drawString('敵方坦克剩余:' + botSurplusCount, 337, 15);// 在指定坐標(biāo)繪制字符串 } /** * 在屏幕中央繪制game over */ private void paintGameOver() { g2.setFont(new Font('楷體', Font.BOLD, 50));// 設(shè)置繪圖字體 g2.setColor(Color.RED);// 設(shè)置繪圖顏色 g2.drawString('Game Over !', 250, 400);// 在指定坐標(biāo)繪制文字 } /** * 繪制爆炸效果 */ private void panitBoom() { for (int i = 0; i < boomImage.size(); i++) {// 循環(huán)遍歷爆炸效果集合 Boom boom = boomImage.get(i);// 獲取爆炸對(duì)象 if (boom.isAlive()) {// 如果爆炸效果有效 boom.show(g2);// 展示爆炸效果 } else {// 如果爆炸效果無(wú)效 boomImage.remove(i);// 在集合中?h除此爆炸對(duì)象 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界 } } } /** * 繪制墻塊 */ private void panitWalls() { for (int i = 0; i < walls.size(); i++) {// 循環(huán)遍歷墻塊集合 Wall w = walls.get(i);// 獲取墻塊對(duì)象 if (w.isAlive()) {// 如果墻塊有效 g2.drawImage(w.getImage(), w.x, w.y, this);// 繪制墻塊 } else {// 如果墻塊無(wú)效 walls.remove(i);// 在集合中?h除此墻塊 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界 } } } /** * 繪制子彈 */ private void panitBullets() { for (int i = 0; i < bullets.size(); i++) {// 循環(huán)遍歷子彈集合 Bullet b = bullets.get(i);// 獲取子彈對(duì)象 if (b.isAlive()) {// 如果子彈有效 b.move();// 子彈執(zhí)行移動(dòng)操作 b.hitBase();// 子彈執(zhí)行擊中基地判斷 b.hitWall();// 子彈執(zhí)行擊中墻壁判斷 b.hitTank();// 子彈執(zhí)行擊中坦克判斷 g2.drawImage(b.getImage(), b.x, b.y, this);// 繪制子彈 } else {// 如果子彈無(wú)效 bullets.remove(i);// 在集合中?h除此子彈 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界 } } } /** * 繪制電腦坦克 */ private void panitBotTanks() { for (int i = 0; i < botTanks.size(); i++) {// 循環(huán)遍歷電腦坦克集合 Bot t = (Bot) botTanks.get(i);// 獲取電腦坦克對(duì)象 if (t.isAlive()) {// 如果坦克存活 t.go();// 電腦坦克展開(kāi)行動(dòng) g2.drawImage(t.getImage(), t.x, t.y, this);// 繪制坦克 } else {// 如果坦克陣亡 botTanks.remove(i);// 集合中刪除此坦克 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界 boomImage.add(new Boom(t.x, t.y));// 在坦克位置創(chuàng)建爆炸效果 decreaseBot();// 剩余坦克數(shù)量-1 } } } /** * 繪制玩家坦克 */ private void panitPlayerTanks() { for (int i = 0; i < playerTanks.size(); i++) {// 循環(huán)遍歷玩家坦克 Tank t = playerTanks.get(i);// 獲取玩家坦克對(duì)象 if (t.isAlive()) {// 如果坦克存活 g2.drawImage(t.getImage(), t.x, t.y, this);// 繪制坦克 } else {// 如果坦克陣亡 playerTanks.remove(i);// 集合中刪除此坦克 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界 boomImage.add(new Boom(t.x, t.y));// 在坦克位置創(chuàng)建爆炸效果 } } } /** * 結(jié)束游戲幀刷新 */ private synchronized void stopThread() { frame.removeKeyListener(this);// 主窗體刪除本類鍵盤事件監(jiān)聽(tīng)對(duì)象 finish = true;// 游戲停止標(biāo)志為true } /** * 游戲幀刷新線程 */ private class FreshThead extends Thread { public void run() {// 線程主方法 while (!finish) {// 如果游戲未停止 repaint();// 執(zhí)行本類重繪方法 try { Thread.sleep(FRESH);// 指定時(shí)間后重新繪制界面 } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 添加電腦坦克,如果場(chǎng)上坦克未到達(dá)最大值,每4秒鐘之后在三個(gè)出生位置隨機(jī)選擇其一,創(chuàng)建電腦坦克。 */ private void CreateBot() { createBotTimer += FRESH;// 計(jì)時(shí)器按照刷新時(shí)間遞增 // “當(dāng)場(chǎng)上電腦小于場(chǎng)上最大數(shù)時(shí)” 并且 “準(zhǔn)備上場(chǎng)的坦克數(shù)量大于0” 并且 “計(jì)時(shí)器記錄已過(guò)去4秒鐘” if (botTanks.size() < botMaxInMap && botReadyCount > 0 && createBotTimer >= 4000) { int index = r.nextInt(3);// 隨機(jī)獲取0或1或2其中一個(gè)值 Rectangle bornRect = new Rectangle(botX[index], 1, 35, 35);// 創(chuàng)建坦克隨機(jī)出生區(qū)域 for (int i = 0, lengh = allTanks.size(); i < lengh; i++) {// 循環(huán)遍歷所有坦克集合 Tank t = allTanks.get(i);// 獲取坦克對(duì)象 if (t.isAlive() && t.hit(bornRect)) {// 如果場(chǎng)上存在與隨機(jī)位置重合并存活的坦克 return;// 結(jié)束方法 } } botTanks.add(new Bot(botX[index], 1, GamePanel.this, TankType.bot));// 在隨機(jī)位置創(chuàng)造電腦坦克 botReadyCount--;// 準(zhǔn)備上場(chǎng)電腦數(shù)量-1 createBotTimer = 0;// 產(chǎn)生電腦計(jì)時(shí)器重新計(jì)時(shí) } } /** * 進(jìn)入下一關(guān)卡 */ private void gotoNextLevel() { Thread jump = new JumpPageThead(Level.nextLevel());// 創(chuàng)建跳轉(zhuǎn)到下一關(guān)卡的線程 jump.start();// 啟動(dòng)線程 } /** * 重新進(jìn)入本關(guān)卡 */ private void gotoPrevisousLevel() { Thread jump = new JumpPageThead(Level.previsousLevel());// 創(chuàng)建重新進(jìn)入本關(guān)卡的線程 jump.start();// 啟動(dòng)線程 } /** * 剩余坦克數(shù)量減少1 */ public void decreaseBot() { botSurplusCount--;// 電腦剩余數(shù)量-1 } /** * 按鍵按下時(shí) */ @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) {// 判斷按下的按鍵值 case KeyEvent.VK_Y:// 如果按下的是“Y” y_key = true;// “Y”按下標(biāo)志為true break; case KeyEvent.VK_W:// 如果按下的是“W” w_key = true;// “W”按下標(biāo)志為true a_key = false;// “A”按下標(biāo)志為false s_key = false;// “S”按下標(biāo)志為false d_key = false;// “D”按下標(biāo)志為false break; case KeyEvent.VK_A:// 如果按下的是“A” w_key = false;// “W”按下標(biāo)志為false a_key = true;// “A”按下標(biāo)志為true s_key = false;// “S”按下標(biāo)志為false d_key = false;// “D”按下標(biāo)志為false break; case KeyEvent.VK_S:// 如果按下的是“S” w_key = false;// “W”按下標(biāo)志為false a_key = false;// “A”按下標(biāo)志為false s_key = true;// “S”按下標(biāo)志為true d_key = false;// “D”按下標(biāo)志為false break; case KeyEvent.VK_D:// 如果按下的是“D” w_key = false;// “W”按下標(biāo)志為false a_key = false;// “A”按下標(biāo)志為false s_key = false;// “S”按下標(biāo)志為false d_key = true;// “D”按下標(biāo)志為true break; case KeyEvent.VK_HOME:// 如果按下的是“HOME”,效果同下 case KeyEvent.VK_NUMPAD1:// 如果按下的是小鍵盤數(shù)字1 num1_key = true;// 小鍵盤數(shù)字1按下標(biāo)志為true break; case KeyEvent.VK_UP:// 如果按下的是“↑” up_key = true;// “↑”按下標(biāo)志為true down_key = false;// “↓”按下標(biāo)志為false right_key = false;// “→”按下標(biāo)志為false left_key = false;// “←”按下標(biāo)志為false break; case KeyEvent.VK_DOWN:// 如果按下的是“↓” up_key = false;// “↑”按下標(biāo)志為false down_key = true;// “↓”按下標(biāo)志為true right_key = false;// “→”按下標(biāo)志為false left_key = false;// “←”按下標(biāo)志為false break; case KeyEvent.VK_LEFT:// 如果按下的是“←” up_key = false;// “↑”按下標(biāo)志為false down_key = false;// “↓”按下標(biāo)志為false right_key = false;// “→”按下標(biāo)志為false left_key = true;// “←”按下標(biāo)志為true break; case KeyEvent.VK_RIGHT:// 如果按下的是“→” up_key = false;// “↑”按下標(biāo)志為false down_key = false;// “↓”按下標(biāo)志為false right_key = true;// “→”按下標(biāo)志為true left_key = false;// “←”按下標(biāo)志為false break; } } /** * 根據(jù)按鍵按下?tīng)顟B(tài),讓坦克執(zhí)行相應(yīng)動(dòng)作 */ private void paintTankActoin() { if (y_key) {// 如果“Y”鍵是按下?tīng)顟B(tài) play1.attack();// 玩家1坦克攻擊 } if (w_key) {// 如果“W”鍵是按下?tīng)顟B(tài) play1.upward();// 玩家1坦克向上移動(dòng) } if (d_key) {// 如果“D”鍵是按下?tīng)顟B(tài) play1.rightward();// 玩家1坦克向右移動(dòng) } if (a_key) {// 如果“A”鍵是按下?tīng)顟B(tài) play1.leftward();// 玩家1坦克左移動(dòng) } if (s_key) {// 如果“S”鍵是按下?tīng)顟B(tài) play1.downward();// 玩家1坦克向下移動(dòng) } if (gameType == GameType.TWO_PLAYER) { if (num1_key) {// 如果“M”鍵是按下?tīng)顟B(tài) play2.attack();// 玩家2坦克攻擊 } if (up_key) {// 如果“←”鍵是按下?tīng)顟B(tài) play2.upward();// 玩家2坦克向上移動(dòng) } if (right_key) {// 如果“→”鍵是按下?tīng)顟B(tài) play2.rightward();// 玩家2坦克向右移動(dòng) } if (left_key) {// 如果“↑”鍵是按下?tīng)顟B(tài) play2.leftward();// 玩家2坦克左移動(dòng) } if (down_key) {// 如果“↓”鍵是按下?tīng)顟B(tài) play2.downward();// 玩家2坦克后移動(dòng) } } } /** * 按鍵抬起時(shí) */ @Override public void keyReleased(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_Y:// 如果抬起的是“Y” y_key = false;// “Y”按下標(biāo)志為false break; case KeyEvent.VK_W:// 如果抬起的是“W” w_key = false;// “W”按下標(biāo)志為false break; case KeyEvent.VK_A:// 如果抬起的是“A” a_key = false;// “A”按下標(biāo)志為false break; case KeyEvent.VK_S:// 如果抬起的是“S” s_key = false;// “S”按下標(biāo)志為false break; case KeyEvent.VK_D:// 如果抬起的是“D” d_key = false;// “D”按下標(biāo)志為false break; case KeyEvent.VK_HOME:// 如果抬起的是“HOME”,效果同下 case KeyEvent.VK_NUMPAD1:// 如果抬起的是小鍵盤1 num1_key = false;// 小鍵盤1按下標(biāo)志為false break; case KeyEvent.VK_UP:// 如果抬起的是“↑” up_key = false;// “↑”按下標(biāo)志為false break; case KeyEvent.VK_DOWN:// 如果抬起的是“↓” down_key = false;// “↓”按下標(biāo)志為false break; case KeyEvent.VK_LEFT:// 如果抬起的是“←” left_key = false;// “←”按下標(biāo)志為false break; case KeyEvent.VK_RIGHT:// 如果抬起的是“→” right_key = false;// “→”按下標(biāo)志為false break; } } /** * 向子彈集合中添加子彈 * * @param b * - 添加的子彈 */ public void addBullet(Bullet b) { bullets.add(b);// 子彈集合中添加子彈 } /** * 獲取所有墻塊集合 * * @return 所有墻塊 */ public List<Wall> getWalls() { return walls; } /** * 獲取基地對(duì)象 * * @return 基地 */ public Base getBase() { return base; } /** * 獲取所有坦克集合 * * @return 所有坦克 */ public List<Tank> getTanks() { return allTanks; } /** * 游戲結(jié)束跳轉(zhuǎn)線程 */ private class JumpPageThead extends Thread { int level;// 跳轉(zhuǎn)的關(guān)卡 /** * 跳轉(zhuǎn)線程構(gòu)造方法 * * @param level * - 跳轉(zhuǎn)的關(guān)卡 */ public JumpPageThead(int level) { this.level = level; } /** * 線程主方法 */ public void run() { try { Thread.sleep(1000);// 1秒鐘后 frame.setPanel(new LevelPanel(level, frame, gameType));// 主窗體跳轉(zhuǎn)到指定關(guān)卡 } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 鍵入某按鍵事件 */ public void keyTyped(KeyEvent e) { // 不實(shí)現(xiàn)此方法,但不可刪除 }}

圖片

java實(shí)現(xiàn)坦克大戰(zhàn)小游戲

java實(shí)現(xiàn)坦克大戰(zhàn)小游戲

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 户外环保不锈钢垃圾桶_标识标牌制作_园林公园椅厂家_花箱定制-北京汇众环艺 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 水平筛厂家-三轴椭圆水平振动筛-泥沙震动筛设备_山东奥凯诺矿机 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 100国际学校招生 - 专业国际学校择校升学规划 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 冷却塔厂家_冷却塔维修_冷却塔改造_凉水塔配件填料公司- 广东康明节能空调有限公司 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 金属雕花板_厂家直销_价格低-山东慧诚建筑材料有限公司 | 暴风影音| 领先的大模型技术与应用公司-中关村科金 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 中药超微粉碎机(中药细胞级微粉碎)-百科 |