c课程设计俄罗斯方块_第1页
c课程设计俄罗斯方块_第2页
c课程设计俄罗斯方块_第3页
c课程设计俄罗斯方块_第4页
c课程设计俄罗斯方块_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、四 川 理 工 学 院课 程 设 计 书学院 计算机学院 专业 计算机科学与技术 班级 计科2014级 题目 俄罗斯方块 教师 何绍荣 王非 学生 雷元刚 张柯 摘 要近年来随着计算机在社会领域的不断发展,C+作为一门高级语言,能够实现面向对象编程。作为相较于C语言而言,C+设计无需复杂的程序设计环境,并且兼容C语言且比C语言更加安全和简洁。俄罗斯方块是大多数人儿时的游戏,它通过移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。本课程设计完成了俄罗斯方块的下落,旋转,加速,预览下一个方块。以及音乐的播放和帮助文档的创建,分数的读取和记录。通过编写本程序,让作者对消

2、息循环和窗口的创建有了深入的理解,并且理解了俄罗斯方块的运行原理。同时掌握书写程序设计开发文档的能力。关键词:窗口句柄;回调函数;位图方块;俄罗斯方块; 目 录前 言11.1 需求分析21.2 系统功能及结构简介21.2.2 系统结构2第二章 详细设计32.1界面设计32.1.1 UI界面设计32.2 格模块功能设计4各按钮功能的实现42.3游戏区域模块62.4控制区域模块62.5系统流程图62.6具体函数设计72.7小结8第三章 测试计划93.1测试方案93.2测试项目及功能93.3测试人员与目的93.4 测试结果9第四章 致谢13参 考 文 献14附录A15前 言俄罗斯方块游戏由莫斯科科学

3、学院程序员Alexei Pajitnov设计,发行于1985年。他在玩过一个拼图游戏之后受到启发,从而制作了一个以Electronica 60为平台的俄罗斯方块的游戏。后来经瓦丁格拉西莫夫移植到PC上,并且在莫斯科的电脑界传播。帕基特诺夫因此开始小有名气。随后几年,俄罗斯方块开始登陆各大游戏主机。也曾因为版权问题引起过许多纠纷。但是拜亚洲盗版商人所赐,俄罗斯方块被引进到国内,如今已成为家喻户晓的著名游戏了。如今电子游戏业如此繁荣,作为电子游戏鼻祖的俄罗斯方块起到了决定性的作用。如今俄罗斯方块已有多种版本,有的加了几种特殊形状,有的可以使用道具,还有连机的俄罗斯方块等等。但万变不离其宗,不管怎么

4、变,游戏的基本规则是没有变化的。游戏玩法十分简单,如今已经成为一种公认的规则:屏幕顶部以随机顺序落下形状各异的方块,你要试图用它们拼成没有空隙的行列。坚持得时间越长,游戏速度也就变得越来越快,而游戏的吸引力就在于使你顶住碎块的进攻,支撑的时间比上一次更长。由于玩法简单,容易上手,如今仍是风靡全球,老少皆宜的一款游戏第一章 设计简介及设计方案论述1.1 需求分析随着社会的发展,越来越多的人开始接触电脑,也有越来越多的人开始喜欢上玩电脑游戏,而俄罗斯方块是一款经典的游戏,对于广大人群都有吸引力,游戏可以让人们得到放松,提高人们的工作效率。而好的人机交互界面,也能给人以美好的感官享受。1.2 系统功

5、能及结构简介此俄罗斯方块程序能够实现显示现一个方块的形状,以及显示当前用户的得分和等级并写入到文件中,能够暂停,重玩,退出,帮助文件,切换音乐,关闭音乐。在游戏的过程中,如果想要暂停,可以点击菜单栏上的游戏里的暂停,或者点击空格键暂停。再次点击空格键游戏继续。如果要切换音乐,可以点击设置里的音乐选项,单击2中不同风格的音乐。1.2.2 系统结构利用的是MFC对话框程序的构成框架,然后再利用Windows提供的资源,运用控件,自己制作了对话框和人机交互界面。如图2.1所示。图2.1 程序结构图 第二章 详细设计2.1界面设计 UI界面设计打开VC C+6.0新建一个工程,选择对话框。便生成了一个

