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

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

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

瀏覽:6日期:2022-07-16 14:38:07

項(xiàng)目簡(jiǎn)介

本項(xiàng)目報(bào)名參加了“兗州中材杯”武漢理工大學(xué)第十一屆環(huán)保創(chuàng)意作品大賽藝術(shù)理念組比賽。組員共三名,本人負(fù)責(zé)代碼實(shí)現(xiàn)部分,其余兩人分別負(fù)責(zé)項(xiàng)目策劃與場(chǎng)景人物繪制。

項(xiàng)目背景

小組中負(fù)責(zé)策劃的同學(xué)經(jīng)過(guò)一定的調(diào)研之后發(fā)現(xiàn),我校在校學(xué)生普遍缺乏垃圾分類(lèi)方面的知識(shí)。經(jīng)過(guò)討論后,我們把游戲方向定位于“垃圾分類(lèi)”,游戲類(lèi)型定位于像素風(fēng)游戲,由于本人水平和時(shí)間有限,只能將玩法設(shè)計(jì)得盡量簡(jiǎn)單。感謝另外兩位組員,他們的努力掩蓋了我水平上的不足。

玩法介紹

家控制一名角色在操場(chǎng)背景上移動(dòng),垃圾桶在操場(chǎng)邊上。撿起垃圾丟進(jìn)相應(yīng)的垃圾桶內(nèi),若全部正確投放則游戲成功,否則游戲失敗。游戲期間,若有不清楚該作何分類(lèi)的垃圾,則可以點(diǎn)擊圖書(shū)館的按鈕,進(jìn)入圖書(shū)館查詢(xún)。圖書(shū)館提供垃圾圖鑒和分類(lèi)標(biāo)準(zhǔn)兩種信息。垃圾圖鑒幫助玩家分辨自己撿到的垃圾,而分類(lèi)標(biāo)準(zhǔn)指每種垃圾的定義及舉例。

項(xiàng)目成果

本項(xiàng)目在“兗州中材杯”武漢理工大學(xué)第十一屆環(huán)保創(chuàng)意作品大賽藝術(shù)理念組比賽中最終獲得了第五名、二等獎(jiǎng)的成績(jī),距第四名僅差0.5分。

項(xiàng)目實(shí)現(xiàn)

寫(xiě)項(xiàng)目時(shí)本人僅自學(xué)了一個(gè)月的Python,且本人是大一新生,對(duì)計(jì)算機(jī)科學(xué)的基礎(chǔ)知識(shí)了解甚少,若代碼風(fēng)格幼稚、愚蠢,還望讀者見(jiàn)諒。

模塊劃分

游戲按場(chǎng)景分為以下幾個(gè)模塊:開(kāi)始游戲界面游戲說(shuō)明界面人物選擇界面操場(chǎng)界面(主要游戲場(chǎng)地)、圖書(shū)館外界面圖書(shū)館內(nèi)界面游戲結(jié)束界面

開(kāi)始游戲界面:背景(像素化的學(xué)校建筑),游戲標(biāo)題,三個(gè)按鈕(開(kāi)始、游戲說(shuō)明、退出)。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

游戲說(shuō)明界面:背景(與開(kāi)始界面相同),游戲說(shuō)明文字,返回按鈕。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

人物選擇界面:背景,提示(選擇人物),兩個(gè)可選人物。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

操場(chǎng)界面:背景,人物,垃圾桶,隨機(jī)產(chǎn)生的垃圾,圖書(shū)館按鈕。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

圖書(shū)館外界面:背景(我校圖書(shū)館的像素風(fēng)繪制)、操場(chǎng)按鈕(會(huì)到操場(chǎng))、進(jìn)入按鈕(進(jìn)入圖書(shū)館內(nèi)部)。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

圖書(shū)館內(nèi)界面:背景(我校圖書(shū)館內(nèi)部),各類(lèi)垃圾圖標(biāo)按鈕(廚余垃圾、可回收垃圾、有害垃圾、其他垃圾),垃圾圖鑒按鈕,返回按鈕。子界面:各類(lèi)垃圾信息界面,垃圾圖鑒界面,返回按鈕。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

游戲結(jié)束界面:勝利界面,失敗界面。

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

代碼實(shí)現(xiàn)

直接上代碼:

