梁健雄游戏制作方案.doc

上传人:jian****018 文档编号:9375853 上传时间:2020-04-05 格式:DOC 页数:33 大小:178.50KB
返回 下载 相关 举报
梁健雄游戏制作方案.doc_第1页
第1页 / 共33页
梁健雄游戏制作方案.doc_第2页
第2页 / 共33页
梁健雄游戏制作方案.doc_第3页
第3页 / 共33页
点击查看更多>>
资源描述
游 戏 制 作梁健雄,2004.4.2,湛江海洋大学应用电子012班虽然说的很简洁,但这些都是我自己理解之后,一字字打出来的,都是在互联网上找到并总结的。具体的程序在网上有很多的下载,我也不会很正规的说一大堆。如果可以写完上面那四个例子,我就可以详细地设计一个龙与地下城风格的MMORPG的游戏,是大型的3D再线游戏。这是我这次学习游戏编程的毕业论文吧。 这次学习编游戏花了比较长的时间,由2003年12月到2004-5-3。我的学习主要是上网查找源代和教程,所上的网站是 “www.17173.com” ,“www.gameres.com”。还有分析程序,看了Visual C+游戏设计、Visual C+网络游戏建模与实现、Java游戏程序设计、游戏设计概论。目录前言-3游戏的库函数准备-3要那些处理-3学习总结-41是简单的射击游戏-5具体过程:-5列举这个程序例子:-52是有规模的RPG游戏,但也是很小的-9具体过程:-9列举这个程序例子:-103也是RPG游戏,很齐全的-17具体过程:-17列举这个程序例子:-264最后是一个3D的简单游戏程序-27具体过程:-27列举这个程序例子:-27独立设计-30大型的3D在线游戏-30具体过程:-30列举这个程序例子:-32前言整个游戏程序是由两个部分组成的。第一是库函数,封装了directx或者openGL。都是些接口函数,包括图形、声音、影片、3D、输入输出、网络连接等等。第二个是具体的怎样把“图形、声音、输入输出”出现在你编的程序上,即整个游戏的流程图。1游戏的库函数准备编游戏一定要通过库函数或者别人编好的图形输入输出函数来用的。DirectdrawDirect3DDirectaudioDirectinputDirectplayDirectshow2要那些处理Winmain()Winproc() Gamemain()学习总结我要用几个例子,由简单到复杂的讲述游戏编程的大概。1 是简单的射击游戏,用DirectDraw,DirectAudio两个对象就行了。就是说只要声音、图片,不用Direct3D、DirectInput。2 是有规模的RPG游戏,但也是很小的,主要用到DirectDraw、DirectAudio 、DirectInput。3 也是RPG游戏,很齐全的,分开不同部分有不同功能。包括显示、战斗和菜单。用到所有的directx对象,除了Direct3D。4 最后是一个3D的简单游戏程序。1 是简单的射击游戏具体过程:它的流程全部在gamemain()函数中,但directX库也少不了。滚屏完美实现,其中的图片处理。所有精灵显示完成(画面有些闪烁)检测碰撞完成。对精灵的显示做了部分优化。加入记分部分,左边数字显示搞定。记分数字显示全部完成,金币的动画显示完成。开始加入开场及结束画面。开始结束画面加入完毕加入暂停部分。加入游戏结束时的评价。加入变速部分。列举这个程序例子:1游戏的库函数准备DirectdrawDirectaudioDirectinput2要那些处理Winmain()Winproc() Gamemain()Winmain.cpp/-标准WINMAIN()主函数-int WINAPI WinMain()t=Game_Init();if(t!=0) sprintf(buffer,err %d,t); MessageBox(my_hwnd,Game_Init,buffer,MB_OK | MB_ICONQUESTION ); PostQuitMessage(0); / enter main event loopwhile(TRUE) if(end=0) Game_Main();/正常游戏- else if(end=1) game_pause();/游戏暂停- else if(end=2) game_esc();/在游戏中按下ESC键- else if(end=3) game_death();/被敌机打中- else if(end=4) game_past();/过关了- else if(end=5) game_over();/打爆机了- else game_begain();/游戏的主菜单- / end while/ closedown game hereGame_Shutdown();/ return to Windows like thisreturn(msg.wParam); / end WinMainGamemain.cpp/-游戏的主体-int Gamemain(void *parms = NULL, int num_parms = 0)if(KEYDOWN(VK_ESCAPE)/是否按下ESC键- Sleep(300); end=2;/进入菜单2- bb=0;if(KEYDOWN(VK_RETURN)/是否按下回车键- end=1;/-暂停- bb=0; gamepause_s.dsbuffer-Play(0,0,0);/播放暂停的声音 Sleep(500); return (1);STAR_TIME=GetTickCount();if(KEYDOWN(VK_LEFT) | KEYDOWN(my_left)/是否按下向左的键 plane.x-=plane_v; plane.stat=1;if(KEYDOWN(VK_RIGHT) | KEYDOWN(my_right)/是否按下向右的键 plane.x+=plane_v; plane.stat=2;if(KEYDOWN(VK_UP) | KEYDOWN(my_up)/是否按下向上的键 plane.y-=plane_v;if(KEYDOWN(VK_DOWN) | KEYDOWN(my_down)/是否按下向上的键 plane.y+=plane_v;/是否越界-if(plane.xMMWIDTH)plane.x=MMWIDTH;if(plane.yMMHEIGHT)plane.y=MMHEIGHT;/操作我机子弹-if(plane.num0)/是否有子弹-/结束-操作我机子弹-/是否生成敌机-if(p_e_n0) /是否有敌机-/结束是否有敌机-/结束对敌机的操作-/操作敌机子弹-if(f_e_n0)/结束操作敌机子弹-/显示分数和难度-lpddsback-Blt();lpddsback-GetDC(&my_dc);/显示自己的子弹-my_rect(108,62,121,88);if(plane.num0) /显示自己的飞机-my_rect(plane.stat*50,0,plane.stat*50+50,62);plane.stat=0;lpddsback-BltFast();/显示敌人的子弹-if(f_e_n0)/显示敌人的飞机机- if(p_e_n0)/-p用来记录幅数-p+;if(p=30) p=0;/-控制时间-while(GetTickCount() - STAR_TIME) Flip(NULL,DDFLIP_WAIT)/返回-return(1);/-end Gamemain-2 是有规模的RPG游戏具体过程:第1天:写地图编辑器。第2天:写地图编译器,制作地图(包括各种宝物,阻挡关系,游戏特殊地点事件)。第3天:精灵的行走(阻挡检测,宝物检测) ,及个地图的NBC连表,和各种菜单制作。第4天:战斗和对话的编制。第5天:物品的使用,简单的编辑修改,增增减减,以至于代码很乱。游戏从开始制作到草草完成共用了5天时间(包括地图编辑器),或者说5天5夜。 主流程:while(1) if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) if ( msg.message=WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); Input(); /输入输出 else switch (GameMessage) case 0:FleshGame();break; /游戏主程序 case 1:FleshFightGame();break; /作战 case 2:FleshMenu();break; /开始菜单 第1天:写地图编辑器第2天:写地图编译器,制作地图(包括各种宝物,阻挡关系,游戏特殊地点事件)每个单元格 32*32; 城堡 30*30 单元格 森林 40*30 单元格 废墟 30*40 单元格 城市 60*30 单元格 兵器铺20*15 单元格 当铺 20*15 单元格 药铺 20*15 单元格 酒店 20*15 单元格 民居 20*15 单元格地图结构 ypedef struct MAP char *name; int width; int height; /整张地图 高宽,名字,掉入地图用 int landform; /地图场景类型, bool cm; /判断阻挡,TRUE :可以行走,FALSE:阻挡 int baowu; /宝物编号 /0 表示没有宝物箱,1表示宝物箱被打开。2,3。代表宝物编号 NBCLIST *NBCHead; /地图NBC连表 int event; /图书地点时间编号 ; 第3天:精灵的行走(阻挡检测,宝物检测) ,及个地图的NBC连表,和各种菜单制作。每次刷新检测: TOM。SPEED=8; 每4*SPEED检测单元个阻挡。,: 特殊地点事件触发。 与NBC的碰撞,矩形碰撞。 每次按KEYBOARD检测: IF( 坐标相邻,) 检测与NBC对话,是否有宝物箱, ESC:弹出主菜单第4天:战斗和对话的编制1每次打斗完,加LIFE,和MONEY点。并检测是否升级,和文字提示。 2将死亡NBC从链中删除。 3 B。损失血=A。攻击-B。防御 4对话: 查找字符;“名字+#”,找到记录位置为I,从I开始查找FIRST “”和第一个“”,输出 间字符。第5天:物品的使用,简单的编辑修改,增增减减,以至于代码很乱。TOM。GETBW TOM。USEBW(int BW)特殊地点的事件: TOM的初始地点定义,地图连表。void FleshEvent() int EMessage=maptom.pos.ytom.pos.x.event ; switch (EMessage) case1:str=兵器铺;InitMap();map00.NBCHead=BQPnbchead;tom.pos.x=16;tom.pos.y=13;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case2:str=药铺;InitMap();map00.NBCHead=YPnbchead; tom.pos.x=10;tom.pos.y=13;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case3:str=当铺;InitMap();map00.NBCHead=DPnbchead; tom.pos.x=14;tom.pos.y=13;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case4:str=酒店;InitMap();map00.NBCHead=JDnbchead;tom.pos.x=9; tom.pos.y=13;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case5:str=民居;InitMap();map00.NBCHead=MJnbchead; tom.pos.x=10;tom.pos.y=13;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case 6:str=森林; InitMap();map00.NBCHead =SLnbchead;tom.pos.x=8;tom.pos.y=1; tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case7:str=城市;InitMap();map00.NBCHead=CSnbchead; tom.pos.x=45;tom.pos.y=10;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case8:str=城市;InitMap();map00.NBCHead=CSnbchead;tom.pos.x=33;tom.pos.y=11;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case9:str=城市;InitMap();map00.NBCHead=CSnbchead; tom.pos.x=32;tom.pos.y=19;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case10:str=城市;InitMap();map00.NBCHead=CSnbchead; tom.pos.x=50;tom.pos.y=19;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case 11:str=城市; InitMap();map00.NBCHead=CSnbchead;tom.pos.x=24;tom.pos.y=5; tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case12:str=城市;InitMap();map00.NBCHead=CSnbchead; tom.pos.x=36;tom.pos.y=28;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case13:str=废墟; InitMap();map00.NBCHead=FXnbchead;tom.pos.x=6;tom.pos.y=7; tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case14:str=森林;InitMap();map00.NBCHead=SLnbchead;tom.pos.x=9; tom.pos.y=27;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case15:str=城堡;InitMap();map00.NBCHead=CBnbchead; tom.pos.x=16;tom.pos.y=28;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break;case16:str=废墟;InitMap();map00.NBCHead=FXnbchead; tom.pos.x=10;tom.pos.y=36;tom.xpos.x=tom.pos.x*32;tom.xpos.y=tom.pos.y*32;break; 列举这个程序例子:Winmain.cppGamemain.cppDirectaudio.cppDirectdraw.cppDirectinput.cpp还有Gamemain.hDirectaudio.hDirectdraw.hDirectinput.h1要那些处理Winmain.cppGamemain.cpp程序中只有声音、图形和输入输出的库函数,其他就不用列举了。下面我会一个一个文件的讲。首先是winmain.cpp。Winmain() 初始化directX; 游戏的流程; Gameinit(); Gameloop();Winproc() 这里有处理与游戏打交道的消息处理 Winmain.cpp是总程序文件,下面的是游戏处理文件gamemain.cpp。Gamemain()Case 1: 擦新游戏卷动画面;break; Case 2: 显示战斗画面;break; Case 3: 显示游戏开始菜单;break;擦新游戏卷动画面 void FleshGame() FleshMap(); /擦地图 FleshEvent(); /擦情景 FleshNBC(); FleshMy(); if(talkbar)TalkBar(); /进入谈话主程序 if(mainbar)MainBar(); /进入对话菜单主程序lpDDSPriMary-Flip (NULL,DDFLIP_WAIT); 显示战斗画面void FleshFightGame() static bool esc=0; Scanout(esc);switch(mydi) case 0: /wofang我方 switch(lastselect)case -1: FleshA(); break;case 0: Attack(); break;case 1: PrintText(lpDDSPriMary,10,11,RGB(255,0,0),暂不提供该功能,原因有待明);Delay(600);lastselect=-1;break;case 2: PrintText(lpDDSPriMary,10,11,RGB(255,0,0),暂不提供该功能); Delay(600);lastselect=-1;break;case 3: mydi=1;esc=Escape();break; break; case 1: EnemyAttack();break;/敌方攻击DText(); lpDDSPriMary-Flip (NULL,DDFLIP_WAIT);显示游戏开始菜单void FleshMenu()lpDDSBackBuffer-BltFast (0,0,lpDDSback,NULL,DDBLTFAST_WAIT);static int sell; MenuInput(sell);char *str=开始游戏,退出游戏;for(int i=0;iFlip (NULL,DDFLIP_WAIT);/翻主页2游戏的库函数准备Directaudio.cppDirectdraw.cppDirectinput.cppDirectaudio.cpp typedef struct pcm_sound_typ /WAV声音结构LPDIRECTSOUNDBUFFER dsbuffer; int state; int rate; int size; int id; pcm_sound, *pcm_sound_ptr;#define DSVOLUME_TO_DB(volume) (DWORD)(-30*(100-volume)/DirectSound初始化int MyDirectSoundInit(void);/DirectSound结束int MyDirectSoundShut(void);/读取WAV文件int DSoundLoadWAV(char *filename, int control_flags);/DirectSound变量extern LPDIRECTSOUND8lpDSound; extern DSBUFFERDESC dsbd; extern DSCAPSdscaps; extern HRESULTdsresult; extern DSBCAPS dsbcaps; extern LPDIRECTSOUNDBUFFERlpdsbprimary, lpdsbsecondary; extern WAVEFORMATEX pcmwf; extern pcm_soundsound_fxMAX_SOUNDS; extern HWND freq_hwnd, volume_hwnd, pan_hwnd;extern int sound_id; /#define DM_NUM_SEGMENTS 64 #define MIDI_NULL 0 #define MIDI_LOADED 1 #define MIDI_PLAYING 2 #define MIDI_STOPPED 3 #define MULTI_TO_WIDE(x,y) MultiByteToWideChar( CP_ACP,MB_PRECOMPOSED, y,-1,x,_MAX_PATH);#defineDD_INIT_STRUCT(ddstruct) memset(&ddstruct,0,sizeof(ddstruct); ddstruct.dwSize=sizeof(ddstruct); /MIDI声音结构typedef struct DMUSIC_MIDI_TYPIDirectMusicSegment *dm_segment; IDirectMusicSegmentState *dm_segstate; int id; int state; DMUSIC_MIDI, *DMUSIC_MIDI_PTR;/DirectMusic变量extern IDirectMusicPerformance8 *dm_perf;extern IDirectMusicLoader8 *dm_loader;extern IDirectMusicSegment *dm_segment;extern IDirectMusicSegmentState *dm_segstate;extern DMUSIC_MIDI dm_midiDM_NUM_SEGMENTS;extern int dm_active_id; /DirectMusic函数int MyDirectMusicLoad(char *filename);int MyDirectMusicPlay(int id);int MyDirectMusicStop(int id);int MyDirectMusicShut(void);int MyDirectMusicDeleteMIDI(int id);int MyDirectMusicDelete(void);int MyDirectMusicStatus(int id);int MyDirectMusicInit(void);Directdraw.cpp#include /BMP图形结构typedef struct BMPPIC_TAGBITMAPFILEHEADERbitmapfileheader;/文件头BITMAPINFOHEADERbitmapinfoheader;/头信息UCHAR *buffer;BMPPIC, *BMP_FILE;/定义屏幕设置#define SCREEN_WIDTH800/屏宽#define SCREEN_HEIGHT600/屏高#define SCREEN_BPP16/位数/16位5.6.5格式#define _RGB16BIT565(r,g,b) (b%32) + (g%64) 6) + (r%32) 11)/16位5。5。5格式/#define _RGB16BIT555(r,g,b) (b%32) + (g%32) 5) + (r%32) 10)#define BITMAP_ID0x4D42/BMP的句柄#define MAX_COLORS_PALETTE256/DirectDraw 变量extern LPDIRECTDRAW7lpDDraw7;/DD对象extern LPDIRECTDRAWSURFACE7lpDDprimary;/DD主表面extern LPDIRECTDRAWSURFACE7lpDDback;/DD后备画面extern DDSURFACEDESC2ddsd;/DD表面描述界面extern DDBLTFXddbltfx;/DD图形变换变量extern BMPPICbitmap;/DD BMP变量extern LPDIRECTDRAWSURFACE7lpDDbpic;/Directdraw备用画面extern LPDIRECTDRAWCLIPPERlpDDclip;/DirectDraw剪切板extern LPDIRECTDRAWSURFACE7 lppic_sky;extern LPDIRECTDRAWSURFACE7 lppic_hill;extern LPDIRECTDRAWSURFACE7 lppic_road;extern LPDIRECTDRAWSURFACE7 lppic_wheel;extern LPDIRECTDRAWSURFACE7 lppic_wario;extern LPDIRECTDRAWSURFACE7 lppic_smoke;extern LPDIRECTDRAWSURFACE7 lppic_pig;extern LPDIRECTDRAWSURFACE7 lppic_oldman;extern LPDIRECTDRAWSURFACE7 lppic_knight;extern LPDIRECTDRAWSURFACE7 lppic_stone;extern LPDIRECTDRAWSURFACE7 lppic_girl;extern LPDIRECTDRAWSURFACE7 lppic_cactus;extern LPDIRECTDRAWSURFACE7 lppic_boy;extern LPDIRECTDRAWSURFACE7 lppic_bird;extern LPDIRECTDRAWSURFACE7 lppic_money;extern LPDIRECTDRAWSURFACE7 lppic_number;extern LPDIRECTDRAWSURFACE7 lppic_letter;extern LPDIRECTDRAWSURFACE7 lppic_title;extern LPDIRECTDRAWSURFACE7 lppic_back;extern LPDIRECTDRAWSURFACE7 lppic_front;extern LPDIRECTDRAWSURFACE7 lppic_princess;extern LPDIRECTDRAWSURFACE7 lppic_princess1;extern LPDIRECTDRAWSURFACE7 lppic_princess2;extern LPDIRECTDRAWSURFACE7 lppic_princess3;/DirectDraw函数int MyDirectDrawInit(void);/DirectDraw初始化int MyDirectDrawShut(void);/directDraw结束/DirectDraw剪切板LPDIRECTDRAWCLIPPER CreatDDClipper(LPDIRECTDRAWSURFACE7 lpDDraw,int Clipnumber,LPRECT clipsqe);/BMP函数int FilpBMPFile(UCHAR *image,int bytes_per_line,int height);int LoadBMPFile(BMP_FILE bitmap,char *filename);int UnloadBMPFile(BMP_FILE bitmap);/创建BMP画面LPDIRECTDRAWSURFACE7CreatePicSurface(char *filename,int mem_flags,int colorkey);/画面数据交换int SurfaceToBack(LPDIRECTDRAWSURFACE7sourcesurface,int x1,int y1,int x2,int y2,LPDIRECTDRAWSURFACE7destsurface,int x3,int y3,int x4,int y4,int angle);Directinput.cpp#include /DirectInput函数int MyDirectInputInit(void);int MyDirectInputShut(void);int MyDirectInputMain(void);/DirectInput变量extern LPDIRECTINPUT8lpDInput;/DirectInput对象extern LPDIRECTINPUTDEVICE8lpDInputkey;/DirectInput键盘/键盘缓冲extern UCHARkeyboard_state256;3 也是RPG游戏,很齐全的具体过程:圣二源代码的组织结构:Fight 下面放的是战斗部分的程序MENU 菜单操作部分的程序GAMELIB 封装了DX的游戏库interface 游戏的界面:button,checkbox,window,scroll,procee,listwindow等MAPEDIT 地图编辑器的相关函数先初始化和游戏相关的数据,Ddraw,Dsound,Dmusic,Dinput然后开始消息循环,由一个叫RunGame的变量做为循环的条件,Peek方式,有消息的时候处理消息,在空闲的时候进行游戏主循环。主循环里面先进行延时控制,然后获取输入信息,再根据游戏状态(g_ePlayState)进行不同的处理,这些处理是放到不同的函数里面的,然后得到游戏的一些数据,再根据不同的游戏状态进行屏幕的更新,最后是一个被称为消息队列的东西执行它的一个叫做Run的函数。这个消息队列是由程序来维护的,不是windows的消息队列。设计这样一个消息队列是用来配合脚本的执行。从游戏主循环返回了后,又进行相同的循环,直到RunGame为false为止。这点是由程序控制的,正常情况下GetMessage是不可能得到WM_QUIT消息的。上面就是整个程序的结构。下面我们一个类一个类的分析。先看最为基本的类CIniSet类,这个类贯穿整个程序,它负责游戏重要数据的组织。提供了对INI文件操作的支持。基本的用法是根据一个文件名filename一个索引名index一个数据名得到这个数据的具体的内容。这个类先根据给出的文件名建立一个索引列表IndexList以后的操作都可以根据这个列表来进行,根据索引列表找到索引位置,再从这个位置开始搜索与给定数据名相同的字符串,然后返回其内容的位置,根据要求按照int或者是string进行处理。没有什么要多说的,程序里面有详细的注释,容易忽略的地方我都写了很多。然后是Cmap类,不用说了地图类。想要完全看懂这个里面的函数,先要了解圣二的地图结构。圣二使用的是三层的地图,最下面是地面层(Ground),然后是两个物体层:物体层一(Obj)和物体层二(Obj2),地图的每个格子由一个叫stCell的结构描述,这个结构放在Map.h里面。它定义了地图格子的所有的属性:地面层,物体层1,物体层2的图片所在位置,它们的层次关系(这不是说它们之间的层次关系,而是和地图上的人物的层次对比关系),这个格子的阻挡属性,鼠标放上去的时候是显示什么样子的图形和这个格子的陷阱属性(就是人物走到这个位置将要发生的事件)。这个结构的定义使用了位段(bit field)的方式存放数据,当然是为了节省内存。(哇,好厉害的soft哦。我对你的佩服有如涛涛江水,绵绵不绝:)好了,不多说废话了,看看stCell的样子吧。struct stCellunsigned GroundPic:6;/地面页面编号(普通0-59 动态60-63)unsigned Ground:12;/地面编号unsigned ObjPic:6;/物体页面编号(普通0-59 动态60-63)unsigned Obj:12;/物体编号unsigned Obj2Pic:6;/物体2页面编号(普通0-59 动态60-63)unsigned Obj2:12;/物体2编号unsigned Block:1;/是否阻挡unsigned
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!