安卓大作业-贪吃蛇_第1页
安卓大作业-贪吃蛇_第2页
安卓大作业-贪吃蛇_第3页
安卓大作业-贪吃蛇_第4页
安卓大作业-贪吃蛇_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

实训报告实训工程名称基于安卓贪吃蛇游戏的开发与测试二级学院信息工程学院专业班级11级计科〔2〕班姓名操玮康、方刚、聂顺涛、肖洋学号1142151201、05、17、27日期工程名称基于安卓贪吃蛇游戏的开发与测试地点教13605报告内容贪吃蛇游戏开发,首先它可以为大家提供一种当前比拟流行的休闲小游戏。贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着很多人。在这次的实验中我们介绍了安卓的背景还有贪吃蛇的背景。对我们的游戏进行了各种需求的分析,然后对我们的游戏进行设计,设计分成各个模块。设计完了之后就是实现了,通过Eclipse进行编写程序设计完成,最后就是我们的工程测试局部,经过测试,最终成功的完成了游戏的设计。教师评语成绩:教师签名:摘要Google公司2007年11月5日发布Android平台

——

一款包括操作系统〔基于Linux内核〕、中间件和关键应用的平台,并组建了开放联盟(OpenHandsetAlliance),包括Google、中国移T-Mobile、宏达电、高通、摩托罗拉等领军企业。本课题是利用java语言在Android平台上进行游戏的开发,由于本人知识的有限,以及客观条件的限制,本人打算开发一个单机版的游戏。后来得知这个小小的游戏是nokia当年很成功的一款游戏,许多人都玩过,也很喜欢。现在这款游戏的版本已经开展到第三版了,生产厂商继续开发这个游戏,看来这个游戏还是有很大的市场的。于是,我决定利用自己大学所学的知识,自己在指导老师的帮助下,独立开发这个小游戏。本文首先详细介绍了java的一些根本的知识点,在此根底上引出了Android,介绍了Android的根底以及其特点,然后介绍了一下Android将来的一些前景和开展。重点说明了这个贪吃蛇程序所用到的一些类和控件。介绍了这些类的一般的使用方法,以及本程序是如何使用这些类来进行游戏的开发的。关键词:Android系统;贪食蛇游戏目录1.绪论4开发背景4安卓系统简介4游戏简介4开发目的及意义4开发环境及工具5游戏系统开发平台及搭建52.需求分析7游戏界面分析7游戏角色分析7游戏控制分析7可行性分析73.总体设计8贪吃蛇流程图8总设计模块的划分9主要界面93.2.2游戏控制模块94.详细实现104.1游戏窗口Snake类104.2生成方块TileView类114.3游戏实体SnakeView类135.测试1515156.结论20附录22安卓系统简介安卓系统作为新兴的操作系统,在问世不久,变风行全球,占领操作系统里很大的市场份额,与苹果,诺基亚三分天下,Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的操作系统。早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层〔softwarestack,又名软件叠层〕的架构,主要分为三局部。底层Linux内核只提供根本功能,其他的应用软件那么由各公司自行开发,局部程序以Java编写。游戏简介1976年,Gremlin平台推出了一款经典街机游戏Blockade。游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌起围栏。角色只能向左、右方向90度转弯,游戏目标保证让对方先撞上屏幕或围栏。听起来有点复杂?其实就是下面这个样子:

根本上就是两条每走一步都会长大的贪吃蛇比谁后完蛋,玩家要做的就是防止撞上障碍物和越来越长的身体。更多照片、视频可以看GamesDBase的介绍。

