C語言編程大講壇_第1頁
C語言編程大講壇_第2頁
C語言編程大講壇_第3頁
C語言編程大講壇_第4頁
C語言編程大講壇_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、CHAPTER18第18課 俄羅斯方塊游戲俄羅斯方塊是一款全球性的應(yīng)用在電視游戲機(jī)和掌上游戲機(jī)的一款游戲,它曾經(jīng)產(chǎn)生的轟動與創(chuàng)造的經(jīng)濟(jì)價值可以說是游戲史上的一件大事。這款游戲最初是由前蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。本課將介紹使用C語言開發(fā)一個簡單俄羅斯方塊游戲的方法,并詳細(xì)介紹其具體的實(shí)現(xiàn)流程。18.1 游戲功能描述本課將通過一個簡單的俄羅斯方塊游戲?qū)嵗?,來說明C語言編寫游戲項(xiàng)目的基本方法。本實(shí)例的實(shí)現(xiàn)文件為“ELS.c”,保存在“光盤:18”文件夾中。本實(shí)例游戲的構(gòu)成功能模

2、塊如下。1方塊預(yù)覽功能當(dāng)游戲運(yùn)行并在底部出現(xiàn)一個游戲方塊時,必須在預(yù)覽界面中出現(xiàn)下一個方塊,這樣便于玩家進(jìn)行提前控制處理。因?yàn)樵诖擞螒蛑杏?9種方塊,所以要在方塊預(yù)覽區(qū)內(nèi)提前顯示隨機(jī)生成的游戲方塊。2方塊控制功能可以對出現(xiàn)的方塊進(jìn)行移動處理,分別實(shí)現(xiàn)左移、右移、快速下移、自由下落和行滿自動消除功能。3游戲顯示更新功能當(dāng)游戲在進(jìn)行方塊移動處理時,要清除先前的游戲方塊,用新坐標(biāo)重新繪制游戲方塊。4游戲速度和分?jǐn)?shù)更新功能游戲分?jǐn)?shù)一般用完成的行數(shù)來劃分,例如,可以設(shè)置完成完整的一行為10分。當(dāng)達(dá)到一定數(shù)量后,需要給用戶進(jìn)行升級。當(dāng)用戶級別提升后,方塊的下落速度將增加,從而游戲的難度也相應(yīng)地提高。5游戲

3、幫助功能用戶進(jìn)入游戲系統(tǒng)后,通過幫助了解游戲的操作。上述功能的總體結(jié)構(gòu)如圖18-1所示。圖18-1 游戲構(gòu)成功能模塊18.2 游戲總體設(shè)計通過對游戲構(gòu)成功能的分析,即可根據(jù)各功能模塊進(jìn)行相應(yīng)的設(shè)計處理。本節(jié)將簡要介紹游戲的總體設(shè)計過程。 功能模塊設(shè)計1游戲運(yùn)行流程此游戲的運(yùn)行流程如圖18-2所示。在圖18-2所示的運(yùn)行流程中,在判斷鍵值時包括對左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、旋轉(zhuǎn)VK_UP和退出VK_ESC鍵的判斷,具體說明如下。l VK_LEFT:調(diào)用MoveAble()函數(shù),判斷是否能左移,如果可以,則調(diào)用EraseBox函數(shù),清除當(dāng)前的游戲方塊。并在下一步調(diào)

4、用show_box()函數(shù),在左移位置顯示當(dāng)前游戲的方塊。l VK_RIGHT:右移處理,和上面的VK_LEFT處理類似。l VK_DOWN:下移處理,如果不能移動,須將flag_newbox標(biāo)志設(shè)置為1。l VK_UP:旋轉(zhuǎn)處理,首先判斷旋轉(zhuǎn)動作是否執(zhí)行。如果不符合條件,則不予執(zhí)行。l VK_ESC:按【Esc】鍵后將退出游戲。圖18-2 游戲運(yùn)行流程圖2游戲方塊預(yù)覽處理此游戲的方塊將在44的正方形小方塊中預(yù)覽,使用隨機(jī)函數(shù)rand()可以產(chǎn)生119的游戲方塊編號,并作為預(yù)覽的方塊編號。其中正方形小方塊的大小由BSIZEBSIZE來計算。3游戲方塊控制處理方塊的移動控制是整個游戲的重點(diǎn)和難點(diǎn)

