




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、c#.貪吃蛇游戲設(shè)計(jì)課題名稱: 貪吃蛇游戲的設(shè)計(jì)與實(shí)現(xiàn) 院 (系): 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 2010年6月摘 要c#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.net framework之上的高級程序設(shè)計(jì)語言。并定于在微軟職業(yè)開發(fā)者論壇(pdc)上登臺亮相。c#是微軟公司研究員anders hejlsberg的最新成果。c#看起來與java有著驚人的相似;它包括了諸如單一繼承、接口、與java幾乎同樣的語法和編譯成中間代碼再運(yùn)行的過程。但是c#與java有著明顯的不同,它借鑒了delphi的一個特點(diǎn),與com(組件對象模型)是直接集成的,而且它是微軟公司.n
2、et windows網(wǎng)絡(luò)框架的主角?!柏澇陨摺庇螒蚴且粋€經(jīng)典的游戲,它因操作簡單、娛樂性強(qiáng)而廣受歡迎。本文基于c#技術(shù)和.net framework開發(fā)環(huán)境,開發(fā)了一個操作簡單、界面美觀、功能較齊全的“貪吃蛇”游戲。整個游戲包括開始、暫停、結(jié)束、音樂的播放及關(guān)數(shù)的選擇等功能。通過本游戲的開發(fā),達(dá)到學(xué)習(xí)c#技術(shù)和熟悉軟件開發(fā)流程的目的。本文在介紹c#相關(guān)技術(shù)和國內(nèi)外發(fā)展現(xiàn)狀的基礎(chǔ)上,對“貪吃蛇”游戲的整個生命周期的各個開發(fā)階段進(jìn)行了詳細(xì)地介紹。首先,分析了開發(fā)本游戲軟件的可行性,重點(diǎn)分析本設(shè)計(jì)所采用的技術(shù)的可行性。其次,從游戲主界面等幾方面,分析了本游戲的功能需求;從可使用性和安全性方面分析了屬
3、性需求。然后,進(jìn)行了游戲的概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),這也是本文的重點(diǎn)。本文還介紹了游戲軟件的程序調(diào)試過程和功能測試結(jié)果。關(guān)鍵詞:c#;.net framework;“貪吃蛇”游戲目 錄第一章游戲開發(fā)環(huán)境11.1 開發(fā)工具11.2 應(yīng)用環(huán)境2第二章游戲需求分析22.1 需求分析22.2 可行性分析2第三章程序概要設(shè)計(jì)23.1 設(shè)計(jì)目標(biāo)23.2 程序功能模塊3第四章程序詳細(xì)設(shè)計(jì)44.1 程序設(shè)計(jì)4第五章游戲測試205.1 測試的意義205.2 測試過程205.3 測試結(jié)果20參考文獻(xiàn)213第一章游戲開發(fā)環(huán)境1.1 開發(fā)工具 c#(讀做 c sharp)中文譯音暫時沒有.專業(yè)人士一般讀c sharp,現(xiàn)在
4、很多非專業(yè)一般讀c井。c#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由c和c+衍生出來的面向?qū)ο蟮木幊陶Z言。它在繼承c和c+強(qiáng)大功能的同時去掉了一些它們的復(fù)雜特性(例如沒有宏和模版,不允許多重繼承)。c#綜合了vb簡單的可視化操作和c+的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.net開發(fā)的首選語言。并且c#成為ecma與iso標(biāo)準(zhǔn)規(guī)范。c#看似基于c+寫成,但又融入其它語言如pascal、java、vb等。microsoft在正式的場合把c#描述為一種簡單、現(xiàn)代、面向?qū)ο?、類型非常安全、派生于c和c+的編程語言。大多數(shù)獨(dú)立的評論員對其說法是“派
5、生于c、c+和java”。這種描述在技術(shù)上是非常準(zhǔn)確的,但沒有涉及到該語言的真正有點(diǎn)。從語法上看,c#非常類似于c和java,許多關(guān)鍵字都是相同的,c#也使用類似于c和c+的塊結(jié)構(gòu),并用括號()來標(biāo)識代碼塊,用分號分隔各行語句。對c#代碼的第一印象是它非常類似于c和java代碼。但在這些表面上的類似性后面,c#學(xué)習(xí)起來要比c+容易得多,但比java難一些。其設(shè)計(jì)與現(xiàn)代開發(fā)工具的適應(yīng)性要比其他語言更高,它同時具有visual basic的易用性、高性能以及c+的低級內(nèi)存訪問性。#包括以下一些特性:l 完全支持類和面向?qū)ο缶幊蹋ń涌诤屠^承、虛函數(shù)和運(yùn)算符重載的處理。l 定義完整、一致的基本類型
6、集。l 對自動生成xml文檔說明的內(nèi)存。l 自動清理動態(tài)分配的內(nèi)存。l 可以用用戶定義的特性來標(biāo)記類或方法l 對.net基類庫的完全訪問權(quán),并易于訪問windows api。l 可以使用指針和直接內(nèi)存訪問,但c#語言可以在沒有它們的條件下訪問內(nèi)存。l 以vb的風(fēng)格支持屬性和事件。l 改變編譯器選項(xiàng),可以把程序編譯為可執(zhí)行文件或.net組件庫,該組件庫可以用與activex控件(com組件)相同的方式由其他代碼調(diào)用。l c#可以用于編寫asp.net動態(tài)web頁面和xml web服務(wù)。1.2 應(yīng)用環(huán)境(1)操作系統(tǒng):windows nt、windows xp、windows 7(2). 應(yīng)用軟件
7、:microsoft visual studio 2008 第二章游戲需求分析2.1 需求分析本游戲用戶可以自己練習(xí)和娛樂。本游戲需要滿足以下幾點(diǎn)要求:(1) 利用方向鍵“w、a、s、d”來改變蛇的運(yùn)行方向。 (2) 空格鍵暫停游戲,并在隨機(jī)的地方產(chǎn)生食物。 (3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運(yùn)行。(4) 用戶可以根據(jù)需要暫?;虿シ疟尘耙魳罚约案鶕?jù)水平選擇不同的游戲難度。2.2 可行性分析貪吃蛇游戲是一種簡單的大眾的游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來,深受廣大電腦玩家的喜愛,做一個簡單的貪吃蛇小游戲。貪吃蛇的核心算法是如何實(shí)現(xiàn)蛇的移動和吃掉食物后如何變成新的蛇體。沒有碰到
8、食物的時候,把當(dāng)前運(yùn)動方向上的下個節(jié)點(diǎn)入隊(duì),并以蛇節(jié)點(diǎn)的顏色繪制這個節(jié)點(diǎn),然后把頭指針?biāo)傅墓?jié)點(diǎn)出隊(duì),并以游戲框架內(nèi)部背景色重繪出隊(duì)的節(jié)點(diǎn),這樣就可以達(dá)到移動的效果。而在吃到食物的時候,則只需把食物入隊(duì)即可。實(shí)現(xiàn)貪吃蛇的基本的蛇身移動、吃到食物身體增長、和碰到墻壁或自身死亡,能夠暫停和開始及背景音樂的播放。玩家可以根據(jù)自己的水平選擇不同的級別進(jìn)行游戲挑戰(zhàn)。當(dāng)每個級別的分?jǐn)?shù)達(dá)到200后,會提示玩家選擇進(jìn)入下一關(guān)進(jìn)行更高難度的挑戰(zhàn)。第三章程序概要設(shè)計(jì)3.1 設(shè)計(jì)目標(biāo)本軟件是針對貪吃蛇小游戲的c#程序,利用方向鍵來改變蛇的運(yùn)行方向,空格鍵暫停游戲,并在隨機(jī)的地方產(chǎn)生食物,吃到食物就變成新的蛇體,碰到
9、壁或自身則游戲結(jié)束,否則正常運(yùn)行,背景音樂可以暫?;虿シ?。3.2 程序功能模塊游戲大體框架如下所示:鍵盤控制蛇運(yùn)動蛇吃食物吃一個加分,當(dāng)分?jǐn)?shù)達(dá)到時,提示進(jìn)入下一關(guān)開始暫停蛇開始運(yùn)動蛇暫停運(yùn)動游戲啟動界面游戲主菜單游戲窗口結(jié)束重新開始顯示重新繪制蛇顯示分?jǐn)?shù)結(jié)束游戲動下一關(guān)進(jìn)入下一關(guān)圖1游戲大體框架第四章程序詳細(xì)設(shè)計(jì)4.1 程序設(shè)計(jì)1.游戲啟動窗口 此窗口為進(jìn)入游戲的歡迎界面,在任務(wù)欄上不顯示圖標(biāo)。窗口界面截圖如下:圖游戲啟動窗口主要功能代碼如下:private void 啟動窗口_load(object sender, eventargs e) /設(shè)置啟動窗體 this.formborderst
10、yle = formborderstyle.none; this.backgroundimage = image.fromfile(貪吃蛇.jpg); this.timer1.start(); this.timer1.interval = 1500; private void timer1_tick(object sender, eventargs e) /關(guān)閉啟動窗體 this.close(); private void 啟動窗口_formclosed(object sender, formclosedeventargs e) /關(guān)閉定時器 this.timer1.stop();.游戲主菜單
11、窗口此窗口為進(jìn)入游戲與否及獲取游戲幫助的界面,選擇“幫助”按鈕可以獲得游戲相關(guān)操作的幫助,選擇退出可直接退出游戲,選擇進(jìn)入游戲則可以開始游戲。主菜單窗口和幫助窗口都會在任務(wù)欄上顯示圖標(biāo)。窗口界面截圖如下:圖主菜單窗口幫助窗口截圖如下:圖幫助窗口主要功能代碼如下:private void btnstart_click(object sender, eventargs e)messagebox.show(游戲即將開始!); this.dialogresult = dialogresult.ok; private void btnexit_click(object sender, eventargs
12、 e) this.close(); private void btnhelp_click(object sender, eventargs e) var frm_help = new frmhelp(); frm_help.show(); private void form2_load(object sender, eventargs e) 啟動窗口 myflash = new 啟動窗口(); myflash.showdialog(); .游戲主窗口此窗口為整個程序的主要部分,該窗口包含了游戲開始、暫停、重新開始、停止音樂、退出游戲、難度選擇及分?jǐn)?shù)顯示等功能。當(dāng)進(jìn)入游戲窗口后,開始按鈕就會自動
13、獲得聚焦,只要玩家按下回車或點(diǎn)擊“開始”按鈕就可以開始游戲。蛇的初始默認(rèn)為左上角,顏色為藍(lán)色;食物為隨機(jī)產(chǎn)生,顏色為紅色;游戲背景為輕綠色,整個游戲框架按紅、藍(lán)、綠三原色設(shè)計(jì)。窗口截圖如下所示:圖游戲初始窗口游戲開始后,蛇通過蛇頭headpoint獲取下一個位置,然后將下一個點(diǎn)繪制成蛇體新蛇頭,而同時蛇尾則繪制成游戲框架gameframe的一部分,從而實(shí)現(xiàn)了蛇體不斷向前移動的效果。當(dāng)蛇遇到食物時,蛇頭headpoint與食物foodpoint重合,使其繪制成為新的蛇頭,然后又重新隨機(jī)產(chǎn)生一個食物。當(dāng)蛇吃夠20個食物時,也就是分?jǐn)?shù)達(dá)到200時,游戲會暫停,提示玩家選擇下一關(guān)進(jìn)行游戲。每一關(guān)游戲的
14、速度都會按一定的比例遞增增加,此功能的實(shí)現(xiàn)代碼如下: switch (bobox1.selectedindex) case 0: this.timer1.interval = 500; break; case 1: this.timer1.interval = 400; break; case 2: this.timer1.interval = 300; break; case 3: this.timer1.interval = 200; break; case 4: this.timer1.interval = 100; break; 窗口截圖如下所示:圖闖關(guān)成功窗口或者如果玩家想重新開始游
15、戲,則點(diǎn)擊“重新開始”按鈕,此時會彈出一個對話框,要求玩家確認(rèn)是否重新開始,如果選擇“否”,則游戲繼續(xù)進(jìn)行,如果選擇“是”,則此時游戲的基本框架會自動重新繪制,蛇體回到初始默認(rèn)狀態(tài)。窗口截圖如下所示:圖重新開始窗口當(dāng)蛇頭碰到自身或是碰到墻壁時,則游戲暫停,系統(tǒng)提示玩家是否重新開始游戲。如果選擇“否”,則游戲結(jié)束,否則游戲重新開始。窗口截圖如下所示:圖死亡窗口過程中,玩家可以隨時選擇游戲的難度進(jìn)行挑戰(zhàn),當(dāng)點(diǎn)擊難度選擇框時,游戲會暫停選擇關(guān)數(shù)后,會彈出一對話框,要求玩家確認(rèn)是否進(jìn)入所選難度挑戰(zhàn),如果點(diǎn)擊“否”,則游戲繼續(xù)進(jìn)行,如果點(diǎn)擊“是”,則進(jìn)入該難度,游戲框架重新繪制,基本和重新開始一樣,不同
16、的難度蛇的移動速度會加快。窗口如下所示:圖選擇難度窗口snake類 成員變量見表:表 主要成員變量成員變量描述變量類型名稱蛇體arraylistsnake食物nodefood方向intderection分?jǐn)?shù)intscore時間booltimer死亡判斷booldiedif運(yùn)動中boolplay暫停boolpause左keycodea上keycodew右keycoded下keycodes 主要功能代碼如下:public partial class 游戲窗口 : form snack snack1 = new snack(4); /初始化蛇 /食物顏色 private system.drawing
17、.color foodcolor = system.drawing.color.green ; food food = new food(); /初始化食物 bool play = false; /判斷是否進(jìn)行游戲 bool fooddraw = false; /記錄得分 int scores = 0; /得分 bool musicplay = false; /播放音樂 /定義播放音樂組件 public static uint snd_async = 0x0001; / play asynchronously public static uint snd_filename = 0x000200
18、00; / name is file name dllimport(winmm.dll) public static extern uint mcisendstring(string lpstrcommand, string lpstrreturnstring, uint ureturnlength, uint hwndcallback); public 游戲窗口() initializecomponent(); /游戲基本框架 public void drawgameframe(graphics g) for(int i=0;ithis.picturebox1.width;i+=10) fo
19、r (int j = 0; j this.picturebox1.height; j += 10) g.fillellipse(brushes.lightgreen, i, j, 10,10); /蛇的定義 class snack public point startpoint = new point(0, 0);/初始話開始的坐標(biāo) point addpoint; public arraylist snackpoint = new arraylist(); point headpoint; public point headpoint get return headpoint; set hea
20、dpoint = value; int direction = 1; /初始方向向右 public int direction get return direction; set direction = value; /蛇的構(gòu)造器 public snack(int lenth) for (int i = 0; i lenth; i+) snackpoint.add(startpoint); if (i = lenth - 1) headpoint = startpoint; return; startpoint = new point(startpoint.x + 10, startpoint
21、.y); /畫蛇函數(shù) public void drawsnack(graphics g) for (int i = 0; i snackpoint.count; i+) g.fillellipse(brushes.blue, (point)snackpointi).x, (point)snackpointi).y, 10, 10); /添加一節(jié)蛇 public void addsnack() if (direction = 1) addpoint = new point(headpoint.x + 10, headpoint.y); else if (direction = 2) addpoi
22、nt = new point(headpoint.x - 10, headpoint.y); else if (direction = 3) addpoint = new point(headpoint.x, headpoint.y - 10); else if (direction = 4) addpoint = new point(headpoint.x, headpoint.y + 10); snackpoint.add(addpoint); headpoint = addpoint; /減少一節(jié)蛇 public void removesnacknode() snackpoint.rem
23、oveat(0); /蛇移動函數(shù) public void snackmoce(graphics g) / 蛇的移動函數(shù)主要通過在蛇頭部多加一點(diǎn), / 在蛇尾部刪除一點(diǎn),從而實(shí)現(xiàn)蛇移動的效果 drawsnack(g); removesnacknode(); /判斷死亡 public bool diedif() for (int i = 0; i snackpoint.count - 1; i+) if (point)snackpointi = headpoint) return true; /判斷是否咬到自己 if (headpoint.x 390 | headpoint.y 370) retu
24、rn true; /判斷是否撞到墻 return false; /食物的定義 class food point foodpoint = new point(100, 200); /食物坐標(biāo)的構(gòu)造器 public point foodpoint get return foodpoint; set foodpoint = value; /構(gòu)建隨機(jī)的食物點(diǎn) public void getfoodpoint() /隨機(jī)產(chǎn)生食物 random random = new random(); int x = random.next(1, 38) * 10; int y = random.next(2, 36
25、) * 10; foodpoint = new point(x, y); /畫出食物 public void drawfood(graphics g) g.fillellipse(brushes.red, foodpoint.x, foodpoint.y, 10, 10); /游戲 private void picturebox1_paint(object sender, painteventargs e) graphics g = e.graphics; drawgameframe(e.graphics); /畫出游戲輪廓 snack1.drawsnack(e.graphics); /畫出蛇
26、 if (fooddraw = false) food.getfoodpoint(); fooddraw = true; food.drawfood(e.graphics); /畫出食物 if (play) snack1.snackmoce(e.graphics); this.txtscores.text = scores.tostring(0); if (this.timer1.enabled = true) this.btnbegin.focus(); private void timer1_tick(object sender, eventargs e) if (play) snack1
27、.addsnack(); if (snack1.headpoint = food.foodpoint) scores += 10; fooddraw = false; snack1.addsnack(); /每吃一個食物,速度就會加快 / timer1.interval -= 5; if (snack1.diedif() timer1.enabled = false; play = false; musicplay = false; if (dialogresult.yes = messagebox.show(您已經(jīng)死亡,是否重新開始游戲?, , messageboxbuttons.yesno
28、, messageboxicon.information) mcisendstring(close temp_alias, null, 0, 0); mcisendstring( alias temp_alias, null, 0, 0); mcisendstring(play temp_alias repeat, null, 0, 0); scores = 0; snack1 = new snack(4); this.refresh(); this.timer1.interval = 500; bobox1.text = 第一關(guān); else messagebox.show(游戲結(jié)束!); s
29、nack1.snackpoint.clear(); this.refresh(); this.refresh(); private void form1_load(object sender, eventargs e) this.formborderstyle = formborderstyle.fixeddialog; this.txtscores.clear(); this.txtscores.text = scores.tostring(0); /方向控制 private void btnbegin_keyup(object sender, keyeventargs e) if (e.k
30、eycode = keys.a & snack1.direction != 1) snack1.direction = 2; else if (e.keycode = keys.d & snack1.direction != 2) snack1.direction = 1; else if (e.keycode = keys.w & snack1.direction != 4) snack1.direction = 3; else if (e.keycode = keys.s & snack1.direction != 3) snack1.direction = 4; else if (e.k
31、eycode = keys.space) this.btnpause.focus(); this.musicplay = false; if (this.timer1.enabled =!false) this.btnbegin.focus(); this.play = false; this.timer1.enabled = false; this.musicplay = false; mcisendstring(close temp_alias, null, 0, 0); mcisendstring( , null, 0, 0); mcisendstring(play temp_alias
32、 repeat, null, 0, 0); private void 游戲窗口_load(object sender, eventargs e) this.formborderstyle = formborderstyle.fixeddialog; this.txtscores.clear(); this.txtscores.text = scores.tostring(0); /開始游戲 private void btnbegin_click_1(object sender, eventargs e) play = true; this.timer1.enabled = true; musi
33、cplay = true; mcisendstring(close temp_alias, null, 0, 0); mcisendstring(open 甩蔥歌.mp3 alias temp_alias, null, 0, 0); mcisendstring(play temp_alias repeat, null, 0, 0); /暫停 private void btnpause_click_1(object sender, eventargs e) this.timer1.enabled = false; play = false; musicplay = false; mcisends
34、tring(close temp_alias, null, 0, 0); mcisendstring( , null, 0, 0); mcisendstring(play temp_alias repeat, null, 0, 0); /重新開始游戲 private void btnreplay_click_1(object sender, eventargs e) this.timer1.enabled = false; if (dialogresult.yes = messagebox.show(確定要重新開始嗎?, xx, messageboxbuttons.yesno, message
35、boxicon.information) /選擇重新開始游戲 mcisendstring(close temp_alias, null, 0, 0); mcisendstring( , null, 0, 0); mcisendstring(play temp_alias repeat, null, 0, 0); snack1 = new snack(5); this.refresh(); this.timer1.interval = 500; this.txtscores.text = scores.tostring(0); scores = 0; bobox1.text = 第一關(guān); els
36、e this.timer1.enabled = true; /停止播放音樂 private void button1_click_1(object sender, eventargs e) mcisendstring(close temp_alias, null, 0, 0); mcisendstring( alias temp_alias, null, 0, 0); mcisendstring(play temp_alias repeat, null, 0, 0); /退出游戲 private void button2_click_1(object sender, eventargs e)
37、this.close(); /難度選擇 private void combobox1_selectedindexchanged(object sender, eventargs e) /游戲難度共有關(guān) switch (bobox1.selectedindex) case 0: this.timer1.interval = 500; break; case 1: this.timer1.interval = 400; break; case 2: this.timer1.interval = 300; break; case 3: this.timer1.interval = 200; break; case 4: this.timer1.interval = 100; break; /進(jìn)入下一關(guān) this.timer1.enabled = false; if (dialogresult.yes = messagebox.show(確定要進(jìn)入下一關(guān)嗎?, xx, messageboxbuttons.yesno, messageboxicon.information) mcisendstring(close temp_alias, null, 0, 0); mcisendstring( , null,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土建瓦工勞務(wù)分包合同
- 常年法律顧問合同
- 詳細(xì)操作流程說明書
- 2025年撫州貨運(yùn)資格證模擬考試題庫下載
- 2025年徐州市汽車租賃合同5篇
- 農(nóng)莊農(nóng)場合作經(jīng)營合同協(xié)議書范本6篇
- 公司副食品購銷合同7篇
- 房地產(chǎn)開發(fā)聯(lián)營合同
- 專利技術(shù)的授權(quán)與使用條款協(xié)議
- 無償保管合同范本-倉儲保管合同8篇
- 《審計(jì)課件東北財(cái)經(jīng)大學(xué)會計(jì)系列教材》課件
- 中國老年危重患者營養(yǎng)支持治療指南2023解讀課件
- 《光伏電站運(yùn)行與維護(hù)》試題及答案一
- 2024年貴州省高職(專科)分類考試招收中職畢業(yè)生文化綜合考試語文試題
- 一年級體育教案全冊(水平一)下冊
- 全身麻醉后護(hù)理常規(guī)
- 2024年貴州省貴陽市白云區(qū)九年級中考一模數(shù)學(xué)試題(解析版)
- 500kV超高壓絕緣料和新型特種電纜研發(fā)制造項(xiàng)目可行性研究報(bào)告-立項(xiàng)備案
- 2024年贛南衛(wèi)生健康職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫審定版
- 廣告牌制作安裝應(yīng)急預(yù)案
- 塔吊的安拆培訓(xùn)課件
評論
0/150
提交評論