Blockade很受欢送,类似的游戏先后出现在Atari2600、TRS-80、苹果2等早期游戏机、计算机上。但真正让这种游戏形式红遍全球的还是21年后随诺基亚走向世界的贪吃蛇游戏——Snake。贪吃蛇游戏是一款老牌的游戏,同时也是一款比拟需要耐心地游戏。贪吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越长。只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。玩“贪吃蛇游戏〞,难度最大的不是蛇长得很长的时候,而是开始的时候。那时蛇身很短,看上去难度不大,却最容易死掉,因为把玩一条小蛇让人容易走神,失去耐心。通过本次课程设计,了解android软件的开发过程,熟悉并掌握JAVA语言,HTML.程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇目的本程序实现主要技巧在于java语言的应用。目的在于提高编程的水平。采用eclipse开发工具,在windowsxp下进行,基于安卓操作系统。环境搭建:1.JDK安装2.Eclipse安装3.AndroidSDK安装JDK和Eclipse:JDK是Sun公司针对java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的javaSDK。JDK是整个java的核心。包括运行环境Java工具和Java根底类库。JDK是学好Java的第一步。安装Eclipse的开发环境需要JDK的支持,如果没有JDK,那么启动Eclipse时会报告错误。在windows上安装JDK非常简单首先在Sun官网上下载,按照默认路径进行安装。安装完成之后,可以在检查JDK是否安装成功。翻开cmd窗口,输入java–version查看JDK的版本信息。出现类似下面的画面表示安装成功了:图JDK测试elipse如果你还没有Eclipse的话,从官网上下载EclipseIDEforJavaDevelopers解压之后即可使用。AndroidSDKAndroidSDK提供了在windows平台上的开发安卓应用程序的开发组件,也就是说,不管读者使用什么样的平台都可以开发出安卓平台的应用软件,其中包含了安卓平台上开发移动应用的各种工具集。它不仅包括了安卓模拟器和用于Eclipse的安卓开发工具插件〔ADT〕,而且包括了各种用来调试,打包盒在模拟器上安装应用的工具。安卓主要是以java语言为根底,用户可以使用java语言来开发安卓平台上的软件应用。通过SDK提供的一些工具将其打包成安卓平台使用的apk文件,然后在使用SDK中的模拟器〔Emulator)来模拟和测试软件在安卓平台运行情况和效果。安装安卓的SDK,安装好JDK和Eclipse后,翻开EclipseIDE。依次单击Menu项中的windows->AndroidSDKManager项,进入AndroidSDKManager界面选择Tool和需要的Android版本项进行更新安装。ADTAndroid为Eclipse定制了一个插件,及ADT〔AndroidDevelopmentTools〕,目的是为用户提供一个强大的综合环境用于开发Android应用程序,ADT扩展了Eclipse的功能,可以让用户快速的建立Android工程,创立应用程序界面,在基于AndroidAPI的根底上添加组件,以及用SDK工具集调试应用程序,甚至导出签名〔或未签名〕的APKs以便发行应用程序。安装AndroidDevelopmentToolplug-in,翻开EclipseIDE。依次单击Menu项中的Help->SoftwareUpdate项在游戏界面中,以坐标的形式对整体界面进行划分,将界面划分为许多个小方格,还应设计蛇的样式,苹果的样式和墙的样式,在蛇吃到苹果后的样式,以及游戏按什么键开始。设置游戏贪吃蛇初始时由固定个小矩形块组成,并且,游戏中,要随机出现由单个矩形块构成的苹果,并且在设置苹果的时候,还要设置,不能使将要出现的苹果出现在蛇的身体之下,在蛇吃到苹果的时候,要将蛇的身体加长。此外,要判定游戏成功与失败的条件,当蛇的头和尾相撞或者蛇的头部撞到了墙上,那么游戏失败。另外蛇的移动原理,由外部按键设置监听控制蛇头的移动方向,在方向的指引下进行移动,蛇及苹果的位置都是由坐标数组确定的,苹果的位置也是随机产生的蛇的移动原理是后一矩形块覆盖前一个矩形块。当一个苹果被吃掉的时候,要自动生成并显示下一个苹果的位置。这些都是在设计过程中需要实现的。游戏中需要通过按键对蛇的移动方位进行控制,共需要设置四个方位,分别是“东〞“西〞“南〞“北〞,在按键上用“上〞“下〞“左〞“右〞,按键与执行局部便涉及到监听,通过监听指示蛇的运动,此外,要设置蛇移动是的默认方向为“上〞,设计过程中还应注意,蛇的移动只能是90度偏转,不能进行180度偏转。可行性分析贪吃蛇游戏是一种简单的群众的游戏,自从计算机实现以来,深受广阔电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。

贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以到达移动的效果。而在吃到食物的时候,那么只需把食物入队即可。实现贪吃蛇的根本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡。本次设计我将主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。由于Java主要用于网络应用程序开发,因此对平安性有较高的要求。如果没有平安保证,用户从网络下载程序执行就非常危险。Java通过自己的平安机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏3.1贪吃蛇流程图3.2总设计模块的划分游戏总设计模块划分为游戏主要界面模块、游戏控制模块。主要界面游戏主界面模块主要是指游戏的框图,其包括一下内容:1、游戏界面的边界,即游戏中的墙;2、游戏中蛇的构成,以及苹果的构成;3.2.2游戏控制模块游戏开始控制:我们的程序是使用点击这里开始启动游戏后会有一个初始菜单界面,游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。在程序中我们重新建act来控制游戏的开始,使游戏的开始界美观。4.详细实现这个是,是游戏的文件总目录,如下图图4.1游戏文件目录4.1游戏窗口Snake类游戏的开始:oncreate此外的亮点是:setContentView(R.layout.snake_layout);设置窗口的布局文件,这里的snake_layout使用了自定义资源标签的方式,由于Android内部的R.资源不包含SnakeView类,所以我们必须写清楚Package,比方com.exmple.android.snake.SnakeView然后和其他控件使用一样,都是一个id然后宽度、高度、以及自定义的标签tileSize〔尾巴长度〕,如下:<android:id="@+id/snake"android:layout_width="fill_parent"android:layout_height="fill_parent"tileSize="12"/>onPause:关于这点,大家可以参考下在blog中关于active生命周期在玩游戏过程中,如果有来电或是其它事件中断,这时应该把当前状态保存。以便返回时,还可以继续玩游戏。这就使用onSaveInstanceState实现保存当前状态。图4.2游戏窗口4.2生成方块TileView类TileView,从名称上不难看出这是一个方砖类,就是生成一个方块。TileView使用了Android平台的显示基类View,View类是直接从java.lang.Object派生出来的,是各种控件比方TextView、EditView的基类,当然包括我们的窗口Activity类,这些在SDK文档中都说的比拟清楚。

这里定义了5个int型全局的变量,分别是方砖的数量mTileSize;方砖水平x防线的数量mXTileCount;以及竖直y方向上的方砖数量mYTileCount,下面是一个相对偏移位置mXOffset和mYOffset;这里android主要让要大家了解如何自定义View在Android开发中,在一个View类中主要是重写onSizeChanged方法来控制改变局部,以及onDraw实现画布的修改,实现的代码如下:publicTileView(Contextcontext,AttributeSetattrs){super(context,attrs);ributes(attrs, R.styleable.TileView);mTileSize=a.getInt(R.styleable.TileView_tileSize,12); a.recycle(); }publicvoidresetTiles(inttilecount){mTileArray=newBitmap[tilecount]; }@OverrideprotectedvoidonSizeChanged(intw,inth,intoldw,intoldh){mXTileCount=(int)Math.floor(w/mTileSize);mYTileCount=(int)Math.floor(h/mTileSize);mXOffset=((w-(mTileSize*mXTileCount))/2);mYOffset=((h-(mTileSize*mYTileCount))/2);mTileGrid=newint[mXTileCount][mYTileCount]; clearTiles(); }

我们自定义的TileView类需要自己添加一个构造方法,根据需要,我们还重载了一种包含样式的方法,这里大家可以多看下Gallery控件的实现,就好理解了,下面是根本框架。

publicTileView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}

publicTileView(Contextcontext,AttributeSetattrs){super(context,attrs);}