6、窗口。然后打开ResouceView,点开Dialog,插入Dialog,利用控件,绘制各个按钮。如图2.1所示。图2.1 俄罗斯方块首先设计游戏的UI界面,先创建工具栏(第二行)添加位图资源的ID,以及按钮的个数,大小,宽度,高度,工具栏风格。添加tbButtons数组,IDM_NEW 新游戏,IDM_PAUSE 暂停,IDM_STOP 停止,IDM_MUSIC音乐,IDM_HELP帮助,并添加竖直的分割直线。然后为控件添加响应函数发出单机消息。编写窗口消息循环和窗口回调函数,并且用Case用来捕获消息并处理。2.2 格模块功能设计各按钮功能的实现(1)处理”暂停”按钮单击暂停按钮后,在me

7、ssage被捕获后传如回调函数后,判断是否是消息,再将其转化为int类型,并再使用case语句捕获然后调用GamePause函数来处理。如果游戏结束就直接返回,如果游戏上一个状态是开始,那么就显示游戏暂停,并调用SendMessage()显示游戏暂停,调用KillTimer()让方块停止下落,调用TetrisMusic()停止播放音乐。最后将状态设置为取反。如图2.2所示。 图2.2 程序暂停图(2)处理”停止”按钮单击停止按钮后,窗口捕获后,调用回调函数匹配IDM_STOP,如果y=-1,还没有开始游戏,就直接返回。否则就调用GameOver(),输出游戏结束。如图2.3所示。(3)处理”开

8、始”按钮单击开始按钮后,通过message捕获后,执行GameStart()函数,开始初始化游戏的数据,初始化Matrix矩阵,并将其初始化的颜色的值赋值为-1。初始化方块的位置为X=4,Y=-1。初始化标志变量,bStart和bGover都设置为FALSE。初始化游戏区,初始化计分器,等级设置为1级,慢行,分数都设置为0,最高分从文件中读取。(4)处理”退出”按钮单击退出按钮后,通过message捕获后,执行SendMessage()后销毁窗口。窗口也就随着被系统销毁了。(5)处理”帮助”按钮当点击帮助这个按钮的时候,通过消息循环,捕获到的消息传递给回调函数进行处理,在成功的与IDM_HEL

9、P匹配后,调用DialogBox()弹出 一个消息框,这个消息框是我们实现建立好的,如图所示。只需要通过函数来调用它就可以了。上面会有一些关于游戏的规则和游戏 方式的说明等。如图2.4,2.5所示。图2.3 游戏结束图 图2.4 帮助界面图2.5 帮助消息框2.3游戏区域模块图2.6 游戏区结构图2.4控制区域模块图2.7 控制模块结构图2.5系统流程图 图 2.8程序流程图是否到顶部是否到顶部是否到顶部是否到顶部2.6具体函数设计LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);窗口回调函数,在窗口运行过程中处理控件产生的消息以及键盘按下的消

10、息,采用消息循环机制void SetNormalText(HWND,BOOL);字体设置函数,处理窗口显示的字体格式,美化界面void GameUI(HWND);窗口控件的布局,以及控件的布局,图形化界面的主要实现函数void DrawButton(LPARAM);绘制游戏区域的四个方向按键void DrawTetris(HDC,int,int,int);绘制要显示出来的方块,方块显示的主函数void DrawNext(HDC);绘制预览区,显示下一个方块的主要函数void DrawMatrix(HDC);绘制游戏区域的实现函数,实现游戏区域的绘制,使方块在游戏区域中显示,游戏运行的主要区域v