import pygame as pyimport sysimport randomfrom pygame.locals import *#===========================================================#========================前期準(zhǔn)備===========================py.init()#注:游戲需要的所有文件(圖片等)都放在同游戲目錄的'Files'目錄下。#定義一個(gè)按鈕類(lèi)class Button(py.rect.Rect): def __init__(self, obj): super().__init__(obj) def has(self, pos): if self.right >= pos[0] >= self.left and self.bottom >= pos[1] >= self.top: return True else: return Falsescreen = py.display.set_mode((1000, 650))#===========================================================#=========================圖書(shū)館內(nèi)==========================def knowledge(selection): path = ’Filesinside_liberaryknowledge’ + str(selection) + ’.jpg’ know = py.image.load(path) know = py.transform.smoothscale(know,(1000,650)) screen.blit(know,(0,0)) exits = py.image.load(’Filesinside_liberaryback.jpg’) exits = py.transform.smoothscale(exits,(72,72)) exit_button = screen.blit(exits,(918, 570)) exit_button = Button(exit_button) py.display.flip() #進(jìn)入事件循環(huán) while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() #點(diǎn)擊離開(kāi)該頁(yè)面 if exit_button.has(pos): selection = 0 break if not selection: breakdef inside_Liberary(): ilib = py.image.load(’Filesinside_liberaryInside.jpg’) ilib = py.transform.smoothscale(ilib,(1000,650)) screen.blit(ilib,(0,0)) #退出圖書(shū)館的按鈕 exits = py.image.load(’Filesinside_liberaryexit.jpg’) exits = py.transform.smoothscale(exits,(72,81)) exit_button = screen.blit(exits,(5, 560)) exit_button = Button(exit_button) #廚余垃圾按鈕 rubbish1 = py.image.load(’Filesinside_liberaryrubbish1.jpg’) rubbish1 = py.transform.smoothscale(rubbish1,(150,298)) rubbish1_button = screen.blit(rubbish1, (80,150)) rubbish1_button = Button(rubbish1_button) #可回收垃圾按鈕 rubbish2 = py.image.load(’Filesinside_liberaryrubbish2.jpg’) rubbish2 = py.transform.smoothscale(rubbish2,(150,298)) rubbish2_button = screen.blit(rubbish2, (310,150)) rubbish2_button = Button(rubbish2_button) #有害垃圾按鈕 rubbish3 = py.image.load(’Filesinside_liberaryrubbish3.jpg’) rubbish3 = py.transform.smoothscale(rubbish3,(150,298)) rubbish3_button = screen.blit(rubbish3, (540,150)) rubbish3_button = Button(rubbish3_button) #不可回收垃圾按鈕 rubbish4 = py.image.load(’Filesinside_liberaryrubbish4.jpg’) rubbish4 = py.transform.smoothscale(rubbish4,(150,298)) rubbish4_button = screen.blit(rubbish4, (770,150)) rubbish4_button = Button(rubbish4_button) #圖鑒按鈕 rubbish5 = py.image.load(’Filesinside_liberaryrubbish5.jpg’) rubbish5 = py.transform.smoothscale(rubbish5,(82, 72)) rubbish5_button = screen.blit(rubbish5, (903,560)) rubbish5_button = Button(rubbish5_button) py.display.flip() selection = -1 #進(jìn)入事件循環(huán) while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() #點(diǎn)擊離開(kāi)圖書(shū)館 if exit_button.has(pos): selection = 0 break #點(diǎn)擊廚余垃圾 if rubbish1_button.has(pos): selection = 1 break #點(diǎn)擊可回收垃圾 if rubbish2_button.has(pos): selection = 2 break #點(diǎn)擊有害垃圾 if rubbish3_button.has(pos): selection = 3 break #點(diǎn)擊不可回收垃圾 if rubbish4_button.has(pos): selection = 4 break #點(diǎn)擊圖鑒 if rubbish5_button.has(pos): selection = 5 break if selection != -1: break if selection: knowledge(selection) inside_Liberary()#===========================================================#=========================圖書(shū)館外==========================def outside_Liberary(): olib = py.image.load(’Filesoutside_liberaryOutside.jpg’) olib = py.transform.smoothscale(olib,(1000,650)) screen.blit(olib,(0,0)) #進(jìn)入圖書(shū)館的按鈕 enter = py.image.load(’Filesoutside_liberaryenter_lib.jpg’) enter = py.transform.smoothscale(enter,(72, 72)) enter_button = screen.blit(enter,(470,550)) enter_button = Button(enter_button) #退出圖書(shū)館的按鈕 exits = py.image.load(’Filesoutside_liberaryplayground.jpg’) exits = py.transform.smoothscale(exits,(72, 51)) exit_button = screen.blit(exits,(5, 590)) exit_button = Button(exit_button) py.display.flip() selection = -1 #進(jìn)入事件循環(huán) while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() #點(diǎn)擊返回操場(chǎng) if exit_button.has(pos): selection = 0 break #點(diǎn)擊進(jìn)入圖書(shū)館 if enter_button.has(pos): selection = 1 break if selection != -1: break if selection: inside_Liberary() outside_Liberary()#===========================================================#==========================游戲幫助=========================def help_page(): background = py.image.load(’Fileshelpbackground.jpg’) background = py.transform.smoothscale(background,(1000,650)) screen.blit(background,(0,0)) #返回按鈕 exits = py.image.load(’Fileshelpback.jpg’) exits = py.transform.smoothscale(exits,(72,57)) exit_button = screen.blit(exits,(5, 585)) exit_button = Button(exit_button) py.display.flip() back = 0 while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() if exit_button.has(pos): back = 1 break if back: break #===========================================================#==========================游戲結(jié)束=========================def game_over(result): path = ’Filesgame_overresult’ + str(result) + ’.jpg’ background = py.image.load(path) background = py.transform.smoothscale(background,(1000,650)) screen.blit(background,(0,0)) py.display.flip() temp = 0 while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: temp = 1 break if temp: break#===========================================================#==========================操場(chǎng)環(huán)節(jié)=========================choices = [’01’, ’02’, ’11’, ’12’, ’21’, ’22’, ’31’]class Rubbish(): def __init__(self, sort): self.sort = sort self.img = py.image.load(’Filesplayground’ + sort + ’.jpg’) x = random.randint(100, 1400) y = random.randint(110, 900) self.position = self.img.get_rect() self.position = self.position.move((x, y)) screen.blit(self.img, self.position)class Role(): def __init__(self, role): self.r_side = py.image.load(’Filesplayground’ + role + ’1.jpg’) self.r_walk = py.image.load(’Filesplayground’ + role + ’2.jpg’) self.l_side = py.transform.flip(self.r_side, True, False) self.l_walk = py.transform.flip(self.r_walk, True, False) self.img = self. r_side self.position = self.img.get_rect() screen.blit(self.img, self.position) self.rubbish = None def move(self, key): if key == K_UP: if self.position.top <= 200: return (0, 2) else: self.position = self.position.move(0, -2) return 0 if key == K_DOWN: if self.position.bottom >= 450: return (0, -2) else: self.position = self.position.move(0, 2) return 0 if key == K_RIGHT: if self.position.right >= 800: return (-2, 0) else: self.position = self.position.move(2, 0) return 0 if key == K_LEFT: if self.position.left <= 200: return (2, 0) else: self.position = self.position.move(-2, 0) return 0 class Trash_can(): def __init__(self, num): self. num = num self.img = py.image.load(’Filesplayground’ + str(num) + ’.jpg’) self.img = py.transform.smoothscale(self.img,(100, 92)) self.position = self.img.get_rect() self.position = self.position.move((100 + num*200, 0)) screen.blit(self.img, self.position)def playground(selection): background = py.image.load(’FilesplaygroundPlayground.jpg’) screen.blit(background, [0, 0]) lib = py.image.load(’Filesplaygroundliberary.jpg’) lib = py.transform.smoothscale(lib, (78, 72)) lib_button = screen.blit(lib, (900, 10)) lib_button = Button(lib_button) trash_can = [] for num in range(0, 4): trash_can.append(Trash_can(num)) role = Role(selection) rubbish = [] for sort in choices: rubbish.append(Rubbish(sort)) py.display.flip() down = 0 go = None move_bg = [0, 0] temp = 0 while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() if lib_button.has(pos): outside_Liberary() if event.type == KEYDOWN and event.key in (K_UP, K_DOWN, K_RIGHT, K_LEFT): if event.key == K_RIGHT: role.img = role.r_side elif event.key == K_LEFT: role.img = role.l_side down = 1 go = event.key if event.type == KEYUP and event.key == go: if event.key == K_RIGHT: role.img = role.r_side elif event.key == K_LEFT: role.img = role.l_side down = 0 take = role.position.collidelist([each.position for each in rubbish]) if take >= 0 and not role.rubbish: role.rubbish = rubbish[take].sort[0] del rubbish[take] put = role.position.collidelist([each.position for each in trash_can]) if put >= 0 and role.rubbish: if role.rubbish == str(trash_can[put].num): role.rubbish = None if not len(rubbish): game_over(1) break else: game_over(2) break if down: moved = role.move(go) temp += 1 if not temp % 20: if role.img == role.r_side: role.img = role.r_walk elif role.img == role.r_walk: role.img = role.r_side elif role.img == role.l_side: role.img = role.l_walk else: role.img = role.l_side if moved: if 0 >= moved[0] + move_bg[0] >= -497 and 0 >= moved[1] + move_bg[1] >= -326: for i in range(2): move_bg[i] += moved[i] for each in rubbish: each.position = each.position.move(moved) for each in trash_can: each.position = each.position.move(moved) elif role.position.left - moved[0] >= 0 and role.position.right - moved[0] <= 1000 and role.position.top - moved[1] >= 0 and role.position.bottom - moved[1] <= 650: role. position = role.position.move([-i for i in moved]) screen.blit(background, move_bg) lib = py.image.load(’Filesplaygroundliberary.jpg’) lib = py.transform.smoothscale(lib, (78, 72)) lib_button = screen.blit(lib, (900, 10)) lib_button = Button(lib_button) for each in trash_can: screen.blit(each.img, each.position) for each in rubbish: screen.blit(each.img, each.position) screen.blit(role.img, role.position) py.display.flip()#===========================================================#==========================選擇人物=========================def choose_role(): background = py.image.load(’Fileschoose_playerbackground.jpg’) background = py.transform.smoothscale(background,(1000,650)) screen.blit(background, (0, 0)) man = py.image.load(’Fileschoose_playerman.jpg’) man = py.transform.smoothscale(man,(123, 325)) man_button = screen.blit(man,(200, 200)) man_button = Button(man_button) woman = py.image.load(’Fileschoose_playerwoman.jpg’) woman = py.transform.smoothscale(woman,(113, 325)) woman_button = screen.blit(woman,(687, 200)) woman_button = Button(woman_button) py.display.flip() while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() if man_button.has(pos): return ’man’ if woman_button.has(pos): return ’woman’ #===========================================================#========================開(kāi)始游戲界面========================def start(): background = py.image.load(’Filesstartbackground.jpg’) background = py.transform.smoothscale(background,(1000,650)) screen.blit(background, (0, 0)) start_game = py.image.load(’Filesstartstart_game.jpg’) start_game = py.transform.smoothscale(start_game,(140, 149)) start_button = screen.blit(start_game,(150, 330)) start_button = Button(start_button) game_help = py.image.load(’Filesstartgame_help.jpg’) game_help = py.transform.smoothscale(game_help,(280, 182)) help_button = screen.blit(game_help,(380, 320)) help_button = Button(help_button) quit_game = py.image.load(’Filesstartquit_game.jpg’) quit_game = py.transform.smoothscale(quit_game,(200,160)) quit_button = screen.blit(quit_game,(680, 330)) quit_button = Button(quit_button) py.display.flip() while True: for event in py.event.get(): if event.type == QUIT: sys.exit() if event.type == MOUSEBUTTONDOWN: pos = py.mouse.get_pos() if start_button.has(pos): role = choose_role() playground(role) break elif help_button.has(pos): help_page() break elif quit_button.has(pos): sys.exit() break start()start()

游戲效果

游戲演示如下:

使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))

點(diǎn)此觀看視頻:垃圾分類(lèi)小游戲

總結(jié)

這個(gè)游戲是本人第一次寫(xiě)出一百行以上的代碼,寫(xiě)完后沒(méi)來(lái)得及進(jìn)行進(jìn)一步的優(yōu)化就提交了項(xiàng)目。

到此這篇關(guān)于使用pygame實(shí)現(xiàn)垃圾分類(lèi)小游戲功能(已獲校級(jí)二等獎(jiǎng))的文章就介紹到這了,更多相關(guān)pygame垃圾分類(lèi)小游戲內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: pygame
相關(guān)文章:
主站蜘蛛池模板: 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 执业药师报名时间,报考条件,考试时间-首页入口 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司| 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 万家财经_财经新闻_在线财经资讯网 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 烽火安全网_加密软件、神盾软件官网| 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 |