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

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

基于python實(shí)現(xiàn)坦克大戰(zhàn)游戲

瀏覽:17日期:2022-07-07 09:39:39

本文實(shí)例為大家分享了python實(shí)現(xiàn)坦克大戰(zhàn)游戲的具體代碼,供大家參考,具體內(nèi)容如下

游戲界面

基于python實(shí)現(xiàn)坦克大戰(zhàn)游戲

pygame游戲引擎的安裝

pip安裝

windows + R --> cmd --> 命令行輸入 pip install 模塊名==版本號

pycharm中安裝

File --> setting --> Project --> Project Interpreter --> 右側(cè) + install --> 搜索框輸入pygame --> 下方installPackage

面向?qū)ο蠓治?/b>

分析組成類

實(shí)現(xiàn)框架的搭建(類的設(shè)計) 主邏輯類 坦克類 我方坦克 敵方坦克 子彈類 爆炸類 墻壁類 音效類

框架搭建

import pygame #主邏輯類class MainGame(): def startGame(self): pass def gameOver(self): pass#基本坦克類class BaseTank(): pass#我方坦克類class MyTank(): pass#敵方坦克類class EnemyTank(): pass#子彈類class Bullet(): pass#爆炸類class Explode(): pass#墻壁類class Wall(): pass#音效類class Audio(): passgame = MainGame()game.startGame()

展示主窗口

import pygameSCREEN_WIDTH = 900SCREEN_HEIGHT = 550#主邏輯類class MainGame(): #游戲主窗口 window = None def startGame(self): #調(diào)用窗口初始化方法 pygame.display.init() MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) pygame.display.set_caption(’坦克大戰(zhàn)v1.02’) while True: #填充窗口背景色 MainGame.window.fill((0,0,0)) #刷新 pygame.display.update() def gameOver(self): pass

事件監(jiān)聽

class MainGame(): #游戲主窗口 window = None def startGame(self): #調(diào)用窗口初始化方法 pygame.display.init() MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) pygame.display.set_caption(’坦克大戰(zhàn)’+VERSION) while True: #填充窗口背景色 MainGame.window.fill((0,0,0)) #調(diào)用事件處理方法 self.getEvents() #刷新 pygame.display.update() #所有事件處理的方法 def getEvents(self): #獲取隊列中所有事件,遍歷事件,對type為QUIT以及KEYDOWN兩種事件類型處理 eventList = pygame.event.get() #遍歷所有事件 for e in eventList: if e.type == pygame.QUIT: #調(diào)用游戲結(jié)束的方法 self.gameOver() #如果事件類型為按下鍵盤按鍵 elif e.type == pygame.KEYDOWN: #根據(jù)具體按鍵做對應(yīng)處理 if e.key == pygame.K_UP: print('向上移動') elif e.key == pygame.K_DOWN: print('向下移動') elif e.key == pygame.K_LEFT: print('向左移動') elif e.key == pygame.K_RIGHT: print('向右移動') elif e.key == pygame.K_SPACE: print('biubiu~~~') # elif e.type == pygame.MOUSEMOTION: # print(e.pos) def gameOver(self): #結(jié)束程序 exit()

顯示我方坦克

#我方坦克類class MyTank(BaseTank): def __init__(self,x,y): super(MyTank, self).__init__() #設(shè)置具體的圖片集 self.images = { ’U’:pygame.image.load(’img/p1tankU.gif’), ’D’:pygame.image.load(’img/p1tankD.gif’), ’L’:pygame.image.load(’img/p1tankL.gif’), ’R’:pygame.image.load(’img/p1tankR.gif’) } #我方坦克的初始方向 self.direction = ’U’ #設(shè)置坦克的圖片 self.image = self.images[self.direction] #先基于圖像獲取坦克的位置以及大小 self.rect = self.image.get_rect() #修改坦克坐標(biāo),改成自定義位置 self.rect.centerx = x self.rect.centery = y def displayTank(self): self.image = self.images[self.direction] MainGame.window.blit(self.image,self.rect)

實(shí)現(xiàn)我方坦克的移動

坦克類中,實(shí)現(xiàn)移動方法

def move(self): #移動,基于速度在指定的方向進(jìn)行移動 if self.direction == ’U’: if self.rect.centery > self.rect.height/2: self.rect.centery ?= self.speed elif self.direction == ’D’: if self.rect.centery < SCREEN_HEIGHT ? self.rect.height/2: self.rect.centery += self.speed elif self.direction == ’L’: if self.rect.centerx > self.rect.height/2: self.rect.centerx ?= self.speed elif self.direction == ’R’: if self.rect.centerx < SCREEN_WIDTH ? self.rect.height/2: self.rect.centerx += self.speed