11、oid RandomBlock(int *,int *,int *);随机产生方块的主要函数,能够随机的产生方块BOOL CheckBlock(int,int);检查越界函数,在方块下落和旋转过程中判断是否可以执行void DropTetris(HWND);方块下落函数,定时器产生消息后调用此函数,使方块能够实现下落功能void RankTetris(HWND);方块旋转实现函数,在下落过程中方块可以旋转成四种形状中的任意一种,实现变形功能void GameStart(HWND);游戏开始时调用,实现游戏初始化功能void GamePause(HWND);游戏暂停时调用,实现游戏的暂停功能vo

12、id GameOver(HWND);游戏结束时调用,实现游戏的扫尾工作int TetrisIni(int);加载配置文件,从配置文件中读取数据。例如:最高分BOOL CALLBACK HelpDlgProc(HWND,UINT,WPARAM,LPARAM);帮助对话框的回调函数,实现对游戏操作者的帮助功能BOOL CALLBACK MusicDlgProc(HWND,UINT,WPARAM,LPARAM);音乐设置对话框的回调函数,实现对音乐选择的功能void TetrisMusic(BOOL);音乐对话框调用此函数void MusicItem(int);音乐条目选择调用此函数2.7小结在本次

13、的课程设计中,充分认识到了自己的不足之处,以及许多需要学习的地方。在实验中也遇到了许多问题,在界面设计与实现上花费了许多时间,对MFC的不熟悉也是进度缓慢的一个重要原因。并且在许多C+的基础知识不是很扎实,暴露出问题。在老师的指导下,同学的帮助下完成了程序,也学到了许多新的知识。这次的课程设计,收获了许多新知识,提高了分析问题和解决问题能力。在课程设计中学习了MFC的新知识,知道了更多的Windows API,在以后的学习中,相信这些新知识都能够很好的帮助学习。并且在此次实验中,能够与同学更好的交流,与同一组的同学也有更好的了解,能够分工完成项目,增长了经验。第三章 测试计划 3.1测试方案

14、本游戏的测试方法采用检查各个功能能否实现的方法3.2测试项目及功能控制区功能测试开始按键:实现游戏的开始暂停按键:实现游戏暂停继续按键:实现游戏继续菜单区功能测试新游戏菜单选项:游戏结束从新开始新一轮的游戏退出菜单选项:退出游戏开始菜单选项:开始游戏暂停菜单选项:暂停正在进行的游戏从新开始:重新开始游戏停止菜单选项:停止正在进行的游戏帮助提示菜单选项: 游戏控制键游戏区功能测试:显示俄罗斯方块预览区域:显示下一个方块的样式3.3测试人员与目的测试人员: 雷元刚 张柯测试目的:找出程序中存在的Bug,并且完善相关功能。3.4 测试结果测试1:名称:控制区功能测试 目的:测试控制区各个功能的按钮。

15、 内容: 包括游戏开始,暂停,继续,停止 测试图如图3.1: 图3.1 程序界面图 测试结果:开始,暂停,继续功能都正常作用。测试2:名称:菜单区功能测试 目的:测试菜单区各个子菜单的功能 内容:游戏菜单的帮助选项菜单,音乐设置菜单以及子菜单下控件的正常工作。 测试图如图3.2:图3.2 程序帮助界面图测试结果:帮助对话框能够正常工作,菜单项以及子菜单项也能够作用。测试3:名称:显示区功能测试 目的:测试玩家操作的功能内容:实现方块的移动,下落翻转,消除升级等。测试图如图3.3: 图3.3 游戏结束图测试结果:可以正常游戏,能够开始,暂停,结束,重新开始,但是存在Bug,在结束的位图不能很好消

