Linux下基于SDL图形库的贪吃蛇游戏_第1页
Linux下基于SDL图形库的贪吃蛇游戏_第2页
Linux下基于SDL图形库的贪吃蛇游戏_第3页
Linux下基于SDL图形库的贪吃蛇游戏_第4页
Linux下基于SDL图形库的贪吃蛇游戏_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

浙江大学硕士学位论文 序言 中文论文题目 在中文论文题目 在 LINUX 平台下实现贪吃蛇平台下实现贪吃蛇 英文论文题目 英文论文题目 Game of Snake under Linux 姓名及手机号 姓名及手机号 学学 号 号 指指 导导 教教 师师 浙江大学硕士学位论文 11 个人简 历 1 在在 LINUX 平台下实现贪吃蛇平台下实现贪吃蛇 摘要 摘要 本文主要展示了在 LINUX 平台下实现贪吃蛇 主要应用了双向链表 二维结构数组等数据结构 采用了 SDL 图形库 建模 设计算法完毕之后 在 Linux 下进行了运行和调试 关键词 关键词 贪吃蛇 链表 苹果 SDL Game of Snake under Linux AbstractAbstract This paper mainly shows the game of snake under Linux The main data structures are double linked list and two dimensional array and I used the SDL to print the snake and apple After modeling and completed the codes I run the game under Linux KeyKey WordsWords snake linked list apple SDL 1 1 引言引言 贪吃蛇是一款家喻户晓的小游戏 受到众多青少年的喜爱 在手机上 在贪吃蛇是一款家喻户晓的小游戏 受到众多青少年的喜爱 在手机上 在 电脑上 我们都可以方便的下载到这款小游戏 而在电脑上 我们都可以方便的下载到这款小游戏 而在 linuxlinux 系统下 一样可以系统下 一样可以 利用利用 GNUGNU gccgcc 编译器 使用编译器 使用 C C 语言编程 调用语言编程 调用 linuxlinux 自带的图形库函数来完成自带的图形库函数来完成 贪吃蛇的制作 我在制作本程序时 没有参考任何相关代码 完全独立设计 贪吃蛇的制作 我在制作本程序时 没有参考任何相关代码 完全独立设计 2 2 建模与算法建模与算法 问题一 贪吃蛇的表示问题一 贪吃蛇的表示 注意到贪吃蛇是一条蛇 而且它的身体的长度是一节一节的 每一节身体注意到贪吃蛇是一条蛇 而且它的身体的长度是一节一节的 每一节身体 都应当存储坐标与其他数据 显然我应当使用一个链表这个数据结构来处理贪都应当存储坐标与其他数据 显然我应当使用一个链表这个数据结构来处理贪 吃蛇的主要程序结构 吃蛇的主要程序结构 链表结构如下图所示 链表结构如下图所示 NILNIL data1data1 nextnext prevprev data2data2 nextnext prevprev data3data3 NILNIL head 浙江大学硕士学位论文 10 附录 2 为了起到更好的遍历和数据读取的效果 我采取了双向链表的方式 允许为了起到更好的遍历和数据读取的效果 我采取了双向链表的方式 允许 让后一结点方便快捷地获取前结点的相关信息 头的让后一结点方便快捷地获取前结点的相关信息 头的 prevprev 指针和尾的指针和尾的 nextnext 指指 针被设置为针被设置为 NILNIL 初始的蛇结构仅有两段身体 即头和尾 初始的蛇结构仅有两段身体 即头和尾 其中 这个双向链表的其中 这个双向链表的 datadata 数据有三个 一个是当前方块在对应可活动区数据有三个 一个是当前方块在对应可活动区 域的的相对坐标域的的相对坐标 x x 另一个是坐标 另一个是坐标 y y 有了这个 有了这个 x x 和和 y y 当此身体节点方块移动 当此身体节点方块移动 以后 我们可以根据其以后 我们可以根据其 x x 和和 y y 的值画出相应的蛇结构 另外一个数据储存了的值画出相应的蛇结构 另外一个数据储存了 prevprev 结点在之前移动过的方向 这样 当蛇头朝某个方向前进一步时 后面的结点在之前移动过的方向 这样 当蛇头朝某个方向前进一步时 后面的 身体结点就可以根据前一结点移动过的方向来移动自己 有了这三个数据 我身体结点就可以根据前一结点移动过的方向来移动自己 有了这三个数据 我 就可以呈现整条蛇头改变方向 后面的身体移动到就可以呈现整条蛇头改变方向 后面的身体移动到 prevprev 结点的位置的动态效果结点的位置的动态效果 了 了 问题二 墙体和某方块已被占据的表示问题二 墙体和某方块已被占据的表示 这是贪吃蛇结构的又一个难点 由于双向链表仅仅表示了蛇的身体结构 这是贪吃蛇结构的又一个难点 由于双向链表仅仅表示了蛇的身体结构 仅仅通过蛇的坐标表示 程序是无法获取四周的墙壁信息以及是否撞到了自己仅仅通过蛇的坐标表示 程序是无法获取四周的墙壁信息以及是否撞到了自己 的身体这些信息的 的身体这些信息的 由于整个蛇体可活动区域被分成了块状区域 蛇的着色和移动都是方块化由于整个蛇体可活动区域被分成了块状区域 蛇的着色和移动都是方块化 的 那么很容易就可以分析出来整个区域类似于一个表格 可以用一个二维数的 那么很容易就可以分析出来整个区域类似于一个表格 可以用一个二维数 组来定义每个方块是否被蛇或者墙占据 如果某个方块在二维数组上对应的值组来定义每个方块是否被蛇或者墙占据 如果某个方块在二维数组上对应的值 是是0 0 那么说明当前方块为空 贪吃蛇可以移动到此方块上来 如果对应的值是 那么说明当前方块为空 贪吃蛇可以移动到此方块上来 如果对应的值是 1 1 那么说明当前方块是墙壁或者是贪吃蛇自己的身体 若蛇头移动到了这个位 那么说明当前方块是墙壁或者是贪吃蛇自己的身体 若蛇头移动到了这个位 置则游戏失败 置则游戏失败 问题三 苹果的设置问题三 苹果的设置 众所周知 贪吃蛇通过吃苹果来增加自己的身体长度 那么就会产生一些众所周知 贪吃蛇通过吃苹果来增加自己的身体长度 那么就会产生一些 问题 首先是苹果如何放置 因为我们已经通过二维数组将蛇的可活动区域划问题 首先是苹果如何放置 因为我们已经通过二维数组将蛇的可活动区域划 分成了表格的形状 因此我们可以调用随机函数 在可活动区域中随机选择一分成了表格的形状 因此我们可以调用随机函数 在可活动区域中随机选择一 个位置来放置苹果 但是如果这样放置的话 可能会出现苹果放在了蛇的身体个位置来放置苹果 但是如果这样放置的话 可能会出现苹果放在了蛇的身体 位置 或者放在了墙上 因此 需要进行一个循环判定 如果数组的值是位置 或者放在了墙上 因此 需要进行一个循环判定 如果数组的值是1 1说明说明 不可放置苹果 重新获取随机数 直到选择了可放置的位置 不可放置苹果 重新获取随机数 直到选择了可放置的位置 但是 当蛇头遇到苹果的时候 如何判定贪吃蛇吃到了呢 这个问题有多但是 当蛇头遇到苹果的时候 如何判定贪吃蛇吃到了呢 这个问题有多 种解决方案 种解决方案 1 1 可以令苹果的坐标参数为全局变量 然后当蛇头移动时 在某个函可以令苹果的坐标参数为全局变量 然后当蛇头移动时 在某个函 数里判断蛇头的相对坐标和苹果的坐标是否相等 如果相等则可以数里判断蛇头的相对坐标和苹果的坐标是否相等 如果相等则可以 扩张链表 扩张链表 浙江大学硕士学位论文 11 个人简 历 3 2 2 可以将二维数组中的每个元素都设置多个数据 即定义一个结构 可以将二维数组中的每个元素都设置多个数据 即定义一个结构 多设置一个变量 该变量默认的值为多设置一个变量 该变量默认的值为0 0 当有苹果放在二维数组的对 当有苹果放在二维数组的对 应位置时 该值更改为应位置时 该值更改为1 1 当苹果被贪吃蛇吃掉的时候 更改为 当苹果被贪吃蛇吃掉的时候 更改为0 0 3 3 不改变二维数组的数据结构 但是把二维数组里苹果对应的坐标的不改变二维数组的数据结构 但是把二维数组里苹果对应的坐标的 值更改为值更改为2 2 即它不是墙也不是可移动区域 而是苹果 当蛇头移动 即它不是墙也不是可移动区域 而是苹果 当蛇头移动 到该位置时候 若发现对应二维数组的值是到该位置时候 若发现对应二维数组的值是2 2 则吃到了苹果 则吃到了苹果 在本程序里 我选择了第二种方案 将二维数组定义为二维结构数组 在本程序里 我选择了第二种方案 将二维数组定义为二维结构数组 问题四 算法设计问题四 算法设计 数据结构设计完毕 我们就开始了算法的设计 本程序中 需要实现的功数据结构设计完毕 我们就开始了算法的设计 本程序中 需要实现的功 能有 游戏界面的设计 贪吃蛇身体结构的展现 苹果的设置 贪吃蛇的移动 能有 游戏界面的设计 贪吃蛇身体结构的展现 苹果的设置 贪吃蛇的移动 移动速度的更改等 移动速度的更改等 1 1 游戏界面的设计游戏界面的设计 由于是在由于是在 linuxlinux 下完成 因此我将会用到下完成 因此我将会用到 linuxlinux 的图形库函数 来完成贪的图形库函数 来完成贪 吃蛇可活动区域的建立 游戏名称 分数界面和一些提示的展现 吃蛇可活动区域的建立 游戏名称 分数界面和一些提示的展现 首先 我选择的视频模式是首先 我选择的视频模式是640 x480 x16640 x480 x16位色 然后 我在屏幕上选择了一位色 然后 我在屏幕上选择了一 块块400 x400400 x400的区域用来当做贪吃蛇的可活动区域 在这块区域的边界处 我设置的区域用来当做贪吃蛇的可活动区域 在这块区域的边界处 我设置 了一个矩形框 用来提醒玩家这里是墙 不可碰撞 这了一个矩形框 用来提醒玩家这里是墙 不可碰撞 这400 x400400 x400的区域被的区域被16001600个个 小矩形所分割 每个矩形的大小为小矩形所分割 每个矩形的大小为40 x4040 x40 以横向为 以横向为 x x 轴 纵向为轴 纵向为 y y 轴 就可以轴 就可以 看成一个看成一个40 x4040 x40的二维数组 每个数组对应位置的坐标都是的二维数组 每个数组对应位置的坐标都是0 0 但是由于在可活 但是由于在可活 动区域外还有一堵墙存在 因此二维数组需要被设置为动区域外还有一堵墙存在 因此二维数组需要被设置为42x4242x42 最外围一圈的标 最外围一圈的标 记值为记值为1 1 而在剩下的空白处 我显示了一些标题文字 按键提醒文字 整个游戏界而在剩下的空白处 我显示了一些标题文字 按键提醒文字 整个游戏界 面就初步建立了 面就初步建立了 2 2 贪吃蛇身体结构的展现贪吃蛇身体结构的展现 在数据结构的建立中 我将贪吃蛇设置为一个双向链表 而双向链表里存在数据结构的建立中 我将贪吃蛇设置为一个双向链表 而双向链表里存 储的数据 就是贪吃蛇的身体在储的数据 就是贪吃蛇的身体在40 x4040 x40的区域内 每个结点的相对坐标 范围为的区域内 每个结点的相对坐标 范围为 0 00 0 到 到 40 4040 40 初始的蛇只有头尾 其坐标分别为 初始的蛇只有头尾 其坐标分别为 20 2020 20 和 和 19 2019 20 只要将这两个点转化为绝对坐标 把队应的只要将这两个点转化为绝对坐标 把队应的10 1010 10的小矩形区域修改成一定的颜的小矩形区域修改成一定的颜 色 就可以画出一条蛇 当蛇的身体移动或者变长的时候 每个身体节点的对色 就可以画出一条蛇 当蛇的身体移动或者变长的时候 每个身体节点的对 应的坐标值也相应改变 再重新打印这条蛇即可 应的坐标值也相应改变 再重新打印这条蛇即可 3 3 苹果的设置苹果的设置 浙江大学硕士学位论文 10 附录 4 前文已经提到 只需要通过前文已经提到 只需要通过 randrand 函数 获取两个函数 获取两个0 400 40的随机数的值 分别的随机数的值 分别 对应苹果的对应苹果的 x x 坐标和坐标和 y y 坐标 并通过一定的循环避免苹果设置在蛇的身体上或坐标 并通过一定的循环避免苹果设置在蛇的身体上或 者墙上即可 者墙上即可 4 4 贪吃蛇的移动贪吃蛇的移动 在程序中 我用一个在程序中 我用一个 snakesnake move move 函数来实现蛇的移动 而这个功能的函数来实现蛇的移动 而这个功能的 实现也是整个程序的核心 实现也是整个程序的核心 在双向链表数据结构中 我定义了一个重要的变量在双向链表数据结构中 我定义了一个重要的变量 DirDir 来表示本方块的移来表示本方块的移 动方向 比如程序从键盘中断读入动方向 比如程序从键盘中断读入 RIGHTRIGHT 按键之后 贪吃蛇向右移动一步 那按键之后 贪吃蛇向右移动一步 那 么么 DirDir 的值就会被赋为的值就会被赋为 RIGHTRIGHT 其中 其中 RIGHTRIGHT 是键盘上向右键的是键盘上向右键的 ACSIIACSII 码值 已码值 已 经过宏定义 之后 当蛇头移动一步之后 蛇身除蛇头以外的方块都会读取经过宏定义 之后 当蛇头移动一步之后 蛇身除蛇头以外的方块都会读取 prevprev 结点的结点的 DirDir 值 并移动到值 并移动到 prevprev 结点的位置 对于蛇头来说 有了这个结点的位置 对于蛇头来说 有了这个 DirDir 变量之后 在键盘没有输入任何按键时 它会读取自己的变量之后 在键盘没有输入任何按键时 它会读取自己的 DirDir 的值并作出相应的值并作出相应 的移动 相当于不更改方向 直线前进 知道键盘输入了某个方向 它才会作的移动 相当于不更改方向 直线前进 知道键盘输入了某个方向 它才会作 出相应动作并改变出相应动作并改变 DirDir 贪吃蛇的移动同样有许多方法 更加简便的一种是只需要将蛇的最后一个贪吃蛇的移动同样有许多方法 更加简便的一种是只需要将蛇的最后一个 结点移动到蛇头的前一个结点 并使它成为头结点 当然 前一个方法更加直结点移动到蛇头的前一个结点 并使它成为头结点 当然 前一个方法更加直 观 在算法上也更加有观 在算法上也更加有 蛇蛇 的效果 因此采用了前者 的效果 因此采用了前者 还有一个贪吃蛇移动的小问题 注意到贪吃蛇是不可以向后走的 即连续还有一个贪吃蛇移动的小问题 注意到贪吃蛇是不可以向后走的 即连续 两次的移动方向不可以相反 否则蛇头就会沿着自己的身体前进 直接造成两次的移动方向不可以相反 否则蛇头就会沿着自己的身体前进 直接造成 撞墙撞墙 从而 从而 GameGame OverOver 而这是我们不愿意看到的 因此要考虑避开这种情 而这是我们不愿意看到的 因此要考虑避开这种情 况 况 而贪吃蛇移动时 移速的改变可以依靠一个全局变量而贪吃蛇移动时 移速的改变可以依靠一个全局变量 dtimedtime 蛇的每次移 蛇的每次移 动都延时动都延时 dtimedtime 的时间 初始化的贪吃蛇的移动速度为的时间 初始化的贪吃蛇的移动速度为1500ms1500ms 则只要将 则只要将 dtimedtime 的初值设置为的初值设置为15001500 在蛇每次吃到苹果时将 在蛇每次吃到苹果时将 dtimedtime 的值减少的值减少1010 就可以 就可以 做到不断加速的效果 做到不断加速的效果 3 3 实验程序设计实验程序设计 代码如下 代码如下 include include include include include include 浙江大学硕士学位论文 11 个人简 历 5 include include include include define define MX x MX x x 10 121 x 10 121 define define MY y MY y y 10 41 y 10 41 structstruct mysnake mysnake intint x x intint y y intint Dir Dir structstruct mysnakemysnake next next structstruct mysnakemysnake last last prev prev struct struct intint flag flag intint point point Point 42 42 Point 42 42 intint escesc 0 0 intint HdirHdir SDLK RIGHT SDLK RIGHT SDL SurfaceSDL Surface screen screen intint dtimedtime 180 180 voidvoid SetGame SetGame voidvoid Progress Progress 浙江大学硕士学位论文 10 附录 6 voidvoid SetApple SetApple structstruct mysnakemysnake Move struct Move struct mysnakemysnake head struct head struct mysnakemysnake tail tail intint movex movex intint movey movey voidvoid Clean structClean struct mysnakemysnake head head voidvoid Snake structSnake struct mysnakemysnake head head intint main void main void if SDL Init SDL INIT VIDEO 0 if SDL Init SDL INIT VIDEO 0 fprintf stderr Initfprintf stderr Init videovideo failed s n SDL GetError failed s n SDL GetError exit 1 exit 1 screen SDL SetVideoMode 640 480 16 SDL SWSURFACE screen SDL SetVideoMode 640 480 16 SDL SWSURFACE if screen NULL if screen NULL fprintf stderr Setfprintf stderr Set videovideo modemode failed s n SDL GetError failed s n SDL GetError exit 1 exit 1 atexit SDL Quit atexit SDL Quit SetGame SetGame getchar getchar returnreturn 0 0 voidvoid SetGame SetGame 浙江大学硕士学位论文 11 个人简 历 7 intint i i j j forfor i i 0 0 i 42 i 42 i i forfor j j 0 0 j 42 j 42 j j Point i j flagPoint i j flag 0 0 Point i j pointPoint i j point 0 0 forfor i i 0 0 i 42 i 42 i i Point 0 i flagPoint 0 i flag 1 1 forfor i i 0 0 i 42 i 42 i i Point 41 i flagPoint 41 i flag 1 1 forfor i i 0 0 i 42 i 42 i i Point i 0 flagPoint i 0 flag 1 1 forfor i i 0 0 i 42 iformat 0 0 255 format 0 0 255 Draw FillRect screen 130 50 400 400 SDL MapRGB screen Draw FillRect screen 130 50 400 400 SDL MapRGB screen format 255 255 255 format 255 255 255 SDL WaitEvent NULL SDL WaitEvent NULL Progress Progress voidvoid Progress Progress structstruct mysnakemysnake head head tail tail intint key key 浙江大学硕士学位论文 10 附录 8 SDL EventSDL Event event event headhead struct struct mysnakemysnake malloc sizeof struct malloc sizeof struct mysnake mysnake tailtail struct struct mysnakemysnake malloc sizeof struct malloc sizeof struct mysnake mysnake head nexthead next tail tail head last NULL head last NULL head xhead x 20 20 head yhead y 20 20 head lasthead last NULLNULL head Dir RIGHT head Dir RIGHT Point 20 20 flagPoint 20 20 flag 1 1 tail nexttail next NULL NULL tail last head tail last head tail xtail x 19 19 tail ytail y 20 20 tail Dir RIGHT tail Dir RIGHT Point 19 20 flagPoint 19 20 flag 1 1 Snake head Snake head SetApple SetApple whilewhile esc esc SDL Delay dtime SDL Delay dtime while SDL PollEvent SDLK LEFT Hdir SDLK RIGHT break break casecase SDLK LEFT ifSDLK LEFT if before before SDLK RIGHT Hdir SDLK LEFT SDLK RIGHT Hdir SDLK LEFT 浙江大学硕士学位论文 11 个人简 历 9 break break casecase SDLK DOWN ifSDLK DOWN if before before SDLK UP Hdir SDLK DOWN SDLK UP Hdir SDLK DOWN break break casecase SDLK UP ifSDLK UP if before before SDLK DOWN Hdir SDLK UP SDLK DOWN Hdir SDLK UP break break casecase SDLK SPACE SDL WaitEvent NULL SDLK SPACE SDL WaitEvent NULL break break casecase SDLK ESCAPE SDLK ESCAPE fprintf stdin Compulsoryfprintf stdin Compulsory Withdrawal n Withdrawal n SDL Delay 10 SDL Delay 10 esc 1 esc 1 break break elseelse if event type SDL QUIT esc 1 if event type SDL QUIT esc 1 switchswitch Hdir Hdir casecase SDLK RIGHT headSDLK RIGHT head Move head tail Move head tail 1 1 0 0 break break casecase SDLK LEFT headSDLK LEFT head Move head tail Move head tail 1 1 0 0 break break casecase SDLK DOWN headSDLK DOWN head Move head tail Move head tail 0 0 1 1 break break casecase SDLK UP headSDLK UP head Move head tail Move head tail 0 0 1 1 break break SDL UpdateRect screen SDL UpdateRect screen 0 0 0 0 0 0 0 0 voidvoid SetApple SetApple 浙江大学硕士学位论文 10 附录 10 intint PXPX 0 0 PYPY 0 0 srand time NULL srand time NULL while Point PX PY flag while Point PX PY flag PXPX rand rand 40 40 PYPY rand rand 40 40 delay 10 delay 10 Point PX PY pointPoint PX PY point 1 1 Draw FillRect screen MX PX Draw FillRect screen MX PX MY PY 8 8 SDL MapRGB screen MY PY 8 8 SDL MapRGB screen format 255 255 0 format 255 255 0 structstruct mysnakemysnake Move struct Move struct mysnakemysnake head struct head struct mysnakemysnake tail tail intint movex movex intint movey movey structstruct mysnakemysnake p p if Point head xif Point head x movex head ymovex head y movey flag movey flag fprintf stdin Gamefprintf stdin Game Over n Over n SDL Delay 10 SDL Delay 10 escesc 1 1 returnreturn head head Clean head Clean head ifif Point head x Point head x movex head ymovex head y movey point movey point Point head xPoint head x movex head ymovex head y movey point 0 movey point 0 浙江大学硕士学位论文 11 个人简 历 11 Point head xPoint head x movex head ymovex head y movey flag 1 movey flag 1 p p struct struct mysnakemysnake malloc sizeof struct malloc sizeof struct mysnake mysnake head last p head last p p nextp next head head p xp x head xhead x movex movex p yp y head yhead y movey movey headhead p p head Dir Hdir head Dir Hdir if dtime 50 dtimeif dtime 50 dtime dtimedtime 5 5 SetApple SetApple elseelse ifif Point head x Point head x movex head ymovex head y movey flag movey flag head xhead x head xhead x movex movex head yhead y head yhead y movey movey forfor p p tail tail p last NULL p last NULL p p p last p last p Dir p last Dir p Dir p last Dir head Dir Hdir head Dir Hdir forfor p p head next head next p p NULL NULL p p p next p next switchswitch p Dir p Dir casecase SDLK RIGHT SDLK RIGHT p x p x break break casecase SDLK LEFT SDLK LEFT p x p x break break casecase SDLK DOWN SDLK DOWN p y p y break break casecase SDLK UP SDLK UP p y p y break break 浙江大学硕士学位论文 10 附录 12 Snake head Snake head returnreturn head head voidvoid Clean structClean struct mysnakemysnake head head structstruct mysnakemysnake p p forfor p p head head p p NULL NULL p p p next p next Point p x p y flag 0 Point p x p y flag 0 Draw FillRect screen MX p x Draw FillRect screen MX p x MY p MY p y 8 8 SDL MapRGB screen format 255 255 255 y 8 8 SDL MapRGB screen format 255 255 255 voidvoid Snake structSnake struct mysnakemysnake head head structstruct mysnakemysn

温馨提示

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

评论

0/150

提交评论