在贪食蛇游戏中我们知道Snake是移动的,所以参加了一个去除显示的clearTiles方法,通过一个二维数组保存一个gird网格型的运动轨迹,下一次我们将会讲解android贪食蛇的游戏逻辑和完整的关联拼接实现。代码如下:publicvoidclearTiles(){for(intx=0;x<mXTileCount;x++){for(inty=0;y<mYTileCount;y++){ setTile(0,x,y); } } }publicvoidsetTile(inttileindex,intx,inty){mTileGrid[x][y]=tileindex; }具体的实现如下图。图4.3蛇身和点及其位置4.3游戏实体SnakeView类在这个类中实现的游戏的实体,从游戏需求的角色,这个游戏包括了如下方面:随机产生小方块,小方块这里是复数,当然是是大于1个苹果,所以代码中产生了两个苹果。游戏状态管理画蛇,view的更新吃掉小方块后小蛇状态的变化画围墙SnakeView定义类:intmMode=READY;publicstaticfinalintPAUSE=0;publicstaticfinalintREADY=1;publicstaticfinalintRUNNING=2;publicstaticfinalintLOSE=3;分别表示准备开始、运行状态、游戏结束。如图4.4是游戏开始状态。图4.4游戏开始如图4.5是游戏运行状态。图4.5游戏运行状态如图4.6是游戏的结束状态。图4.6游戏结束通过以下的测试用例进行对游戏各功能模块的测试并加以修改,如表5.1所示。测试编号测试输入期望结果实际结果001测试点击游戏开始后的状态游戏开始,进入游戏开始界面游戏开始,进入游戏开始界面002测试点击上方向键后的状态贪吃蛇会向上方转弯贪吃蛇会向上方转弯003测试点击下方向键后的状态贪吃蛇会向下方转弯贪吃蛇会向下方转弯004测试点击左方向键后的状态贪吃蛇会向左方转弯贪吃蛇会向左方转弯005测试点击右方向键后的状态贪吃蛇会向右方转弯贪吃蛇会向右方转弯006测试贪吃蛇吃到果实后的状态贪吃蛇会变长贪吃蛇蛇会变长。007测试贪吃蛇撞墙后会怎样游戏结束,显示游戏结束界面游戏结束,显示游戏结束界面表5.1测试用例表1.测试点击游戏开始后的状态,点击屏幕后开始游戏,测试成功,如图5.2所示。图5.2游戏开始2.测试点击上方向键后后状态,图5.3贪吃蛇向上转弯3.测试点击下方向键后的状态,贪吃蛇会向下方转弯,测试成功。如图5.4所示。图5.4,贪吃蛇向下转弯5.测试点击左方向键后的状态,贪吃蛇会向左方转弯,测试成功。如图5.5所示。图5.5贪吃蛇向右6.测试点击右方向键后的状态,贪吃蛇会向右方转弯,测试成功。如图5.6所示。图5.6贪吃蛇向右转弯7.测试贪吃蛇吃到果实后的状态,贪吃蛇会变长,测试成功,如图5.7所示。图5.7贪吃蛇变长8.测试贪吃蛇撞墙后会游戏结束且显示吃掉果实数,测试成功,如图5.8所示。图5.8贪吃蛇撞墙,游戏结束回忆这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的缺乏,有些模块做得不是很好,界面的设计及整体的布局还比拟简单,没有突出特色出来,这也可能是我这个系统的缺乏之处,在这里也恳请老师能够对我的作品指明缺乏并加以改正。总之,在这一次的课程设计过程中,我查阅了大量的资料,对Java有了一点初步的认识,对于软件工程这些辅助性的教材也稳固了不少,为我这次的课设提供了很大的帮助,锻炼了我的能力让我掌握了一门新的程序设计语言:java语言,系统地学习了数据库方面的知识,并更进一步提高了我在程序设计、调试方面的技巧。更重要的是,它还让我认识到了自己的缺乏,在编程方面,我仅仅是刚刚入门而已,以后的道路任重道远,需要我不断的丰富自己、充实自己,这样才能在程序设计方面有所收获。