16、失,方块还能够在按键下运动,还存在问题,需要改正。第四章 致谢经过两天的不懈努力,很兴奋能完成一个C+编程,紧张的心终于可以平静了。从中体会到以及学习到很多关于C+的很大方面的只是,是我更加了解了C+,并更加熟练了C+。在此次设计中我也遇到了很多的问题,都是经过查看老师所给的关于课程设计书和图书馆借的书才明白所用函数的用法,更重要的是上课时老师的细心教学,使我们学会了许多关于C+的基础知识,为本次的课程设计打好了很好的基础。从而使我能够顺利完成这次课程设计。在本次做课程设计过程中,要感谢何绍荣老师的悉心关照,一直陪伴我们,并为大家讲解不懂的地方,很是辛苦,也很是忙碌。还要感谢学院为我们此次课程

17、设计提供机房,让我们有了良好的学习环境可以利用做课程设计,从很大的程度上增强了我们对于C+学习的兴趣。和小组成员一块讨论,多听听别人的想法,想办法改进自己,这使我受益匪浅。只有比较才能知道自己的不足。结束课程设计时,明白了自己与实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课程设计就是对自己一个很好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。参 考 文 献1 郑莉,董渊,何江舟. C+语言程序设计M. 北京:清华大学出版社,2010. 2 谭浩强

18、. C程序设计M. 北京:清华大学出版社,2010. 3 陈明. 软件工程M. 北京:中国铁道出版社,2011.4 Ian Sommerville. Software Engineering, Ninth Editi M. 北京:机械工业出版社,2011.5 Eric Freeman,ElElisabeth Freeman. HeadFirst设计模式M. 北京:中国电力出版社,2007.6 严蔚敏,吴伟民. 数据结构(C语言版)M. 北京:清华大学出版社,2015.7 邓俊辉. 数据结构(C+语言版) M. 北京:清华大学出版社,2010.附录A部分源程序如下:Tetris.h头文件如下:#

19、include #include #include #include #include resource/resource.hHINSTANCE hInst; /实例句柄HWND hStatus; /状态栏句柄HMENU hMenu; /菜单句柄HWND hLevel,hLayer,hSorce,hSorceMax; /计分器句柄static TBBUTTON tbButtons =/WM_COMMAND 消息 /Bitmap/zero-based index of button image /idCommand/command to be sent when button pressed /

20、fsState/button state-see below /fsStyle/ button style-see below /dwData/application-defined value /iString/zero-based index of button label string0,IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,1,IDM_PAUSE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,2,IDM_STOP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,0,0,TBS

21、TATE_ENABLED,TBSTYLE_SEP,0,0,-1,3,IDM_MUSIC,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,4,IDM_HELP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1; /工具栏数据结构struct Block POINT a; POINT b; POINT c; POINT d; ; /方块模型数据结构static Block Tetris74 = /(1)0,0,0,1,1,0,1,1, 0,0,0,1,1,0,1,1,

22、0,0,0,1,1,0,1,1, 0,0,0,1,1,0,1,1,/ (2)0,0,1,0,1,1,2,1, 1,0,1,1,0,1,0,2,0,0,1,0,1,1,2,1, 1,0,1,1,0,1,0,2,/ / (2)1,0,2,0,0,1,1,1, 0,0,0,1,1,1,1,2,1,0,2,0,0,1,1,1, 0,0,0,1,1,1,1,2,/(2)0,0,1,0,2,0,3,0, 1,0,1,1,1,2,1,3,0,0,1,0,2,0,3,0, 1,0,1,1,1,2,1,3,/ /(4)1,0,0,1,1,1,2,1, 0,0,0,1,1,1,0,2,0,0,1,0,2,0,1,

23、1, 1,0,0,1,1,1,1,2,/(4)0,0,0,1,1,1,2,1, 0,0,1,0,0,1,0,2,0,0,1,0,2,0,2,1, 1,0,1,1,0,2,1,2,/ /(4)2,0,0,1,1,1,2,1, 0,0,0,1,0,2,1,2,0,0,1,0,2,0,0,1, 0,0,1,0,1,1,1,2; /七种方块全部变形数据结构int i, j ,c; /运动中的方块数据 Tetrisij颜色值cint ii, jj, cc; /下一个方块数据 同上int x, y; /运动中的方块坐标值int Matrix1910; /游戏区矩阵BOOL bStart; /开始、暂停标志