事件處理方法中新增移動處理

#所有事件處理的方法 def getEvents(self): #獲取隊列中所有事件,遍歷事件,對type為QUIT以及KEYDOWN兩種事件類型處理 eventList = pygame.event.get() #遍歷所有事件 for e in eventList: if e.type == pygame.QUIT: #調(diào)用游戲結(jié)束的方法 self.gameOver() #如果事件類型為按下鍵盤按鍵 elif e.type == pygame.KEYDOWN: #根據(jù)具體按鍵做對應(yīng)處理 if e.key == pygame.K_UP: print('向上移動') MainGame.tank1.direction = ’U’ MainGame.tank1.move() elif e.key == pygame.K_DOWN: print('向下移動') MainGame.tank1.direction = ’D’ MainGame.tank1.move() elif e.key == pygame.K_LEFT: print('向左移動') MainGame.tank1.direction = ’L’ MainGame.tank1.move() elif e.key == pygame.K_RIGHT: print('向右移動') MainGame.tank1.direction = ’R’ MainGame.tank1.move() elif e.key == pygame.K_SPACE: print('biubiu~~~')

優(yōu)化移動方式

事件中新增坦克移動開關(guān)控制

#所有事件處理的方法 def getEvents(self): #獲取隊列中所有事件,遍歷事件,對type為QUIT以及KEYDOWN兩種事件類型處理 eventList = pygame.event.get() #遍歷所有事件 for e in eventList: if e.type == pygame.QUIT: #調(diào)用游戲結(jié)束的方法 self.gameOver() #如果事件類型為按下鍵盤按鍵 elif e.type == pygame.KEYDOWN: #根據(jù)具體按鍵做對應(yīng)處理 if e.key == pygame.K_UP: print('向上移動') MainGame.tank1.direction = ’U’ #修改坦克運(yùn)動狀態(tài) MainGame.tank1.stop = False elif e.key == pygame.K_DOWN: print('向下移動') MainGame.tank1.direction = ’D’ MainGame.tank1.stop = False elif e.key == pygame.K_LEFT: print('向左移動') MainGame.tank1.direction = ’L’ MainGame.tank1.stop = False elif e.key == pygame.K_RIGHT: print('向右移動') MainGame.tank1.direction = ’R’ MainGame.tank1.stop = False elif e.key == pygame.K_SPACE: print('biubiu~~~')

主邏輯的循環(huán)中優(yōu)化移動

def startGame(self): #調(diào)用窗口初始化方法 pygame.display.init() MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) pygame.display.set_caption(’坦克大戰(zhàn)’+VERSION) #調(diào)用創(chuàng)建我方坦克的方法 self.creatMyTank() while True: #填充窗口背景色 MainGame.window.fill((0,0,0)) #調(diào)用事件處理方法 self.getEvents() #展示我方坦克 self.showMyTank() if not MainGame.tank1.stop: # 我方坦克移動 MainGame.tank1.move() #刷新 pygame.display.update() #新增,程序休眠,優(yōu)化坦克移動速度 time.sleep(0.020)

實(shí)現(xiàn)敵方坦克的加載

完善敵方坦克類

#敵方坦克類class EnemyTank(BaseException): #v1.07 def __init__(self,x,y): self.images = { ’U’: pygame.image.load(’img/enemy1U.gif’), ’D’: pygame.image.load(’img/enemy1D.gif’), ’L’: pygame.image.load(’img/enemy1L.gif’), ’R’: pygame.image.load(’img/enemy1R.gif’) } # 敵方坦克的初始方向?yàn)殡S機(jī)方向 self.direction = self.randomDirection() # 設(shè)置坦克的圖片 self.image = self.images[self.direction] # 先基于圖像獲取坦克的位置以及大小 self.rect = self.image.get_rect() # 修改坦克坐標(biāo),改成自定義位置 self.rect.centerx = x self.rect.centery = y #v1.07生成坦克的隨機(jī)方向 def randomDirection(self): num = random.randint(1,4) if num == 1: return ’U’ elif num == 2: return ’D’ elif num == 3: return ’L’ elif num == 4: return ’R’ #v1.07將敵方坦克加入到窗口中 def displayTank(self): self.image = self.images[self.direction] MainGame.window.blit(self.image, self.rect)

主邏輯中實(shí)現(xiàn)敵方坦克的加載