5、,具體過程如下。1)左移處理,處理過程如下。(1)判斷是否能夠左移,判斷條件有兩個:左移一位后方塊不能超越游戲底板的左邊線,否則將越界;游戲方塊有值位置,游戲底板不能被占用。(2)清除左移前的游戲方塊。(3)在左移一位的位置處,重新顯示此游戲的方塊。2)右移處理,處理過程如下。(1)判斷是否能夠右移,判斷條件有兩個:右移一位后方塊不能超越游戲底板的右邊線,否則將越界;游戲方塊有值位置,游戲底板不能被占用。(2)清除右移前的游戲方塊。(3)在右移一位的位置處,重新顯示此游戲的方塊。3)下移處理,處理過程如下。(1)判斷是否能夠下移,判斷條件包含兩個:下移一位后方塊不能超越游戲底板的底邊線,否則將

6、越界;游戲方塊有值位置,游戲底板不能被占用。滿足上述兩個條件后,可以被下移處理,否則將flag_newbox設(shè)置為1,在主循環(huán)中會判斷此標(biāo)志。(2)清除下移前的游戲方塊。(3)在下移一位的位置處,重新顯示此游戲的方塊。4)旋轉(zhuǎn)處理,處理過程如下。(1)判斷是否能夠旋轉(zhuǎn),判斷條件包含兩個:旋轉(zhuǎn)后方塊不能超越游戲底板的底邊線、左邊線和右邊線,否則將越界;游戲方塊有值位置,游戲底板不能被占用。(2)清除旋轉(zhuǎn)前的游戲方塊。(3)在游戲方塊顯示區(qū)域(44)的位置,使用當(dāng)前游戲方塊的數(shù)據(jù)結(jié)構(gòu)中的next值作為旋轉(zhuǎn)后形成的新游戲方塊的編號,并重新顯示這個編號的游戲方塊。4游戲顯示更新處理當(dāng)游戲中的方塊在進(jìn)行

7、移動處理時,要清除先前的游戲方塊,用新坐標(biāo)重新繪制游戲方塊。當(dāng)消除滿行后,要重繪游戲底板的當(dāng)前狀態(tài)。清除游戲方塊的方法是先畫輪廓再填充,具體過程如下。繪制一個輪廓,使用背景色填充小方塊,使用前景色畫一個游戲底板中的小方塊。循環(huán)處理這個過程,變化當(dāng)前的坐標(biāo)繪制并填充16個這樣的方塊,從而在游戲中清除此游戲方塊。5游戲速度和分?jǐn)?shù)更新處理當(dāng)行滿后,積分變量score會增加一個固定的值,然后將等級變量level和速度變量speed相關(guān)聯(lián),實(shí)現(xiàn)等級越高其速度越快的效果。 數(shù)據(jù)結(jié)構(gòu)設(shè)計實(shí)例中包含的數(shù)據(jù)結(jié)構(gòu)如下。1游戲底板結(jié)構(gòu)體此處的游戲底板結(jié)構(gòu)體是BOARD,具體代碼如下。struct BOARD /*游

8、戲底板結(jié)構(gòu),表示每個點(diǎn)所具有的屬性*/ int var; /*當(dāng)前狀態(tài) 只有0和1,1表示此點(diǎn)已被占用*/ int color;/*顏色,游戲底板的每個點(diǎn)可以擁有不同的顏色,增強(qiáng)美感*/Table_boardVertical_boxsHorizontal_boxs;BOARD結(jié)構(gòu)體表示游戲底板中每個小方塊的屬性。var表示當(dāng)前的狀態(tài),為0時表示未被占用,為1時表示已經(jīng)被占用。2游戲方塊結(jié)構(gòu)體此處的游戲方塊結(jié)構(gòu)體是SHAPE,具體代碼如下。struct SHAPE char box2; /*一個字節(jié)等于8位,每4位表示一個方塊的一行,例如,box0=0x88,box1=0xc0/*表示的是: 1

9、000 1000 1100 0000*/ int color; /*每個方塊的顏色*/ int next; /*下一個方塊的編號*/;SHAPE結(jié)構(gòu)體表示某個小方塊的屬性。char box2表示用兩個字節(jié)來表示這個方塊的形狀,每4位表示一個方塊的一行。color表示每個方塊的顏色,顏色值可以根據(jù)需要而設(shè)置。3SHAPE結(jié)構(gòu)數(shù)組此處的游戲方塊結(jié)構(gòu)體是SHAPE,具體代碼如下。/*初始化方塊內(nèi)容,即定義MAX_BOX個SHAPE類型的結(jié)構(gòu)數(shù)組并初始化*/struct SHAPE shapesMAX_BOX=/* * 口 口口口 口口 口 * 口 口 口 口口口 * 口口 口 */ 0x88, 0x