24、BOOL bGOver; /游戏结束标志HDC hDcBitmap; /装载方格位图用的DCHDC hDcAlert; /装载提示位图用的DCTCHAR szBuffer50; /缓冲字符串int iLevel,iSorce,iLayer,iSorceMax; /计分变量BOOL bMusicOn; /音乐开关int iMusicBG; /背景音乐/全部函数声明LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);void SetNormalText(HWND,BOOL);void GameUI(HWND);void DrawButton(LPAR

25、AM);void DrawTetris(HDC,int,int,int);void DrawNext(HDC);void DrawMatrix(HDC);void RandomBlock(int *,int *,int *);BOOL CheckBlock(int,int);void DropTetris(HWND);void RankTetris(HWND);void GameStart(HWND);void GamePause(HWND);void GameOver(HWND);int TetrisIni(int);BOOL CALLBACK HelpDlgProc(HWND,UINT,W

26、PARAM,LPARAM);BOOL CALLBACK MusicDlgProc(HWND,UINT,WPARAM,LPARAM);void TetrisMusic(BOOL);void MusicItem(int);Tetris.cpp部分源程序如下:#include Tetris.h/初始化数据void GameStart(HWND hwnd)intm, n;HDChdc;hDcBitmap = CreateCompatibleDC(NULL);/初始化Matrix矩阵for ( m=0; m=18; m+ )for ( n=0; n iSorceMax ) iSorceMax = iSo

