c語言程序設(shè)計-坦克大戰(zhàn)(提高篇)(funcode環(huán)境)_第1頁
c語言程序設(shè)計-坦克大戰(zhàn)(提高篇)(funcode環(huán)境)_第2頁
c語言程序設(shè)計-坦克大戰(zhàn)(提高篇)(funcode環(huán)境)_第3頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言課程設(shè)計--坦克大戰(zhàn)一、游戲介紹間到,一局游戲結(jié)束。二、實驗?zāi)康木C合應(yīng)用C語言知識和設(shè)計知識開發(fā)一款小游戲。三、實驗內(nèi)容初始界面如下圖。按下空格鍵后游戲開始側(cè)。游戲時間到,比如30秒,玩家坦克被敵方坦克摧毀,或者玩家指揮部被摧毀,一局游戲結(jié)束,游戲回到初始界面,并顯示上一局的分?jǐn)?shù)。[-26,[26,224,坦克也是正方形,比墻略小一點。玩家用WASDJ1玩家指揮部被坦克或者炮彈(不管玩家還是敵方)碰上,都會被摧毀。312四、實驗準(zhǔn)備本實驗中可能用到的C語言標(biāo)準(zhǔn)庫函數(shù)和FunCodeStdio.h函數(shù)原型 功能與返回值 參數(shù)說明與應(yīng)用舉例int sprintf( char把格式化的數(shù)組寫入某個字*buffer,constchar符串。*format, [argument]Math.h

charszName[128];inti=0;sprintf(szName, feichong_%d”,i);將字符串”feichong_0”寫入到szName中函數(shù)原型 功能與返回值 參數(shù)說明與應(yīng)用舉例doubleatan2(doubley,計算y/x的反正切值。doublex); 返回值:以弧度表示并介-pi到pi之間(-pi轉(zhuǎn)換。String.h

floatftan=atan2((y1-y0),(x1-x0));計算通過點(x1,y1)到點(x0,y0)的連成的直線與X軸之間的夾角。函數(shù)原型 功能與返回值 參數(shù)說明與應(yīng)用舉extern char找出str2字符串在str1字strstr(szName,*strstr(char *str1,符串中第一次出現(xiàn)的位置“feichong”)!=NULLchar*str2); (不包括str2的串結(jié)束符。說明szName中包含feichong返回值:返回該位置的指針,如找不到,返回空指針。extern int比較字符串s1和s2。strcmp(const char當(dāng)s1<s2時,返回*s1,constchar*s2); s1=s2=0s1>s2>0FunCodeAPI

strcmp(szName,“feichong_0”)==0說明szName與feichong_0等函數(shù)原型floatdGetScreenLeft();floatdGetScreenRight();floatdGetScreenTop();floatdGetScreenBottom();floatdGetSpritePositionX(constchar*szName);floatdGetSpritePositionY(constchar*szName);floatdSetSpritePositionX(constchar*szName);floatdSetSpritePositionY(constchar*szName);voiddSetSpritePosition(constchar*szName,constfPosX,constfloatfPosY);

功能與返回值獲取屏幕左邊界值獲取屏幕右邊界值獲取屏幕上邊界值獲取屏幕下邊界值獲取精靈中心點的坐標(biāo)值獲取精靈中心點的坐標(biāo)值設(shè)置精靈中心點的坐標(biāo)值設(shè)置精靈中心點的坐標(biāo)值設(shè)置精靈中心點的Y靈放置在某個指定位置。

參數(shù)說明與應(yīng)用舉例szName–精靈名稱。所有API均相同。游戲中的精靈的名稱不能相同。dSetSpritePosition(“ong_0”,0,0);將名稱為”feichong_0”的精靈的中心點設(shè)置在坐標(biāo)(0,0)上void 設(shè)置精靈X軸方向速dSetSpriteLinearVelocityX( constchar*szName,constfloatfVelX);void 設(shè)置精靈Y軸方向速dSetSpriteLinearVelocityY( constchar*szName,constfloatfVelY);void 設(shè)置精靈X軸和YdSetSpriteLinearVelocity(c onstchar*szName,constfloatfVelX,constfloatfVelY);floatdGetSpriteRotation(constchar*szName);

獲取精靈的旋轉(zhuǎn)角度

原圖的角度float 設(shè)置圖片的旋轉(zhuǎn)角度dSetSpriteRotation(constchar*szName,floatvoid dSetTextValue(const 設(shè)置文字精靈的整char*szName,intiVal); 數(shù)值void 設(shè)置精靈可見或不可dSetSpriteVisible(const char* szName, boolbVisible);voiddShowCursor(constbool設(shè)置鼠標(biāo)可見或不bShow); 見void dDeleteSprite(const char*szName);bool dIsPointInSprite(const (fPosX,fPosY)char*szName,constfloatfPosX,constfloatfPosY);bool dCloneSprite(const 復(fù)制一個精靈。char* szSrcName, const返回值:1–復(fù)制char*szTarName); 功;0–復(fù)制失敗。地圖中沒有找到對應(yīng)名稱的精靈用于復(fù)制。

調(diào)整后的角度獲得的旋轉(zhuǎn)角度即為兩張圖片的角度差fRot>0,圖片順時針旋轉(zhuǎn);fRot<0,圖片逆時針旋轉(zhuǎn)。dSetTextValue(“score”,100);名稱為score的文字精靈顯示100bVisible為truefalsebShowtruefalse常用于判斷一個物體是不是碰到另外一個物體做法:一般在地圖上擺放一個精靈作為模板,并設(shè)置好各種屬性。不僅復(fù)制圖片,還復(fù)制屬性。szSrcName–作為模板的精靈szTarName–新的精靈名稱voiddSetSpriteWorldLimit(constchar*szName, EWorldLimit Limit,floatfLeft,constfTop,constfloatfRight,constfloatfBottom)

fLeft -左邊界fTop -上邊界值fRight-右邊界值fBottom-下邊界值Limit -統(tǒng)一使WORLD_LIMIT_NULLvoid 讓精靈從當(dāng)前位置飛dSpriteMoveTo(const char*szName,constfloatfPosX,constfloatfPosY,

fPosXXfPosYYfSpeediAutoStop:移動到終點之后是constfloatconstfloatfSpeed,const true停止falsebooliAutoStop); 不停止intdRandomRange(constint 獲取一個位于[iMin,intd=dRandomRange[0,3]iMin,constintiMax); iMax]之間的隨機整數(shù)d值可能為0,1,2或3五、程序初步設(shè)計構(gòu)和自定義函數(shù)。有了比較清晰的思路以后,再開始開發(fā)程序。在本項目中,我們要操作的對象有6個:玩家坦克、敵方坦克、玩家子彈、敵方子彈、墻、玩家指揮部。structWeapon{charfloatfloatfloatszName[128];fPosX,fSpeedX,structWeapon{charfloatfloatfloatszName[128];fPosX,fSpeedX,fPosY;fSpeedY;fFireTime;int iHp;int iDir;//精靈名稱//精靈坐標(biāo)//XY//敵方坦克距下一次開炮的剩余時間//生命值//朝向:0123-左方intiType;//類型:0方Weapon*pNext;//子彈;3-敵方子彈//指向下一個節(jié)點的指針};其中,iDir和iType用不同整數(shù)表示不同含義。如果在小程序中,我們可以在代碼里直接調(diào)用這些整數(shù),但是想象一下下面情況:如果你連續(xù)寫了三小時代碼,你還能清晰記得1表示什么含義嗎?你時不時需要找到Weapon結(jié)構(gòu)體定義查看這些數(shù)字的含義,然后再引用,出錯的概率有多大?如果你一不小心,在某處搞錯了,比如要處理的是敵方坦克,你卻引用2,需要多少時間才能把錯誤找出來?enumDirection{UPRIGHTenumDirection{UPRIGHTDOWN===0,1,2,//上方//右方//下方LEFTLEFT=3//左方};};enumRoleenumRole{MYTANK = 0,ENEMYTANK = 1,MYBULLET = 2,ENEMYBULLET =3//我方坦克//敵方坦克//我方子彈//敵方子彈};的時間等變量;//游戲地圖,0表示此處為空,1表示此處有墻。根據(jù)游戲空間大小、墻以及坦克大小,//我們把地圖分成11行,13列,每格大小剛好放一塊墻。intintiMap[11][13];一些全局常量來存儲某些數(shù)值。constfloatGAME_TIME=30.f;//一局游戲時間constfloatCREATE_TANK_TIME=5.f;//每批次生成坦克的時間間隔constfloatTANK_SPEED=5.f;//坦克速度constfloatBULLET_SPEED=8.f;//子彈速度constfloatFIRE_TIME=2.f;//坦克開炮時間間隔constfloatWORLD_LEFT=-26.f;//游戲場景邊界左值constfloatWORLD_TOP=-22.f;//游戲場景邊界左值constfloatWORLD_RIGHT=26.f;//游戲場景邊界左值constfloatWORLD_BOTTOM=22.f;//游戲場景邊界左值程序本身由一個main.cpp7WinMain6碰撞。AddToListDeleteNodeFindeNodeDeleteListAddToListDeleteNodeFindeNodeDeleteList//往鏈表里添加一個節(jié)點;//從鏈表里刪除一個節(jié)點;//從鏈表里查找一個節(jié)點;//刪除整個鏈表。一局游戲結(jié)束,我們需要把本局游戲中還沒刪除的精靈全部刪除,從而保持下一局游戲LoadMapMoveMyTankCreateEnemyTanksOnFireLoadMapMoveMyTankCreateEnemyTanksOnFire//載入地圖//玩家坦克運動//敵方坦克生成//坦克發(fā)射炮彈也可能發(fā)生碰撞,所以需要同時設(shè)置“發(fā)送碰撞”和“接受碰撞”的屬性參與玩家坦克敵方坦克玩家子彈敵方子彈墻玩家指揮世界邊方反應(yīng)方發(fā)送接受發(fā)送發(fā)送接受發(fā)送接受部接受界玩家坦克發(fā)送無游戲結(jié)束無游戲結(jié)束停止游戲結(jié)束停止敵方坦克接受停止后面一輛調(diào)頭;刪除不處理停止游戲結(jié)束針一發(fā)送對撞,都調(diào)頭個方向玩家子彈發(fā)送無刪除加分無刪除刪除游戲結(jié)束刪除接受發(fā)送刪除刪除刪除均刪除刪除游戲結(jié)束刪除墻接受不處理不處理刪除刪除無無無玩家指揮部接受游戲結(jié)束游戲結(jié)束游戲結(jié)束游戲結(jié)束無無無根據(jù)上面表格,我們可以定義5個碰撞函數(shù)OnMyTankColOtherOnMyTankColOtherOnEnemyTankColOtherOnBulletColOther//玩家坦克與其他精靈碰撞//敵方坦克與其他精靈碰撞//子彈與其他精靈碰撞。子彈碰上其他精靈,本身都是被OnWallColOther//刪除,比較簡單,因此兩種子彈合并起來//墻與其他精靈碰撞OnGoalColOtherOnGoalColOther//玩家指揮部與其他精靈碰撞其中,colcollision(碰撞)的縮寫。精靈與世界邊界的碰撞,比較簡單,我們直接在dOnSpriteColWorldLimit函數(shù)中完成。會根據(jù)細(xì)節(jié)進一步完善。六、實驗指南實驗一游戲開始和結(jié)束【實驗內(nèi)容】步驟一、按空格鍵,游戲開始3步驟二、按WASD步驟三、游戲開始后,右上角實時顯示剩余時間。步驟四、當(dāng)超過30秒,游戲結(jié)束,重新顯示“空格開始“字樣,游戲時間設(shè)為0,坦克回到初始位置。【實驗思路】在List.h中定義Weapon結(jié)構(gòu)體和兩個枚舉類型。定義全局變量和全局常量。定義MoveMyTank函數(shù),控制玩家坦克上下左右移動?!緦嶒炛笇?dǎo)】1、創(chuàng)建“”工程,并且添加List.hList.h中定義Weapon和Rol、Direction兩個枚舉類型。參考“程序初步設(shè)計2義我們控制的坦克精靈的對象指針;3、dOnKeyDown戲開始。此時應(yīng)該“空格開始”消失,顯示本局的游戲時間以及得分等信息,4、運行程序,按下空格鍵,看看游戲是否按要求運行。5、游戲開始后,開始計時。游戲時間到,一局游戲結(jié)束,游戲恢復(fù)到初始界面。要判斷游戲時間,我們需要在WinMain的主循環(huán)中進行處理。//游戲主循環(huán)while(dEngineMainLoop()){//獲取游戲屏幕刷新一次的時間間距float fTimeDelta= dGetTimeDelta();if(g_bStart)if(g_bStart){g_fGameTime-=fTimeDelta;if(g_fGameTime>0.f)//{}else//一局游戲結(jié)束if(strcmp(szName,g_pMyTank->szName)==0)//玩家坦克if(strcmp(szName,g_pMyTank->szName)==0)//玩家坦克{g_bStart=false;}}else//游戲結(jié)束后處理{}}6、一局游戲開始后,在WinMain函數(shù)中的主循環(huán)里,通過dSetTextValue把(int)g_fGameTime的數(shù)值顯示在名為“時間(顯示整秒的時間。7、一局游戲進行中,每循環(huán)一次,g_fGameTime減去一次刷屏的時間。當(dāng)g_fGameTime≤0,否則下一局就不能正確判斷游戲開始或結(jié)束。8、我們定義一個MoveMyTankWA度;按下S鍵,設(shè)置向下的速度,按下D為0。此外,按下鍵盤時,還需要相應(yīng)設(shè)置坦克朝向iDir如果函數(shù)定義寫在函數(shù)調(diào)用之后,需要在函數(shù)調(diào)用前面進行聲明。voidMoveMyTank(intiKey,intiPress){}9、完成函數(shù),我們在dOnKeyDowndOnKeyUp//按下鍵盤if(g_bStart)//按下鍵盤if(g_bStart)//一局游戲進行中{if(iKey==KEY_W||iKey==KEY_A||iKey==KEY_S||iKey==KEY_D{MoveMyTank(iKey,1);}}//松開鍵盤//松開鍵盤if(g_bStart){if(iKey==KEY_W||iKey==KEY_A||iKey==KEY_S||iKey==KEY_D){MoveMyTank(iKey,0);}}10、玩家坦克開到邊界時,讓它停止運動。我們在dOnSpriteColWorldLimit函數(shù)中,設(shè)設(shè)置玩家坦克速度為0。{dSetSpriteLinearVelocity(g_pMyTank->szName,0.f,0.f);dSetSpriteLinearVelocity(g_pMyTank->szName,0.f,0.f);}11實驗二玩家坦克在街道中運行【實驗內(nèi)容】步驟一、一局游戲開始時載入地圖。步驟二、一局游戲結(jié)束后刪除地圖。步驟三、玩家坦克碰到墻的話,不能繼續(xù)前行。【實驗思路】0,說明此處為空;值為1游戲開始后載入地圖,但只能載入一次。如果不停載入,會占有大量資源。游戲結(jié)束時,需要把地圖中墻都刪除。響應(yīng)。【實驗指導(dǎo)】1、增加新的全局變量定義intg_iWallCount = 0; //記錄墻的數(shù)intg_iMap[11][13]; //地圖數(shù)組墻的數(shù)量。intiMap[11][13]={{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,1,0,1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,1,1,0,1,0,1,0},intiMap[11][13]={{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,1,0,1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,1,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1,0,1,0},{0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,1,1,1,0,0,0,0,0},{0,1,0,1,0,0,0,0,0,1,0,1,0},{0,1,0,1,0,0,0,0,0,1,0,1,0},{0,1,0,1,0,1,1,1,0,1,0,1,0},{0,0,0,0,0,1,0,1,0,0,0,0,0},};};3、給墻命名,計算墻的數(shù)量,并設(shè)置墻為“接受碰撞”屬性。并將指揮部設(shè)置在第11行第7列。for(i=0;i<11;i++)for(i=0;i<11;i++){for(j=0;j<13;j++){if(g_iMap[i][j]==1){sprintf(szName,"wall%d",g_iWallCount++);dCloneSprite("wall",szName);//將wall設(shè)為接受碰撞dSetSpriteCollisionReceive(szName,true);x=-24+4*j;y=-20+4*i;x=-24+4*j;y=-20+4*i;dSetSpritePosition(szName,x,y);}}}//指揮部設(shè)置在第11行第7列dSetSpritePosition("goal",0.f,20);dSetSpriteVisible("goal",true);4每次循環(huán)都載入一次地圖,我們設(shè)置一個靜態(tài)布爾變量來控制。intiLoad=1//是否載入地圖while(dEngineMainLoop()){…if(g_iStart)intiLoad=1//是否載入地圖while(dEngineMainLoop()){…if(g_iStart){if(iLoad)//一局游戲只需要載入一次地圖即可{//載入地圖LoadMap();iLoad=0;}…}}charszName[128];for(inti=0;i<g_iWallCount;i++){{sprintf(szName,"wall%d",i);dDeleteSprite(szName);}g_iWallCount=0;iLoad=t1;//設(shè)置指揮所不可見dSetSpriteVisible("goal",0);6iMap115列,在dOnKeyDownvoidOnMyTankColOther(constchar*szMyTankName,voidOnMyTankColOther(constchar*szMyTankName,constchar*szOtherName){//如果碰到墻上if(strstr(szOtherName,"wall")!=NULL)dSetSpriteLinearVelocity(szMyTankName,0.f,0.f);}靈碰撞的函數(shù)。8、我們在dOnSpriteColSprite函數(shù)中調(diào)用OnMyTankColOther函數(shù)。因為,玩家坦克只具備“發(fā)送碰撞”屬性,因此它的名稱只能傳遞給szSrcName參數(shù)。實驗三玩家坦克射擊【實驗內(nèi)容】步驟一、玩家按下j鍵,坦克發(fā)送炮彈;步驟二、創(chuàng)建鏈表,用鏈表管理炮彈;步驟三、子彈擊中墻,將墻摧毀;子彈擊中目標(biāo),游戲結(jié)束?!緦嶒炈悸贰慷?,并將子彈設(shè)置在坦克前面一些。子彈碰到墻的時候,刪除子彈和墻。子彈擊中目標(biāo),刪除子彈和目標(biāo),游戲結(jié)束。應(yīng)刪除節(jié)點。游戲結(jié)束時,刪除所有剩余的子彈?!緦嶒炛笇?dǎo)】1、增加幾個全局變量和全局常量的定義。intintconstg_iNumfloat=0;//記錄全部精靈的數(shù)目,用來給精靈命名BULLET_SPEED=8.f;//子彈速度2、自定義一個函數(shù),OnFire用于完成坦克發(fā)射子彈功能。玩家坦克發(fā)射子彈,和敵voidOnFire(char*szName,intiType){voidOnFire(char*szName,intiType){}3、在dOnKeyDown中增加對OnFireJ4、運行程序,按J鍵,看是否能發(fā)射子彈。5iHp0需要刪除的精靈的iHp0,最后再統(tǒng)一將需要刪除的精靈刪除。//子彈與其他精靈碰撞void OnBulletColOther(constchar*szBulletName,//子彈與其他精靈碰撞void OnBulletColOther(constchar*szBulletName,constchar*szOtherName){}判斷是否與墻碰撞,是的話,將子彈iHp設(shè)為0。所有的墻的名稱中都包含wall,通過判斷szOherName中是否包含該字符串判斷是否是墻。//墻與其他精靈碰撞//墻與其他精靈碰撞void{}OnWallColOther(constchar*szWallName,constchar*szOtherName)判斷是否與子彈碰撞,是的話,刪除墻。所有的子彈的名稱中都包含bullet,通過判斷szOherName中是否包含該字符串判斷是否是子彈。7、在dOnSpriteColSprite撞”屬性,因此只需要判斷szTarName是否包含wall字符串。子彈具有“發(fā)射碰szSrcNameszTarNamebullet8、運行程序,按J鍵發(fā)射子彈。朝墻設(shè)計,看是否摧毀墻。9能存在大量bug。10、我們在List.cpp中實現(xiàn)鏈表操作函數(shù)的定義。把鏈表操作函數(shù)和游戲邏輯函數(shù)分開,可以讓程序結(jié)構(gòu)更清晰。11、定義一個鏈表頭結(jié)點:Weapon*g_pHead=NULL;voidAddToList(WeaponvoidAddToList(Weapon*pSprite){Weapon*pTemp=(Weapon*)malloc(sizeof(Weapon))Weapon*pTemp=(Weapon*)malloc(sizeof(Weapon))strcpy(pTemp->szName,pSprite->szName);pTemp->fPosX=pSprite->fPosX;pTemp->fPosY=pSprite->fPosY;pTemp->fSpeedX=pSprite->fSpeedX;pTemp->fSpeedY=pSprite->fSpeedY;pTemp->iDir=pSprite->iDir;pTemp->iType=pSprite->iType;pTemp->pNext=NULL;Weapon*pNode=Weapon*pNode=g_pHead;if(g_pHeadif(g_pHead==NULL)//表頭為空,說明加入的是第一個節(jié)點{g_pHead=pTemp;}else{//循環(huán)讀到鏈表的最后一個節(jié)點while(pNode->pNext!=NULL){pNode=pNode->pNext;}pNode->pNext=pTemp;}}13、參考AddToList函數(shù),完成查找結(jié)點、刪除結(jié)點以及刪除整個鏈表的操作。//根據(jù)名字獲取精靈節(jié)點//根據(jù)名字獲取精靈節(jié)點Weapon*FindNode(constchar*szName{}//根據(jù)名字刪除精靈節(jié)點voidDeleteNode(constchar*szName){}//刪除整個鏈表voidDeleteList(){}刪除鏈表時,一般也需要刪除界面上相應(yīng)的精靈,我們在DeleteList函數(shù)中完成此功能相應(yīng)比較容易。14、完成鏈表操作函數(shù)后,我們需要在幾個地方進行完善。子彈是通過OnFire發(fā)射出來,因此,我們需要在該函數(shù)中把子彈節(jié)點加入到鏈表中。子彈與其他精靈碰撞時,會被刪除。我們在OnBulletColOther函數(shù)中刪除該子彈精靈對應(yīng)鏈表中的節(jié)點。子彈與世界邊界碰撞時,也會被刪除。我們在dOnSpriteColSprite函數(shù)中刪除該子彈精靈對應(yīng)鏈表中的節(jié)點。此通過刪除鏈表就可以了。15LoadMapOnGoalColOther戲都結(jié)束。所以,無需做任何判斷,只要把g_bStartfalse。16游戲時間并沒有變?yōu)?。實驗四敵方坦克產(chǎn)生與運動【實驗內(nèi)容】有墻。步驟二、敵方坦克遇到墻時停下來。步驟三、敵方坦克遇到邊界調(diào)頭往回走。步驟四、敵方坦克碰到運動中的敵方坦克(這種情況只能是迎頭碰上(去,運動的敵方坦克調(diào)頭。步驟五、敵方坦克碰上我方坦克都被摧毀,游戲結(jié)束。步驟六、敵方坦克每隔一段時間,就順時針變化一個方向,繼續(xù)前進?!緦嶒炈悸贰繑撤教箍松蓵r間,調(diào)用該函數(shù)。完善敵方坦克、墻與、我方坦克其他精靈碰撞的函數(shù)。增加敵方坦克與世界邊界碰撞的處理。定義一個函數(shù)專門處理敵方坦克的運動,在主函數(shù)中調(diào)用?!緦嶒炛笇?dǎo)】floatg_fCreateTimefloatg_fCreateTime=const

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論