参考文献[1]沈泽刚,秦玉平.Java语言程序设计[M].清华大学出版社,2023[2]陈昊鹏[同译者作品].Java编程思想(第4版).机械工业出版社,2007[3]耿祥义,张跃平.Java实用教程〔第三版〕.清华大学出版社,2006[4]马占欣,李亚,陆玉昌.用遗传算法解决博弈问题.河南科学,2007,25(2):273-277。北大学学报,2005,126(10):949-952.。[5]王赠凯,吕维先.机器博弈搜索技术分析.软件导刊,2007,2:26-27。[6]张从明、马京成.网络教学设计.第四军医大学出版社,2004。附录packagecom.xmobileapp.Snake;importandroid.app.Activity;importandroid.graphics.Color;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.View;importandroid.view.Window;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ImageButton;importandroid.widget.TextView;publicclassSnakeextendsActivityimplementsOnClickListener{ privatefinalstaticintPLAY=1; privatefinalstaticintLEFT=2; privatefinalstaticintRIGHT=3; privatefinalstaticintUP=4; privatefinalstaticintDOWN=5; privateSnakeViewmSnakeView; privatestaticStringICICLE_KEY="snake-view"; privateButtonplay; privateImageButtonleft; privateImageButtonright; privateImageButtonup; privateImageButtondown; privateUpdateStatusupdateStatus; privateHandlerhandler; protectedstaticfinalintGUINOTIFIER=0x1234; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.snake_layout); mSnakeView=(SnakeView)findViewById(R.id.snake); mSnakeView.setTextView((TextView)findViewById(R.id.text)); play=(Button)findViewById(R.id.play); play.setId(PLAY); play.setOnClickListener(this); play.setBackgroundColor(Color.argb(0,0,255,0)); left=(ImageButton)findViewById(R.id.left); left.setId(LEFT); left.setOnClickListener(this); left.setBackgroundColor(Color.argb(1,1,255,1)); left.setVisibility(View.GONE); right=(ImageButton)findViewById(R.id.right); right.setId(RIGHT); right.setOnClickListener(this); right.setBackgroundColor(Color.argb(1,1,255,1)); right.setVisibility(View.GONE); up=(ImageButton)findViewById(R.id.up); up.setId(UP); up.setOnClickListener(this); up.setBackgroundColor(Color.argb(1,1,255,1)); up.setVisibility(View.GONE); down=(ImageButton)findViewById(R.id.down); down.setId(DOWN); down.setOnClickListener(this); down.setBackgroundColor(Color.argb(1,1,255,1)); down.setVisibility(View.GONE); if(savedInstanceState==null){ mSnakeView.setMode(mSnakeView.READY); }else{ Bundlemap=savedInstanceState.getBundle(ICICLE_KEY); if(map!=null){ mSnakeView.restoreState(map); }else{ mSnakeView.setMode(SnakeView.PAUSE); } } handler=newHandler(){ publicvoidhandleMessage(Messagemsg){ switch(msg.what){ caseSnake.GUINOTIFIER: play.setVisibility(View.VISIBLE); left.setVisibility(View.GONE); right.setVisibility(View.GONE); up.setVisibility(View.GONE); down.setVisibility(View.GONE); break; } super.handleMessage(msg); } }; } @Override protectedvoidonPause(){ super.onPause(); mSnakeView.setMode(SnakeView.PAUSE); } @Override publicvoidonSaveInstanceState(BundleoutState){ outState.putBundle(ICICLE_KEY,mSnakeView.saveState()); } publicvoidonClick(Viewv){ switch(v.getId()){ casePLAY: play.setVisibility(View.GONE); left.setVisibility(View.VISIBLE); right.setVisibility(View.VISIBLE); up.setVisibility(View.VISIBLE); down.setVisibility(View.VISIBLE); |mSnakeView.mMode==mSnakeView.LOSE){ mSnakeView.initNewGame(); mSnakeView.setMode(mSnakeView.RUNNING); mSnakeView.update(); updateStatus=newUpdateStatus(); updateStatus.start(); break; } if(mSnakeView.mMode==mSnakeView.PAUSE){ mSnakeView.setMode(mSnakeView.RUNNING); mSnakeView.update(); break; } if(mSnakeView.mDirection!=mSnakeView.SOUTH){ mSnakeView.mNextDirection=mSnakeView.NORTH; break; } break; caseLEFT: if(mSnakeView.mDirection!=mSnakeView.EAST){ mSnakeView.mNextDirection=mSnakeView.WEST; } break; caseRIGHT: if(mSnakeView.mDirection!=mSnakeView.WEST){ mSnakeView.mNextDirection=mSnakeView.EAST; } break; caseUP: if(mSnakeView.mDirection!=mSnakeView.SOUTH){ mSnakeView.mNextDirection=mSnakeView.NORTH; } break; caseDOWN: if(mSnakeView.mDirection!=mSnakeView.NORTH){ mSnakeView.mNextDirection=mSnakeView.SOUTH; } break; default: break; } } classUpdateStatusextendsThread{ @Override publicvoidrun(){ super.run(); while(true){ if(mSnakeView.mMode==mSnakeView.LOSE){ Messagem=newMessage(); m.what=Snake.GUINOTIFIER; Snake.this.handler.sendMessage(m); break; } try{ Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } } }}<?xmlversion="1.0"encoding="utf-8"?><FrameLayoutxmlns:android="://schemas.android/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><android:id="@+id/snake"android:layout_width="fill_parent"android:layout_height="fill_parent"tileSize="12"android:background="@color/teneight"/><RelativeLayoutandroid:layout_width="fill_pa

温馨提示

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

最新文档

评论

0/150

提交评论