10、c0, CYAN, 1, 0xe8, 0x0, CYAN, 2, 0xc4, 0x40, CYAN, 3, 0x2e, 0x0, CYAN, 0,/* * 口 口口 口口口 * 口 口 口 口 * 口口 口口口 口 */ 0x44, 0xc0, MAGENTA, 5, 0x8e, 0x0, MAGENTA, 6, 0xc8, 0x80, MAGENTA, 7, 0xe2, 0x0, MAGENTA, 4,/* * 口 * 口口 口口 * 口 口口 */ 0x8c, 0x40, YELLOW, 9, 0x6c, 0x0, YELLOW, 8,/* * 口 口口 * 口口 口口 * 口 */ 0x

11、4c, 0x80, BROWN, 11, 0xc6, 0x0, BROWN, 10,/* * 口 口 口 * 口口口 口口 口口口 口口 * 口 口 口 */ 0x4e, 0x0, WHITE, 13, 0x8c, 0x80, WHITE, 14, 0xe4, 0x0, WHITE, 15, 0x4c, 0x40, WHITE, 12,/* 口 * 口 * 口 口口口口 * 口 */ 0x88, 0x88, RED, 17, 0xf0, 0x0, RED, 16,/* * 口口 * 口口 */ 0xcc, 0x0, BLUE, 18;在上述代碼中,定義了MAX_BOX個SHAPE類型的結(jié)構(gòu)數(shù)組

12、并進(jìn)行初始化處理。因?yàn)楣灿?9種不同的方塊類型,所以MAX_BOX為19。 構(gòu)成函數(shù)介紹此實(shí)例中各主要構(gòu)成函數(shù)的基本信息如下。1函數(shù)newtimer函數(shù)newtimer用于實(shí)現(xiàn)新的時鐘,具體格式如下。void interrupt newtimer(void)2函數(shù)SetTimer函數(shù)SetTimer用于設(shè)置新時鐘的處理過程,具體格式如下。void SetTimer(void interrupt(*IntProc)(void)3函數(shù)KillTimer函數(shù)KillTimer用于回復(fù)原有的時鐘處理過程,具體格式如下。void KillTimer()4函數(shù)initialize函數(shù)initialize用

13、于初始化界面,具體格式如下。void initialize(int x,int y,int m,int n)5函數(shù)DelFullRow函數(shù)DelFullRow用于刪除滿行,參數(shù)y設(shè)置刪除的行數(shù),具體格式如下。int DelFullRow(int y)6函數(shù)setFullRow函數(shù)setFullRow用于查詢滿行,并調(diào)用DelFullRow函數(shù)進(jìn)行處理,具體格式如下。void setFullRow(int t_boardy)7函數(shù)MkNextBox函數(shù)MkNextBox用于生成下一個游戲方塊并返回方塊號,具體格式如下。int MkNextBox(int box_numb)8函數(shù)EraseBox函

14、數(shù)EraseBox用于清除以(x,y)位置開始的編號為box_numb的游戲方塊,具體格式如下。void EraseBox(int x,int y,int box_numb)9函數(shù)show_box函數(shù)show_box用于顯示以(x,y)位置開始,編號為box_numb,顏色值為color的游戲方塊,具體格式如下。void show_box(int x,int y,int box_numb,int color)10函數(shù)MoveAble函數(shù)MoveAble首先判斷方塊是否可以移動,其中(x,y)表示當(dāng)前的位置,box_numb表示方塊號,direction表示方向標(biāo)志,具體格式如下。int Mov

15、eAble(int x,int y,int box_numb,int direction)18.3 游戲具體實(shí)現(xiàn)經(jīng)過了前面的功能模塊分析和游戲總體設(shè)計后,便可以在此基礎(chǔ)上進(jìn)行程序設(shè)計了。本節(jié)將詳細(xì)介紹此游戲?qū)嵗木唧w實(shí)現(xiàn)過程。 預(yù)處理程序預(yù)處理包括文件加載,定義結(jié)構(gòu)體、常量和變量,并分別進(jìn)行初始化處理操作,具體代碼如下所示。#include #include #include #include /*圖形函數(shù)庫*/*定義按鍵碼*/#define VK_LEFT 0x4b00#define VK_RIGHT 0x4d00#define VK_DOWN 0x5000#define VK_UP 0x4

