




已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实例分析一、贪吃蛇 阶段一:贪吃蛇程序整体类结构 贪吃蛇游戏介绍一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇向上接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。贪吃蛇游戏示意图: 贪吃蛇游戏类设计贪吃蛇游戏需要设计两个类:1) 蛇类:蛇自身的属性包括蛇头、蛇尾、蛇的位置等等;蛇的方法包括出生、移动、吃食等等,CSnake类结构下图所示:CSnake类属性成员变量名数据类型意 义m_lengthint蛇的长度m_newSnakeSnake_Struct蛇的新态的所有节点运动状态m_oldSnakeSnake_Struct蛇的旧态的所有节点运动状态m_pStateArrayBitmapState*蛇的所有节点显示位图的状态m_pPosSPoint*蛇体坐标方法成员函数名属 性函数功能GetRightState()private返回当前应当显示的身体状态Move()public蛇移动ChangeDirect()public改变移动方向AddBody()public蛇的身体增长SetHeadPos()public设置蛇头的坐标GetStateArray()public取蛇的状态标识数组GetPos()public取蛇的位置数组IsHeadTouchBody()public检测蛇头是否触碰到其身体GetLength()public获取蛇身的长度Initial()public游戏初始化CSnake()public构造函数CSnake()public析构函数 注:1. Snake_Struct为结构体类型,定义为:struct Snake_Struct/定义蛇体状态MoveState head; /头部MoveState *body; /身体MoveState tail; /尾部;2. MoveState为枚举类型,定义为:/节点运动状态(方向),4个成员分别对应4个方向enum MoveStateS_NONE,S_UP,S_DOWN,S_LEFT,S_RIGHT;3. BitmapState为枚举类型,定义为:/节点图像显示运动状态(方向),第一个成员代表无方向,后12个成员之分别对应12个方向EnumBitmapStateM_NONE,M_UP_UP,M_DOWN_DOWN,M_LEFT_LEFT,M_RIGHT_RIGHT,M_UP_LEFT,M_UP_RIGHT,M_LEFT_UP,M_LEFT_DOWN,M_RIGHT_UP,M_RIGHT_DOWN,M_DOWN_RIGHT,M_DOWN_LEFT4. SPoint为结构体类型,定义为:struct SPointint x,y;/ 横、纵坐标;2) 桌面类:桌面类的属性包括桌子的宽度、高度、食物、蛇等等;方法包括设置桌面环境,获取食物等等,CTable类结构下图所示:CTable类属性成员变量名数据类型意 义m_widthint桌子的宽度m_heightint桌子的高度m_foodNumberint水果的数目m_blockNumberint障碍物(毒果)的数目m_snakeCSnake桌子上的蛇m_boardint*桌子面板(二维数组)方法成员函数名属 性函数功能InitialTable()public初始化桌面AddBlock()public在某个位置放置毒果AddFood()public在某个位置放置食物ClearFood()public清除某个位置的果实GetSnake()public获取蛇对象GetBoard()public取桌子对象GetData()public取桌子某个位置数据SnakeMove()public检测蛇头是否触碰到其身体ChangeSnakeDirect()public改变蛇的方向CTable()public构造函数CTable()public析构函数CSnake:SetHeadPos()CTable:ChangeSnakeDirect()设置自动移动定时器和增加食物定时器游戏开始CTable:InitialTab()CTable:AddFood()桌面初始化初始化蛇头和蛇移动方向随机初始化一个食物到桌面SetTimer()CTable:AddFood()蛇移动蛇吃食?蛇增长继续?蛇死亡?桌面上随机生成食物CTable:SnakeMove()CTable:ClearFood()CSnake:AddBody()退出程序ESC是是否否StartGame()SPACECSnake:IsHeadTouchBody()TB_STATE_SBLOCK阶段二:贪吃蛇程序整体类间调用关系阶段三:Win32 SDK程序消息机制分析光标消息?1、 释放设备缓存2、 退出消息循环是程序结束否时钟消息?是1、蛇移动或者添加食物2、显示游戏图像销毁窗口?是是否否缺省消息处理消息处理完毕隐藏光标程序立即终止改变蛇头移动方向向上游戏开始GetMessagege()有效消息?是否按键消息?是否向上向下?向左?向右?改变蛇头移动方向向下改变蛇头移动方向向左改变蛇头移动方向向右否否否是是是是Esc?否空格?是否否是结束状态?是阶段四:游戏控制的实现因为有定时器,所以蛇会定时自动移动,为了蛇能继续长大、不碰壁和碰到毒果,必须通过改变方向来改变蛇的移动方向。设定键盘的上下左右键为蛇移动方向的控制键,捕获到键盘消息后,发送给窗口过程。对应的上下左右4个方向按键的消息为:VK_UP、VK_DOWN、 VK_LEFT、 VK_RIGHT。相应这四个消息、便可以对蛇的移动状态进行控制,保存在蛇的各个记录蛇状态的成员变量里,然后通过这些信息。绘制出相应的蛇的实时移动状态图,达到控制目的。阶段五:界面的实现与图像资源的加载l 游戏界面介绍此游戏界面为全屏模式,首先根据屏幕分辨率大小,建立一个全屏窗口,以像素为单位作为游戏界面:屏幕最外层四个方向为各80像素的围墙(障碍物),在上围墙中间又覆盖了一个记分板,中间剩余的部分为游戏区。为了提高游戏的界面显示性能,导入了相关的位图图像资源:包括游戏图标资源、围墙位图资源brick.bmp、蛇及蛇的各种状态资源bitmap1.bmp、食物及毒果资源(障碍物)、游戏记分板资源scoreboard.bmp、游戏结束画面资源end.bmp。l 游戏界面的实现和图像资源的加载n 定义各种图像设备环境(全局变量):HDC windowDC = NULL; /windows屏幕设备HDC bufferDC = NULL; /缓冲设备环境HDC picDC = NULL; /snake图像设备HDC endDC = NULL;/游戏终结图像设备HDC scoreDC = NULL; /分数板设备n 定义各种位图缓冲区(全局变量)HBITMAP picBMP = NULL; /snake图像位图句柄HBITMAP bufferBMP = NULL;/缓冲位图句柄HBITMAP endBMP = NULL; /游戏终结图像内存句柄HBITMAP hbmpWall = NULL; /墙位图句柄HBITMAP hbmpScore = NULL;/分数板位图句柄n 定义应用程序窗口句柄(全局变量)HWND hAppWnd = NULL; /应用程序窗口句柄在WinMain()函数中,要完成程序主窗口的创建和各种设备环境和缓冲区的加载。n 设计和注册一个窗口n 获取显示器宽和高(像素)/取整个屏幕的尺寸width=GetSystemMetrics(SM_CXSCREEN);/返回屏幕宽度(像素)height=GetSystemMetrics(SM_CYSCREEN);/返回屏幕高度(像素)n 创建窗口调用CreateWindow()函数时候指定窗口宽和长分别为width和height。n 显示和更新窗口n 计算客户区大小GetClientRect(hAppWnd, &g_ClientRect);g_iClientWidth = g_ClientRect.right-g_ClientRect.left;g_iClientHeight = g_ClientRect.bottom-g_ClientRect.top;/将游戏区域分成纵,横均为块的小方块/并计算每块区域的大小tableBlockWidth = (g_iClientWidth-2*WALL_WIDTH)/20;tableBlockHeight = (g_iClientHeight-2*WALL_HEIGHT)/20;n /获取当前主窗口设备句柄(与windowDC关联)GetDC()函数返回一个客户区显示设备环境windowDC=GetDC(NULL);CreateCompatibleDC()函数用于创建一个和WindowDC兼容的设备环境bufferDC=CreateCompatibleDC(windowDC);picDC=CreateCompatibleDC(windowDC);endDC=CreateCompatibleDC(windowDC);scoreDC=CreateCompatibleDC(windowDC);CreateCompatibleBitmap()函数用于创建一个和windowDC 兼容的位图缓冲环境。bufferBMP=CreateCompatibleBitmap(windowDC,g_iClientWidth,g_iClientHeight);LoadImage()函数:加载位图资源,并返回图片指针picBMP=(HBITMAP)LoadImage(NULL,snake.bmp,IMAGE_BITMAP,160,80,LR_LOADFROMFILE);/加载蛇图片位图hbmpWall=(HBITMAP)LoadImage(NULL,brick.bmp,IMAGE_BITMAP,16,16,LR_LOADFROMFILE);/加载墙位图endBMP=(HBITMAP)LoadImage(NULL,end.bmp,IMAGE_BITMAP,369,300,LR_LOADFROMFILE);/加载游戏结束位图hbmpScore=(HBITMAP)LoadImage(NULL,scoreboard.bmp,IMAGE_BITMAP,265,55,LR_LOADFROMFILE);/加载得分板位图设置位图与设备环境的关联SelectObject(bufferDC,bufferBMP);SelectObject(picDC,picBMP);SelectObject(endDC,endBMP);SelectObject(scoreDC,hbmpScore);进入游戏后,将所有游戏数据存在桌面类成员变量中,调用ShellDraw(bufferDC)函数用于绘制桌面初始化环境:包括游戏墙壁、和游戏区、得分板。调用GameAreaDraw(bufferDC)函数用于绘制游戏区域到缓冲:绘制桌面上的食物、毒果和蛇的不断移动状态、游戏结束图。阶段六:系统与整合与代码调试snake.h#ifndef _GREED_SNAKE_#define _GREED_SNAKE_/蛇坐标m_pPos移动增量#define SNAKE_MOVE 1/带参数宏,释放动态申请的空间#define SAFE_DELETE(p) delete (p);(p)=NULL;#define SAFE_DELETE_ARRAY(p) delete(p);(p)=NULL;#include /节点图像显示运动状态(方向)enum BitmapStateM_NONE,M_UP_UP,M_DOWN_DOWN,M_LEFT_LEFT,M_RIGHT_RIGHT,M_UP_LEFT,M_UP_RIGHT,M_LEFT_UP,M_LEFT_DOWN,M_RIGHT_UP,M_RIGHT_DOWN,M_DOWN_RIGHT,M_DOWN_LEFT;/节点运动状态(方向),个成员分别对应个方向enum MoveStateS_NONE,S_UP,S_DOWN,S_LEFT,S_RIGHT;/坐标位置结构struct SPointint x;/横坐标int y;/纵坐标;class CSnakestruct Snake_Struct/定义蛇体状态MoveState head; /头部MoveState *body; /身体(数组)MoveState tail; /尾部;private:int m_length; /蛇身体的长度Snake_Struct m_newSnake; /蛇的新态的所有节点运动状态Snake_Struct m_oldSnake; /蛇的原态的所有节点运动状态BitmapState *m_pStateArray; /蛇的所有节点显示位图的状态SPoint *m_pPos; /蛇体坐标private:BitmapState GetRightState(MoveState oldDirect,MoveState newDirect);public:void Move(void); void ChangeDirect(MoveState d);void AddBody(int n=1);void SetHeadPos(int x,int y);BitmapState* GetStateArray(void);SPoint* GetPos(void);bool IsHeadTouchBody(int x,int y);int GetLength( void );void Initial( void );public:CSnake(int x_pos=0,int y_pos=0,int len=1); /构造函数CSnake(); /析构函数;#endif /_GREED_SNAKE_table.h#ifndef _GAME_TABLE_#define _GAME_TABLE_/桌面环境状态#define TB_STATE_OK 0 /正常#define TB_STATE_FOOD 1 /食物#define TB_STATE_BLOCK 2 /障碍毒果#define TB_STATE_SBLOCK 3 /障碍墙#includesnake.hclass CTableprivate:int m_width; /桌子的宽度int m_height; /桌子的高度int m_foodNumber; /水果的数目int m_blockNumber; /障碍物(毒果)的数目CSnake m_snake; /桌子上的蛇int *m_board; /桌子面板public:CTable();CTable();/初始化桌子面板void InitialTable(int w,int h);/食物的操作bool AddBlock(int x,int y);bool AddFood(int x,int y);bool ClearFood(int x,int y);/物件获取CSnake* GetSnake(void);int* GetBoard(void);int GetData(int x,int y);/蛇的操作void SnakeMove(void);bool ChangeSnakeDirect(MoveState d);#endif /_GAME_TABLE_snake.cpp#include snake.hCSnake:CSnake(int x_pos,int y_pos,int len)if(len1) len=1;int i;m_length=len; /蛇的身体体长/初始化蛇的坐标位置m_pPos=new SPointm_length+2;m_pPos0.x=x_pos;m_pPos0.y=y_pos;for(i=1;im_length+2;i+)m_pPosi.x=0;m_pPosi.y=0;/初始化蛇的运动状态/初始化蛇头m_newSnake.head=S_NONE;m_oldSnake.head=S_NONE;/为身体长为m_length的蛇分配运动状态内存空间m_newSnake.body=new MoveStatem_length;m_oldSnake.body=new MoveStatem_length;/初始化蛇身运动状态for(i=0;im_length;i+)m_oldSnake.bodyi=S_NONE;m_newSnake.bodyi=S_NONE;/初始化蛇尾巴运动状态m_newSnake.tail=S_NONE;m_oldSnake.tail=S_NONE;/初始化蛇的位图显示状态m_pStateArray = new BitmapStatem_length+2;for(i=0;im_length+2;i+)m_pStateArrayi=M_NONE;CSnake:CSnake()/析构new空间SAFE_DELETE_ARRAY(m_pStateArray);SAFE_DELETE_ARRAY(m_pPos);/根据新旧两个身体的运动趋势情况,返回当前应当显示的身体状态/BitmapState CSnake:GetRightState(MoveState oldDirect,MoveState newDirect)BitmapState res;switch(oldDirect)case S_NONE:switch(newDirect)case S_NONE:res=M_NONE;break;case S_UP:res=M_UP_UP;break;case S_DOWN:res=M_DOWN_DOWN;break;case S_LEFT:res=M_LEFT_LEFT;break;case S_RIGHT:res=M_RIGHT_RIGHT;break;break;case S_UP:switch(newDirect)case S_UP:res=M_UP_UP;break;case S_LEFT:res=M_UP_LEFT;break;case S_RIGHT:res=M_UP_RIGHT;break;break;case S_DOWN:switch(newDirect)case S_DOWN:res=M_DOWN_DOWN;break;case S_LEFT:res=M_DOWN_LEFT;break;case S_RIGHT:res=M_DOWN_RIGHT;break;break;case S_LEFT:switch(newDirect)case S_LEFT:res=M_LEFT_LEFT;break;case S_UP:res=M_LEFT_UP;break;case S_DOWN:res=M_LEFT_DOWN;break;break;case S_RIGHT:switch(newDirect)case S_RIGHT:res=M_RIGHT_RIGHT;break;case S_UP:res=M_RIGHT_UP;break;case S_DOWN:res=M_RIGHT_DOWN;break;break;return res;/改变方向/void CSnake:ChangeDirect(MoveState d) / 改变方向的条件:非对立方向 / 只能为其左,前,右方switch(d)case S_NONE:m_newSnake.head=d;break;case S_UP:if(m_newSnake.head!=S_DOWN) m_newSnake.head=d;break;case S_DOWN:if(m_newSnake.head!=S_UP) m_newSnake.head=d;break;case S_LEFT:if(m_newSnake.head!=S_RIGHT) m_newSnake.head=d;break;case S_RIGHT:if(m_newSnake.head!=S_LEFT) m_newSnake.head=d;break;/蛇移动/void CSnake:Move(void)int i;/1.计算新状态各个节点的状态/保存蛇身体各个部位的形状for(i=0;i0;i-)/改变蛇身状态m_newSnake.bodyi=m_newSnake.bodyi-1;m_newSnake.body0=m_newSnake.head;/改变蛇头状态/根据新旧位图显示状态特性取正确的状态m_pStateArray0=GetRightState(m_oldSnake.head,m_newSnake.head);/为蛇头获取新的移动显示状态for(i=0;i0;i-)m_pPosi=m_pPosi-1;/蛇头的新位置根据蛇的运动方向判断做相应偏移switch(m_newSnake.head)case S_UP:/向上,蛇头纵坐标减一m_pPos0.y-=SNAKE_MOVE;break;case S_DOWN:m_pPos0.y+=SNAKE_MOVE;break;case S_LEFT:m_pPos0.x-=SNAKE_MOVE;break;case S_RIGHT:m_pPos0.x+=SNAKE_MOVE;break;/蛇的身体增长/void CSnake:AddBody(int n)/ 分配临时的save类型变量,用作保留/ 蛇的各种数据状态int i;Snake_Struct saveOldSnake,saveNewSnake;BitmapState *savestateArray;SPoint *savePos;/保存蛇的位置信息/ possavePos=new SPointm_length+2;for(i=0;im_length+2;i+)savePosi=m_pPosi;/保存蛇的状态信息/ 1.oldSnake/ 2.newSnake/ 3.stateArray/1saveOldSnake.head=m_oldSnake.head;saveOldSnake.body=new MoveStatem_length;for(i=0;im_length;i+)saveOldSnake.bodyi=m_oldSnake.bodyi;saveOldSnake.tail=m_oldSnake.tail;/2saveNewSnake.head=m_newSnake.head;saveNewSnake.body=new MoveStatem_length;for(i=0;im_length;i+)saveNewSnake.bodyi=m_newSnake.bodyi;saveNewSnake.tail=m_newSnake.tail;/3savestateArray=new BitmapStatem_length+2;for(i=0;im_length+2;i+)savestateArrayi=m_pStateArrayi;/将长度增长m_length+=n;/释放所有蛇的身体存储数据空间delete m_oldSnake.body;m_oldSnake.body=NULL;delete m_newSnake.body;m_newSnake.body=NULL;delete m_pStateArray;m_pStateArray=NULL;delete m_pPos;m_pPos=NULL;/创建并初始化增长后的蛇的存储数据空间m_newSnake.head=S_NONE;m_oldSnake.head=S_NONE;m_newSnake.body=new MoveStatem_length;m_oldSnake.body=new MoveStatem_length;for(i=0;im_length;i+)m_newSnake.bodyi=S_NONE;m_newSnake.bodyi=S_NONE;m_newSnake.tail=S_NONE;m_oldSnake.tail=S_NONE;m_pStateArray=new BitmapStatem_length+2;for(i=0;im_length+2;i+)m_pStateArrayi=M_NONE;m_pPos=new SPointm_length+2;for(i=0;im_length+2;i+)m_pPosi.x=0;m_pPosi.y=0;/恢复原来长度的数据(新的用初始化的数据)/a. newSnake ,oldSnake状态/b. stateArray/c. pos/am_newSnake.head=saveNewSnake.head;m_oldSnake.head=saveOldSnake.head;for(i=0;im_length-n;i+)m_newSnake.bodyi=saveNewSnake.bodyi;m_oldSnake.bodyi=saveOldSnake.bodyi;m_newSnake.tail=saveNewSnake.tail;m_oldSnake.tail=saveOldSnake.tail;/bfor(i=0;im_length-n+2;i+)m_pStateArrayi=savestateArrayi;/cfor(i=0;im_length-n+2;i+)m_pPosi=savePosi;/设置蛇头的坐标/void CSnake:SetHeadPos(int x,int y)m_pPos0.x=x;m_pPos0.y=y;/取蛇的状态标识数组/BitmapState* CSnake:GetStateArray(void)return m_pStateArray;/取蛇的位置数组/SPoint* CSnake:GetPos(void)return m_pPos;/取蛇身的长度/int CSnake:GetLength(void)return m_length+2; /检测蛇头是否触碰到其身体/bool CSnake:IsHeadTouchBody(int x,int y)int i;for(i=1;im_length+2;i+)if(m_pPosi.x=x&m_pPosi.y=y) return true;return false;/初始化用作游戏结束后重新开始/void CSnake:Initial(void )/释放以前的所有存储空间SAFE_DELETE_ARRAY(m_pStateArray);SAFE_DELETE_ARRAY(m_pPos);/创建蛇身长度为的蛇,并做各种初始化int i;int x = 0;int y = 0;/初始化蛇的坐标位置m_length=1;m_pPos=new SPointm_length+2;m_pPos0.x=x;m_pPos0.y=y;for(i=1;im_length+2;i+)m_pPosi.x=0;m_pPosi.y=0;/初始化蛇的运动状态m_newSnake.head=S_NONE;m_oldSnake.head=S_NONE;m_newSnake.body=new MoveStatem_length;m_oldSnake.body=new MoveStatem_length;for(i=0;im_length;i+)m_oldSnake.bodyi=S_NONE;m_newSnake.bodyi=S_NONE;m_newSnake.tail=S_NONE;m_oldSnake.tail=S_NONE;/初始化蛇的位图显示状态m_pStateArray=new BitmapStatem_length+2;for(i=0;im_length+2;i+)m_pStateArrayi=M_NONE;table.cpp#include table.hCTable:CTable()/默认构造m_width=m_height=0;m_foodNumber=m_blockNumber=0;m_board=NULL;CTable:CTable()if(m_board != NULL)SAFE_DELETE_ARRAY(m_board);/析构桌面内存空间/ 初始化桌子/void CTable:InitialTable(int w,int h)/初始化Tableint i,j;/重新设置桌子的高度与宽度m_width=w;m_height=h;/其他成员变量的清空性质初始化m_snake.Initial();if(m_board != NULL)SAFE_DELETE_ARRAY(m_board);/根据高度和宽度创建一个新的桌子m_board=new int*m_height;/行for(i=0;ih;i+)m_boardi=new intm_width;for(j=0;jw;j+)m_boardij=TB_STATE_OK;/将桌面内所有位置正常状态/将桌子四周设置为墙/将顶部跟底部的边缘设置为障碍物墙的状态for(i=0;ih;i+)m_boardi0=TB_STATE_SBLOCK;m_boardim_width-1=TB_STATE_SBLOCK;/将左部和右部的边缘设置为障碍物墙的状态for(i=0;i=0)&(x=0)&(y=0)&(x=0)&(ym_height)&(m_boardyx=TB_STATE_OK) ) /桌面此坐标位置为正常m_boardyx=TB_STATE_FOOD;/将此坐标设置成水果状态+m_foodNumber;return true;elsereturn false;/ 清除某个位置的果实/bool CTable:ClearFood(int x,int y)m_boardyx=TB_STATE_OK;/将桌面这一坐标清成正常状态return true;/ 获取蛇对象/CSnake* CTable:GetSnake(void)return &m_snake;/ 取桌子对象/int* CTable:GetBoard(void)return m_board;/ 取桌子某个位置数据/int CTable:GetData(int x,int y)return m_boardyx;/ 蛇的移动/void CTable:SnakeMove(void)m_snake.Move();/ 改变蛇的方向/bool CTable:ChangeSnakeDirect(MoveState d)m_snake.ChangeDirect(d);return true;main.cpp#include#include #includesnaker.h#includetable.h/游戏状态定义#define GAME_STATE_WAIT 0 /游戏等待状态#define GAME_STATE_RUN 1 /游戏运行状态#define GAME_STATE_END 2 /游戏结束状态/界面相关物件尺寸定义#define WALL_WIDTH 80 /外墙从左部到游戏区的宽度#define WALL_HEIGHT 80 /外墙从顶部到游戏区的高度#define BMP_SCORE_BOARD_WIDTH 256 /分数位图板的宽度#define BMP_SCORE_BOARD_HEIGHT 55 /分数位图板的高度#define BMP_WALL_WIDTH 16 /墙位图的宽度#define BMP_WALL_HEIGHT 16 /墙位图的高度LRESULT CALLBACK WndProc(HWND hWnd,UINT message, WPARAM wParam,LPARAM lParam);/回调函数void DrawGame(void);void ShellDraw( HDC hdc );void GameAreaDraw(HDC hdc);void OnTimer(UINT uTIMER_ID);/定时void StartGame( void ); /游戏开始void EndGame( void ); /游戏结束/创建一个桌子CTable table;int tableBlockWidth = 0; /桌子的格子的宽度int tableBlockHeight = 0; /桌子的格子的高度int iScores = 0; /游戏的得分基数UINT uGameState = GAME_STATE_WAIT; /当前游戏状态HDC windowDC = NULL; /windows屏幕设备HDC bufferDC = NULL; /缓冲设备环境HDC picDC = NULL; /snake图像内存设备HDC endDC = NULL; /游戏终结图像内存设备HDC scoreDC = NULL; /分数板内存设备HWND hAppWnd = NULL; /本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论