class MainGame(): #游戲主窗口 window = None tank1 = None #v1.07 新增存儲敵方坦克的列表 enemy_tanklist = [] def startGame(self): #調(diào)用窗口初始化方法 pygame.display.init() MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) pygame.display.set_caption(’坦克大戰(zhàn)’+VERSION) #調(diào)用創(chuàng)建我方坦克的方法 self.creatMyTank() #v1.07調(diào)用創(chuàng)建敵方坦克的方法 self.creatEnemyTank() while True: #填充窗口背景色 MainGame.window.fill((0,0,0)) #調(diào)用事件處理方法 self.getEvents() #展示我方坦克 self.showMyTank() #v1.07調(diào)用展示敵方坦克的方法 self.showEnemyTank() if not MainGame.tank1.stop: # 我方坦克移動 MainGame.tank1.move() #刷新 pygame.display.update() #v1.06新增,程序休眠,優(yōu)化坦克移動速度 time.sleep(0.020) #創(chuàng)建我方坦克 def creatMyTank(self): MainGame.tank1 = MyTank(SCREEN_WIDTH/2,SCREEN_HEIGHT/3*2) #展示我方坦克 def showMyTank(self): MainGame.tank1.displayTank() #v1.07創(chuàng)建敵方坦克 def creatEnemyTank(self): for i in range(ENEMM_TANK_COUNT): num = random.randint(1,7) etank = EnemyTank(100*num,150) MainGame.enemy_tanklist.append(etank) #v1.07展示敵方坦克 def showEnemyTank(self): for etank in MainGame.enemy_tanklist: etank.displayTank()

運(yùn)行效果

基于python實(shí)現(xiàn)坦克大戰(zhàn)游戲

完整代碼