16、800#define VK_ESC 0x011b#define TIMER 0x1c /*設(shè)置中斷號*/*定義常量*/#define MAX_BOX 19 /*總共有19種各形態(tài)的方塊*/#define BSIZE 20 /*方塊的邊長是20個像素*/#define Sys_x 160 /*顯示方塊界面的左上角x坐標(biāo)*/#define Sys_y 25 /*顯示方塊界面的左上角y坐標(biāo)*/#define Horizontal_boxs 10 /*水平的方向以方塊為單位的長度*/#define Vertical_boxs 15 /*垂直的方向以方塊為單位的長度,即說長為15個方塊*/#define

17、 Begin_boxs_x Horizontal_boxs/2 /*產(chǎn)生第一個方塊時出現(xiàn)的起始位置*/#define FgColor 3 /*前景顏色,如文字.2-green*/#define BgColor 0 /*背景顏色.0-blac*/#define LeftWin_x Sys_x+Horizontal_boxs*BSIZE+46/*右邊狀態(tài)欄的x坐標(biāo)*/#define false 0#define true 1/*移動的方向*/#define MoveLeft 1#define MoveRight 2#define MoveDown 3#define MoveRoll 4/*以后坐標(biāo)

18、的每個方塊可以看做是像素點(diǎn)為BSIZE*BSIZE的正方形*/*定義全局變量*/int current_box_numb; /*保存當(dāng)前方塊編號*/int Curbox_x=Sys_x+Begin_boxs_x*BSIZE,Curbox_y=Sys_y;/*x、y用于保存方塊的當(dāng)前坐標(biāo)*/int flag_newbox=false;/*是否要產(chǎn)生新方塊的標(biāo)記0*/int speed=0; /*下落速度*/int score=0; /*總分*/int speed_step=30; /*每等級所需要分?jǐn)?shù)*/void interrupt (*oldtimer)(void);/* 指向原來時鐘中斷處理

19、過程入口的中斷處理函數(shù)指針 */struct BOARD /*游戲底板結(jié)構(gòu),表示每個點(diǎn)所具有的屬性*/ int var; /*當(dāng)前狀態(tài),只有0和1,1表示此點(diǎn)已被占用*/ int color; /*顏色,游戲底板的每個點(diǎn)可以擁有不同的顏色,增強(qiáng)美感*/Table_boardVertical_boxsHorizontal_boxs;/*方塊結(jié)構(gòu)*/struct SHAPE char box2; /*1字節(jié)等于8位,每4位表示一個方塊的一行 如box0=0x88,box1=0xc0表示的是: 1000 1000 1100 0000*/ int color; /*每個方塊的顏色*/ int next