27、rce;wsprintf(szBuffer,TEXT(%i),iSorceMax);SetWindowText(hSorceMax,szBuffer); /最高分iSorce = 0;wsprintf(szBuffer,TEXT(%i),iSorce);SetWindowText(hSorce,szBuffer); /得分SendMessage(hStatus,SB_SETTEXT,0,(LPARAM)TEXT(空格键开始/暂停);SendMessage(hStatus,SB_SETTEXT,1,(LPARAM)TEXT(方向键上键控制变形,左、右、下键控制移动);hDcAlert = Cre

28、ateCompatibleDC(NULL); /清除提示DC在的位图return;/暂停/继续游戏void GamePause(HWND hwnd)if( bGOver ) return;if ( bStart )KillTimer(hwnd, 1);SendMessage(hStatus,SB_SETTEXT,0,(LPARAM)TEXT(游戏暂停);TetrisMusic(FALSE);elseSetTimer(hwnd, 1, (550-55*iLevel), NULL);SendMessage(hStatus,SB_SETTEXT,0,(LPARAM)TEXT(游戏中 -);Tetri

29、sMusic(TRUE);bStart = !bStart;return;/游戏结束void GameOver(HWND hwnd)HDChdc;KillTimer(hwnd, 1);SelectObject(hDcAlert,LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP9);hdc = GetDC(hwnd);BitBlt(hdc,40,200,160,50,hDcAlert,0,0,SRCCOPY);/绘制提示语ReleaseDC(hwnd,hdc);SendMessage(hStatus,SB_SETTEXT,0,(LPARAM)TEXT(游戏结

30、束);bGOver = TRUE;x = 4; y = -1;TetrisMusic(FALSE);return;/用Matrix中的数据绘制游戏区void DrawMatrix(HDC hdc)intm, n;/绘制Matrix矩阵for ( m=0; m=18; m+ )for ( n=0; n=9; n+ )if ( Matrixmn = -1 )PatBlt(hdc,20+n*20,40+m*20,20,20,BLACKNESS);/该颜色为黑色elseSelectObject(hDcBitmap,LoadBitmap(hInst,MAKEINTRESOURCE(120+Matrixm

31、n); BitBlt(hdc,20+n*20,40+m*20,20,20,hDcBitmap,0,0,SRCCOPY);return;/绘制方块void DrawTetris(HDC hdc, int iOffsetX, int iOffsetY, int iRank)int iX, iY, iJ;if ( y = -1 ) return;/如果方块平移过则擦除原来的方块位置if ( iOffsetX != 0 | iOffsetY != 0 )iX = x + Tetrisij.a.x - iOffsetX;iY = y + Tetrisij.a.y - iOffsetY;PatBlt(hd

32、c,20+iX*20,40+iY*20,20,20,BLACKNESS);iX = x + Tetrisij.b.x - iOffsetX;iY = y + Tetrisij.b.y - iOffsetY;PatBlt(hdc,20+iX*20,40+iY*20,20,20,BLACKNESS);iX = x + Tetrisij.c.x - iOffsetX;iY = y + Tetrisij.c.y - iOffsetY;PatBlt(hdc,20+iX*20,40+iY*20,20,20,BLACKNESS);iX = x + Tetrisij.d.x - iOffsetX;iY = y

33、 + Tetrisij.d.y - iOffsetY;PatBlt(hdc,20+iX*20,40+iY*20,20,20,BLACKNESS);/如果方块旋转过则擦除原来的方块位置if ( iRank != 0 )iJ = (j=0) ? 3 : j-1;iX = x + TetrisiiJ.a.x;iY = y + TetrisiiJ.a.y;PatBlt(hdc,20+iX*20,40+iY*20,20,20,BLACKNESS);iX = x + TetrisiiJ.b.x;iY = y + TetrisiiJ.b.y;PatBlt(hdc,20+iX*20,40+iY*20,20,2

34、0,BLACKNESS);iX = x + TetrisiiJ.c.x;iY = y + TetrisiiJ.c.y;PatBlt(hdc,20+iX*20,40+iY*20,20,20,BLACKNESS);iX = x + TetrisiiJ.d.x;iY = y + TetrisiiJ.d.y;PatBlt(hdc,20+iX*20,40+iY*20,20,20,BLACKNESS);/绘制新位置方块SelectObject(hDcBitmap,LoadBitmap(hInst,MAKEINTRESOURCE(120+c);iX = x + Tetrisij.a.x;iY = y + T

35、etrisij.a.y;BitBlt(hdc,20+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);iX = x + Tetrisij.b.x;iY = y + Tetrisij.b.y;BitBlt(hdc,20+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);iX = x + Tetrisij.c.x;iY = y + Tetrisij.c.y;BitBlt(hdc,20+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);iX = x + Tetrisij.d.x;iY =

36、 y + Tetrisij.d.y;BitBlt(hdc,20+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);return;/绘制预览区void DrawNext(HDC hdc)RECTrc;intiX, iY;rc.left = 240; rc.top = 40;rc.right = 340; rc.bottom = 140;FillRect(hdc,&rc,CreateSolidBrush(RGB(0,0,0);/绘制预览方块SelectObject(hDcBitmap,LoadBitmap(hInst,MAKEINTRESOURCE(120+c

37、c);iX = 1 + Tetrisiijj.a.x; iY = 1 + Tetrisiijj.a.y;BitBlt(hdc,240+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);iX = 1 + Tetrisiijj.b.x; iY = 1 + Tetrisiijj.b.y;BitBlt(hdc,240+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);iX = 1 + Tetrisiijj.c.x; iY = 1 + Tetrisiijj.c.y;BitBlt(hdc,240+iX*20,40+iY*20,20,20,hDcBitmap,0,0,SRCCOPY);iX = 1 + Tetrisiijj.d.x; iY = 1 + Tetrisiijj.d.y;BitBlt(hdc,240+iX*20,40+iY*20,20,20,hDcBitmap,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论