# from pygame import *import pygame,time,randomSCREEN_WIDTH = 900SCRREN_HEIGHT = 600COLOR_BLACK = pygame.Color(0,0,0)VERSION = ’v2.5’class MainGame(): #游戲窗口 window = None P1 = None #敵方坦克列表 enemyTankList = [] #我方子彈列表 myBulletList = [] #存儲敵方子彈 enemyBulletList = [] #存儲爆炸效果的列表 bombList = [] #存儲墻壁的列表 wallList = [] def __init__(self): self.version = VERSION def startGame(self): print(’游戲開始’) #初始化展示模塊 pygame.display.init() #調(diào)用自定義的創(chuàng)建窗口的方法 self.creatWindow() #設(shè)置游戲標(biāo)題 pygame.display.set_caption(’坦克大戰(zhàn)’+self.version) #調(diào)用創(chuàng)建墻壁的方法 self.creatWalls() #調(diào)用創(chuàng)建坦克方法 self.creatMyTank() #調(diào)用創(chuàng)建敵方坦克 self.creatEnemyTank() while True: #設(shè)置游戲背景的填充色 MainGame.window.fill(COLOR_BLACK) #調(diào)用展示墻壁的方法 self.showAllWalls() # 調(diào)用展示我方坦克的方法 self.showMyTank() #調(diào)用展示我方子彈的方法 self.showAllMyBullet() #調(diào)用展示所有爆炸效果的方法 self.showAllBombs() #調(diào)用展示敵方坦克的方法 self.showEnemyTank() #調(diào)用展示敵方子彈的方法 self.showAllEnemyBullet() #調(diào)用獲取事件,處理事件的方法 self.getAllEvents() #窗口持續(xù)刷新以即時顯示 pygame.display.update() time.sleep(0.02) def creatWindow(self): MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCRREN_HEIGHT)) def getAllEvents(self): #獲取所有的事件 event_list = pygame.event.get() for e in event_list: if e.type == pygame.QUIT: #關(guān)閉窗口,結(jié)束游戲,調(diào)用gameOver方法 self.gameOver() elif e.type == pygame.KEYDOWN: print(’點(diǎn)擊鍵盤按鍵’) if e.key == pygame.K_SPACE: bullet = MainGame.P1.shot() #控制子彈發(fā)射的數(shù)量 if len(MainGame.myBulletList) < 4: print(’發(fā)射子彈’) MainGame.myBulletList.append(bullet) print(’當(dāng)前我方子彈數(shù)量為:’,len(MainGame.myBulletList)) #創(chuàng)建音效對象,播放音效文件 audio = Audio(’tank-images/boom.wav’) audio.play() #創(chuàng)建墻壁的方法 def creatWalls(self): for i in range(1,8): wall = Wall(i*120,380,’tank-images/steels.gif’) MainGame.wallList.append(wall) #展示墻壁的方法 def showAllWalls(self): for w in MainGame.wallList: w.displayWall() def creatMyTank(self): MainGame.P1 = MyTank(SCREEN_WIDTH/2,SCRREN_HEIGHT/4*3) def showMyTank(self): MainGame.P1.displayTank() MainGame.P1.move() MainGame.P1.hitWalls() #展示我方子彈 def showAllMyBullet(self): for b in MainGame.myBulletList: if b.live: b.displayBullet() #調(diào)用子彈的移動方法 b.move() #調(diào)用是否打中敵方坦克的方法 b.hitEnemyTank() #調(diào)用是否打中墻壁的方法 b.hitWalls() else: MainGame.myBulletList.remove(b) #展示敵方子彈 def showAllEnemyBullet(self): for b in MainGame.enemyBulletList: if b.live: b.displayBullet() b.move() #調(diào)用是否打中墻壁的方法 b.hitWalls() else: MainGame.enemyBulletList.remove(b) def creatEnemyTank(self): for i in range(5): etank = EnemyTank(random.randint(1,8)*100,150) MainGame.enemyTankList.append(etank) def showEnemyTank(self): for etank in MainGame.enemyTankList: etank.displayTank() etank.move() etank.hitWalls() #調(diào)用射擊方法 etank.shot() #展示所有爆炸效果 def showAllBombs(self): for bomb in MainGame.bombList: if bomb.live: bomb.displayBomb() else: MainGame.bombList.remove(bomb) def gameOver(self): print(’游戲結(jié)束’) exit()class Tank(): def __init__(self,x,y): #圖片集(存儲4個方向的所有圖片) self.images = { ’U’:pygame.image.load(’tank-images/tankU.gif’), ’D’:pygame.image.load(’tank-images/tankD.gif’), ’L’:pygame.image.load(’tank-images/tankL.gif’), ’R’:pygame.image.load(’tank-images/tankR.gif’), } self.direction = ’U’ #從圖片集中根據(jù)方向獲取圖片 self.image = self.images[self.direction] self.rect = self.image.get_rect() self.rect.centerx = x self.rect.centery = y self.speed = 3 self.isDead = False #新增屬性用來記錄上一步的坐標(biāo) self.oldx = self.rect.centerx self.oldy = self.rect.centery def stay(self): self.rect.centerx = self.oldx self.rect.centery = self.oldy def hitWalls(self): index = self.rect.collidelist(MainGame.wallList) if index != -1: self.stay() def move(self): #記錄移動之前的坐標(biāo) self.oldx = self.rect.centerx self.oldy = self.rect.centery if self.direction == ’U’: if self.rect.centery > self.rect.height/2: self.rect.centery -= self.speed elif self.direction == ’D’: if self.rect.centery < SCRREN_HEIGHT - self.rect.height/2: self.rect.centery += self.speed elif self.direction == ’L’: if self.rect.centerx > self.rect.height/2: self.rect.centerx -= self.speed elif self.direction == ’R’: if self.rect.centerx < SCREEN_WIDTH - self.rect.height/2: self.rect.centerx += self.speed def shot(self): return Bullet(self) def displayTank(self): # 重新設(shè)置坦克圖片 self.image = self.images[self.direction] # 將坦克加載的到窗口 MainGame.window.blit(self.image, self.rect)class MyTank(Tank): def __init__(self,x,y): super(MyTank, self).__init__(x,y) def move(self): #pygame.key pressed_list = pygame.key.get_pressed() #分別判斷上下左右四個方向的按鍵,按下的狀態(tài) if pressed_list[pygame.K_LEFT]: #修改坦克的方向 self.direction = ’L’ super(MyTank, self).move() elif pressed_list[pygame.K_RIGHT]: self.direction = ’R’ super(MyTank, self).move() elif pressed_list[pygame.K_UP]: self.direction = ’U’ super(MyTank, self).move() elif pressed_list[pygame.K_DOWN]: self.direction = ’D’ super(MyTank, self).move()class EnemyTank(Tank): def __init__(self,x,y): super(EnemyTank, self).__init__(x,y) #隨機(jī)速度 self.speed = self.randSpeed(2,5) #隨機(jī)方向 self.direction = self.randDirection() #圖片 # self.image = self.images[self.direction] #坐標(biāo)位置 self.rect = self.image.get_rect() self.rect.centerx = x self.rect.centery = y #記錄坦克移動步數(shù)的變量 self.step = random.randint(25,50) #生成隨機(jī)速度值 def randSpeed(self,from_,to_): return random.randint(from_,to_) def randDirection(self): list1 = [’U’,’D’,’L’,’R’] return list1[random.randint(0,3)] def move(self): if self.step > 0: super(EnemyTank, self).move() self.step -= 1 else: #1.生成新的方向 self.direction = self.randDirection() #2.步數(shù)還原 self.step = random.randint(25,50) def shot(self): num = random.randint(1,40) if num == 1: b = Bullet(self) MainGame.enemyBulletList.append(b)class Bullet(): def __init__(self,tank): #圖片 if isinstance(tank,MyTank): self.image = pygame.image.load(’tank-images/tankmissile.gif’) else: self.image = pygame.image.load(’tank-images/enemymissile.gif’) #方向 self.direction = tank.direction #坐標(biāo)位置 self.rect = self.image.get_rect() #子彈的具體位置 if self.direction == ’U’: self.rect.centerx = tank.rect.centerx self.rect.centery = tank.rect.centery - tank.rect.height/2 - self.rect.height/2 elif self.direction == ’D’: self.rect.centerx = tank.rect.centerx self.rect.centery = tank.rect.centery + tank.rect.height / 2 + self.rect.height / 2 elif self.direction == ’L’: self.rect.centery = tank.rect.centery self.rect.centerx = tank.rect.centerx - tank.rect.height/2 - self.rect.height/2 elif self.direction == ’R’: self.rect.centery = tank.rect.centery self.rect.centerx = tank.rect.centerx + tank.rect.height / 2 + self.rect.height / 2 #移動速度 self.speed = 8 #子彈的狀態(tài)(live) self.live = True def move(self): if self.direction == ’U’: #邊界控制 if self.rect.centery > 0: self.rect.centery -= self.speed else: self.live = False elif self.direction == ’D’: if self.rect.centery < SCRREN_HEIGHT: self.rect.centery += self.speed else: self.live = False elif self.direction == ’L’: if self.rect.centerx > 0: self.rect.centerx -= self.speed else: self.live = False elif self.direction == ’R’: if self.rect.centerx < SCREEN_WIDTH: self.rect.centerx += self.speed else: self.live = False def displayBullet(self): MainGame.window.blit(self.image, self.rect) #子彈與墻壁的碰撞 def hitWalls(self): index = self.rect.collidelist(MainGame.wallList) if index != -1: self.live = False # 我方子彈是否碰撞到敵方坦克 def hitEnemyTank(self): index = self.rect.collidelist(MainGame.enemyTankList) if index != -1: # 打中敵方坦克后的業(yè)務(wù)邏輯 # 修改子彈的live屬性 self.live = False tank = MainGame.enemyTankList.pop(index) # 打中敵方坦克之后產(chǎn)生一個爆炸效果,裝進(jìn)爆炸效果列表中 bomb = Bomb(tank) MainGame.bombList.append(bomb)class Bomb(): def __init__(self,tank): #存儲多張爆炸效果的圖片 self.images = [ pygame.image.load(’tank-images/0.gif’), pygame.image.load(’tank-images/1.gif’), pygame.image.load(’tank-images/2.gif’), pygame.image.load(’tank-images/3.gif’), pygame.image.load(’tank-images/4.gif’), pygame.image.load(’tank-images/5.gif’), pygame.image.load(’tank-images/6.gif’) ] #用來記錄圖片為圖片集中的第幾張 self.index = 0 self.image = self.images[self.index] self.live = True self.rect = self.image.get_rect() self.rect.centerx = tank.rect.centerx self.rect.centery = tank.rect.centery def displayBomb(self): if self.index < len(self.images): self.image = self.images[self.index] self.index += 1 MainGame.window.blit(self.image, self.rect) else: self.index = 0 self.live = Falseclass Audio(): def __init__(self,musicpath): pygame.mixer.init() pygame.mixer.music.load(musicpath) def play(self): pygame.mixer.music.play()class Wall(): def __init__(self,x,y,imagepath): self.image = pygame.image.load(imagepath) self.rect = self.image.get_rect() self.rect.centerx = x self.rect.centery = y def displayWall(self): MainGame.window.blit(self.image,self.rect)game = MainGame()game.startGame()

更多關(guān)于python游戲的精彩文章請點(diǎn)擊查看以下專題:

python俄羅斯方塊游戲集合

python經(jīng)典小游戲匯總

python微信跳一跳游戲集合

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

javascript經(jīng)典小游戲匯總

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 武汉不干胶印刷_标签设计印刷_不干胶标签印刷厂 - 武汉不干胶标签印刷厂家 | 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 重庆私家花园设计-别墅花园-庭院-景观设计-重庆彩木园林建设有限公司 | 小型单室真空包装机,食品单室真空包装机-百科 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 苏州教学设备-化工教学设备-环境工程教学模型|同科教仪 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 仪器仪表网 - 永久免费的b2b电子商务平台| 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 噪声治理公司-噪音治理专业隔音降噪公司 |