20、; /*下個方塊的編號*/;/*初始化方塊內(nèi)容,即定義MAX_BOX個SHAPE類型的結(jié)構(gòu)數(shù)組,并初始化*/struct SHAPE shapesMAX_BOX=/* * 口 口口口 口口 口 * 口 口 口 口口口 * 口口 口 */ 0x88, 0xc0, CYAN, 1, 0xe8, 0x0, CYAN, 2, 0xc4, 0x40, CYAN, 3, 0x2e, 0x0, CYAN, 0,/* * 口 口口 口口口 * 口 口 口 口 * 口口 口口口 口 */ 0x44, 0xc0, MAGENTA, 5, 0x8e, 0x0, MAGENTA, 6, 0xc8, 0x80, MAG

21、ENTA, 7, 0xe2, 0x0, MAGENTA, 4,/* * 口 * 口口 口口 * 口 口口 */ 0x8c, 0x40, YELLOW, 9, 0x6c, 0x0, YELLOW, 8,/* * 口 口口 * 口口 口口 * 口 */ 0x4c, 0x80, BROWN, 11, 0xc6, 0x0, BROWN, 10,/* * 口 口 口 * 口口口 口口 口口口 口口 * 口 口 口 */ 0x4e, 0x0, WHITE, 13, 0x8c, 0x80, WHITE, 14, 0xe4, 0x0, WHITE, 15, 0x4c, 0x40, WHITE, 12,/* 口

22、 * 口 * 口 口口口口 * 口 */ 0x88, 0x88, RED, 17, 0xf0, 0x0, RED, 16,/* * 口口 * 口口 */ 0xcc, 0x0, BLUE, 18;unsigned int TimerCounter=0;/*定時計數(shù)器變量*/* 新的時鐘中斷處理函數(shù) */void interrupt newtimer(void) (*oldtimer)(); TimerCounter+; /* 設(shè)置新的時鐘中斷處理過程 */void SetTimer(void interrupt(*IntProc)(void) oldtimer=getvect(TIMER); /

23、*獲取中斷號為TIMER的中斷處理函數(shù)的入口地址*/ disable(); /* 設(shè)置新的時鐘中斷處理過程時,禁止所有中斷 */ setvect(TIMER,IntProc); /*將中斷號為TIMER的中斷處理函數(shù)的入口地址改為IntProc()函數(shù)的入口地址, 即中斷發(fā)生時,調(diào)用IntProc()函數(shù)*/ enable(); /* 開啟中斷 */* 恢復(fù)原有的時鐘中斷處理過程 */void KillTimer() disable(); setvect(TIMER,oldtimer); enable(); 主函數(shù)游戲主函數(shù)main()實(shí)現(xiàn)了對整個程序的運(yùn)行控制,并對相關(guān)的模塊進(jìn)行了調(diào)用處理,

24、具體實(shí)現(xiàn)代碼如下所示。void main() int GameOver=0; int key,nextbox; int Currentaction=0;/*標(biāo)記當(dāng)前動作狀態(tài)*/ int gd=VGA,gm=VGAHI,errorcode; initgraph(&gd,&gm,); errorcode = graphresult(); if (errorcode != grOk) printf(nNotice:Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to quit!); getch(); exit(1

25、); setbkcolor(BgColor); setcolor(FgColor); randomize(); SetTimer(newtimer); initialize(Sys_x,Sys_y,Horizontal_boxs,Vertical_boxs);/*初始化*/ nextbox=MkNextBox(-1); show_box(Curbox_x,Curbox_y,current_box_numb,shapescurrent_box_numb.color); show_box(LeftWin_x,Curbox_y+200,nextbox,shapesnextbox.color); sh

26、ow_intro(Sys_x,Curbox_y+320); getch(); while(1) /* Currentaction=0; flag_newbox=false; 檢測是否有按鍵*/ if (bioskey(1)key=bioskey(0); else key=0; switch(key) case VK_LEFT: if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveLeft) EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x-=BSIZE;urrentaction=Move

27、Left; break; case VK_RIGHT: if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveRight) EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x+=BSIZE;Currentaction=MoveRight; break; case VK_DOWN: if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown) EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbo

28、x_y+=BSIZE;Currentaction=MoveDown; else flag_newbox=true; break; case VK_UP:/*旋轉(zhuǎn)方塊*/ if(MoveAble(Curbox_x,Curbox_y,shapescurrent_box_numb.next,MoveRoll) EraseBox(Curbox_x,Curbox_y,current_box_numb);current_box_numb=shapes current_box_numb.next; Currentaction=MoveRoll; break; case VK_ESC: GameOver=1;

29、 break; default: break; if(Currentaction) /*表示當(dāng)前有動作,移動或轉(zhuǎn)動*/ show_box(Curbox_x,Curbox_y,current_box_numb,shapescurrent_box_numb.color); Currentaction=0; /*按了往下鍵,但不能下移,就產(chǎn)生新方塊*/ if(flag_newbox) /*這時相當(dāng)于方塊到了底部,把其中滿的一行清除,置0*/ ErasePreBox(LeftWin_x,Sys_y+200,nextbox); nextbox=MkNextBox(nextbox); show_box(L

30、eftWin_x,Curbox_y+200,nextbox,shapesnextbox.color); if(!MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown)/*剛一開始,游戲結(jié)束*/ show_box(Curbox_x,Curbox_y,current_box_numb,shapescurrent_box_numb.color); GameOver=1; else flag_newbox=false; Currentaction=0; else /*自由下落*/ if (Currentaction=MoveDown | TimerC

31、ounter (20-speed*2) if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown) EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+=BSIZE; show_box(Curbox_x,Curbox_y,current_box_numb,shapescurrent_box_numb.color); TimerCounter=0; if(GameOver )/*| flag_newbox=-1*/ printf(game over,thank you! your sco

32、re is %d,score); getch(); break; getch(); KillTimer(); closegraph();18.3.3 初始化界面處理每次游戲試玩時,都需要對游戲的界面進(jìn)行初始化處理。然后在主函數(shù)中對其進(jìn)行調(diào)用,實(shí)現(xiàn)最終的初始化處理。初始化界面的處理流程如下。(1)循環(huán)調(diào)用函數(shù)line(),用于繪制當(dāng)前的游戲板。(2)調(diào)用函數(shù)ShowScore(),顯示初始的得分,初始得分是0。(3)調(diào)用函數(shù)ShowSpeed(),顯示初始的等級速度,初始速度是1。具體代碼如下。/*初始化界面* *參數(shù)說明: * x、y為左上角坐標(biāo) * m、n對應(yīng)于Vertical_boxs和H

33、orizontal_boxs * 分別表示縱橫方向上方塊的個數(shù)(以方塊為單位) * BSIZE Sys_x Sys_y*/void initialize(int x,int y,int m,int n) int i,j,oldx; oldx=x; for(j=0;jn;j+) for(i=0;i=0;n-)/*從當(dāng)前行往上看*/ totoal=0; for(m=0;m=t_boardy;n-) if(n=Vertical_boxs )continue; /*超過底線*/ for(m=0;mHorizontal_boxs;m+) /*水平的方向*/ if(!Table_boardn+full_n

34、umbm.var)break;/*發(fā)現(xiàn)有一個是空就跳過該行*/ if(m=Horizontal_boxs) /*找到滿行*/ if(n=t_boardy+3) /*第一次獻(xiàn)給了n,最高的*/ top=DelFullRow(n+full_numb); /*清除游戲板里的該行,并下移數(shù)據(jù)*/ else DelFullRow(n+full_numb); full_numb+; /*統(tǒng)計找到的行數(shù)*/ if(full_numb) int oldx,x=Sys_x,y=BSIZE*top+Sys_y; oldx=x; score=score+full_numb*10; /*加分?jǐn)?shù)*/ /*這里相當(dāng)于重顯調(diào)色板*/

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論