资源描述
毕业设计论文作者系部专业题目学号指导教师评阅教师完成时间毕业设计(论文)中文摘要题目:基于Java的游戏设计一一贪吃蛇摘要:“贪吃蛇游戏是使用Java语言开发的一款经典的游戏,它因操作简单、娱乐性强 而广受欢送。本文基于Java技术和eclipse开发环境,开发了一个操作简单、界面美观、 功能较齐全的“贪吃蛇游戏。整个游戏程序分为十个类模块,实现了游戏的开场、暂 停、完毕,能够实现加速和减速。通过本游戏的开发,到达学习Java技术和熟悉软件开发流程的目的。本文在介绍Java相关技术时对“贪吃蛇游戏的整个生命周期的各个开发阶段进展 了详细地介绍。首先,分析了开发本游戏软件的可行性;其次,从游戏主界面等几方面, 分析了本游戏的功能需求;然后,进展了游戏的概要设计和详细设计,这也是本文的重 点。概要设计给出两个功能模块的主框架以及八个类模块的函数调用关系;详细设计重 点给出各个类模块的程序列表,介绍了各个类包含的变量、使用的方法,展示了游戏的 界面。为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调 试过程和功能测试结果。关键词:Java eclipse贪吃蛇开发流程毕业设计(论文)外文摘要Title Java-based game designSnakeAbstract: Snake game is a classic game using the Java language developments is simple, entertaining and popular. This article is based on Java technology and the Eclipse development environment, developing a simple, beautiful interface, Full-featured Snake game. The entire game program is divided into ten modules, the start of the game, pause, end , being able to achieve speed up and speed down . Through the development of the game, to achieve the purpose of learning Java technology and familiar with the software development process.Introducing Java-relatedtechnologies, a detailed description of the various development phases of the entire life cycle of the Snake game. First, the analysis of the feasibility of the development of the game software; Secondly, the game from the main game interface aspects, functional requirements; Then, the outline design and detailed design of the game, which is the focus of this article. Outline design gives the main frame of the two functional modules and The eight modules function call relationship; Detailed design focusing of each module is given the list of programs, each class contains variables, the methods used, showing the games interface .In order to ensure the correctness and functions achieving reliability of the program code, the article also describes the results of the game software debugging process and functional testing.keywords: Java eclipse Snake the development process目录1绪论11.1 JAVA语言的特点11.2 开发工具 Eclipse/H 21.3 开发工具JDK介绍21.4 应用环境32系统需求分析32.1 需求分析32.2 可行性分析33系统概要设计43.1 游戏流程图43.2 设计目标53.3 系统功能模块53.4 系统数据构造设计74系统详细设计104.1 程序设计104.2 贪吃蛇游戏各功能界面截图135系统测试165.1 测试的意义165.2 测试过程165.3 测试结果17结论18致19参考文献191 绪论贪吃蛇是世界知名的益智类小游戏,选择这个题目一方面是为了将我们自己的所学知识 加以运用;另一方面,我希望通过自己的所学知识把它剖析开来,通过自己的动手实践,真 正的了解它的本质和精华。希望通过这次实践,能从中提高自己的编程能力。并从中学会从 零开场分析设计程序,到达学以致用,活学活用的目的。另外,通过本游戏的开发,到达学 习Java技术和熟悉软件开发流程的目的。本游戏的开发语言为Java开发工具选用Eclipse Java是一种简单的,面向对象的, 分布式的,解释型的,强健平安的,构造中立的,可移植的,性能优异、多线程的动态语言。 这里采用Java作为开发语言主要是基于 Java的面向对象和可移植性。Eclipse是一个开放 源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组效劳,用 于通过插件组件构建开发环境。1.1 Java语言的特点1.1.1 简单性Java与C+钠言非常相近,但Java比C+喻单,它抛弃了 C+4的一些不是绝对必要的 功能,如头文件、预处理文件、指针、构造、运算符重载、多重继承以及自动强迫同型。Java 实现了自动的垃圾收集,简化了存管理的工作。1.1.2 平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类 型与机器无关。1.1.3 平安性Java的编程类似C+但舍弃了 C+柏勺指针对存储器地址的直接操作,程序运行时,存由 操作系统分配,这样可以防止病毒通过指针入侵系统。它提供了平安管理器,防止程序的非 法访问。1.1.4 面向对象Java吸收了 C+S向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护 性,使程序代码可以只需一次编译就可反复利用。1.1.5 分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数, 使用其相关技术可以十分方便的构建分布式应用系统。1.1.6 强健性Java致力于检查程序在编译和运行时的错误,并自动回收存,减少了存出错的可能性。Java取消了 C语言的构造、指针、#define语句、多重继承、goto语句、操作符、重载等不 易被掌握的特性,提供垃圾收集器自动回收不用的存空间。1.2 开发工具Eclipse介绍Eclipse是一个开放源代码的、基于 Java的可扩展开发平台。就其本身而言,它只是一个框架和一组效劳,用于通过插件组件构建开发环境。幸运的是, Eclipse附带了一个标准的插 件集,包括 Java 开发工具Java Development Tools JDTL虽然大多数用户很乐于将 Eclipse当作Java IDE来使用,但Eclipse的目标不仅限于 此。Eclipse还包括插件开发环境Plug-in Development Environment, PD日,这个组件主要 针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与 Eclipse环境无缝集成的工 具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于 Java语言;例如,支持 诸如C/C+?编程语言的插件已经可用,或预计会推出。 Eclipse框架还可用来作为与软件 开发无关的其他应用程序类型的根底,比方容管理系统等。1.3 开发工具JDK介绍Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具 JDK Sun提供的基于 字符模式的Java开发工具包JDK Java开发工具JDK是许多Java专家最初使用的开发环 境。Java是平台无关的语言是因为用 Java写的应用程序不用修改就可在不同的软硬件平台上 运行。Java源程序编写借助于记事本编辑工具。所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java AP是一些 预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK是整个Java的核心,包括了 Java运行环境Java Runtime Environment t, 一堆Java工具和Java根底的类库。不管 什么Java应用效劳器实质都是置了某个版本的 JDK因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK除了 Sun之外,还有很多公司和组织都开发了自 己的JDK,伤J如 旧M公司开发的JDK BEA公司的Jrocket,还有GNU组织开发的JDK等等。 其中 旧M的JDK包含的JVMJava Virtual Machine运行效率要比 Sun JDK&含的JVM高出 许多。而专门运行在x86平台的Jrocket在效劳端运行效率也要比Sun JDK子很多。1.4 应用环境(1)操作系统: Windows 7, Windows xp 等。(2)应用软件:jdk7.1 , eclipseo2系统需求分析2.1 需求分析本系统主要是完成贪吃蛇游戏的根本操作,用户可以自己练习和娱乐。本系统需要满足以下几点要求:(1)利用方向键来改变蛇的运行方向。(2)空格键或回车键暂停或继续游戏,并在随机的地方产生食物,PgUp和PgDn控制速度快慢。(3)吃到食物就变成新的蛇体,碰到壁或自身那么游戏完毕,否那么正常运行。2.2 可行性分析贪吃蛇游戏是一种简单的群众的游戏,自从计算机实现以来,深受广阔电脑玩家的喜爱, 做一个简单的贪吃蛇小游戏,也比拟符合现代人用来打发闲暇时光的方式。贪吃蛇的核心算法是如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以 游戏框架部背风光重绘出队的节点,这样就可以到达移动的效果。而在吃到食物的时候,那么只需把食物入队即可。实现贪吃蛇的根本的蛇身移动、吃到食物身体增长、和碰到墙壁或 自身死亡,能够暂停和开场。本次设计主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的 面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。由于Java主要用于网络应用程序开发,因此对平安性有较高的要求。如果没有平安保证,用户从网络下载程序执行就非常危险。Java通过自己的平安机制防止了病毒程序的产生 和下载程序对本地系统的威胁破坏。3系统概要设计3.1 游戏流程图图3-1游戏流程图3.2 游戏整体构造图图3-2游戏整体构造图3.3 设计目标本系统是针对贪吃蛇小游戏的 Java程序,利用方向键来改变蛇的运行方向,空格键暂 停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身那么游 戏完毕,否那么正常运行。3.4 系统功能模块1、本系统共包括10个类文件。java源文件及其功能如表所示。表3-1 java源文件及其功能序号文件名主要功能1MainFrame该文件为程序入口,含有main方法。2GameOptionPanel实现菜单控制运行等总体要求,实现方向键控制蛇 的方向,空格键控制游戏暂停或继续等。3SnakeListener蛇的监听器4GameListener游戏监听器5Food该文件实现组成蛇身的单位 -食物。6Ground该文件实现障碍物-石头7Snake该文件实现蛇类8Global该文件为工具类,实现一些配置9Controller控制器,控制蛇、食物、石头10GamePanel游戏的显示界面设置2、主要类之间的对应关系如下:图3-3主要类之间的关系3、因为蛇不能直接操作显示面板GamePanel,所以定义一个监视器SnakeListener里面有两个方法:snakeMoved和 snakeEatFood()图3-4通过事件监听建立联系3.5 系统数据构造设计3.5.1 蛇、石头、食物的表示用一个大的表格来表示显示区域, 里面的格子就是组成蛇的根本单位, 一个格子可以代 表一个食物,也可以代表一个石头,几块连在一起的石头就可以代表一条蛇。使用坐标来区 分这些格子。x坐标-01234567S91056图3-5蛇、石头、食物的表示0 12Y坐标4这里用一个集合来存储这些坐标,并且要求能够区分出蛇头和蛇尾。3.5.2 蛇的移动蛇向前移动一步,可以看作是蛇头前面增加了一个节点,蛇的尾巴上少了一个节点即 去尾,加头幽后图3-6蛇的移动3.5.3 存储蛇身的数据构造由于要区分蛇头和蛇尾,因此这个数据构造必须是有序的。另一方面,我们需要经常的 访问第一个和最后一个节点,所以LinkedLis最适宜。因为它有getFirst(), getLast(),和 removeLast(。法。X坐标(2J)|(L2)蛇头(3i2) 0230123向上移动.丫空标短1 向下移动,Y坐标加1 向左移动.K坐标遗I 向右移动,X坐标加1图3-7根据原蛇头和方向计算新蛇头的坐标3.5.4 蛇的移动方向蛇下一步移动到哪里,是由方向来控制的。根据原蛇头的坐标和方向来确定新蛇头的坐 标,因此在这里用int型常量来表示蛇的移动方向。在原坐标的根底上,根据蛇头的运动方向来确定新蛇头的坐标,比方向上移动就是 y-1。在Snaked增加蛇的方向向量:public static final int UP = 1 上public static final int DOWN = -1 下public static final int LEFT = 2public static final int RIGHT = -23.5.5 如何显示蛇身显示蛇身,其实就是填充,用颜色填充格子。需要4个参数,像素坐标x,像素坐标y,格子宽度,格子高度。像素坐标就是矩形左上角的坐标这个点的像兴隼除为k坐标:擀f的竞度reft生&格子的在度* toploft是这个一于阳左於界的距寓 top心这个格史上H不怕思离图3-8格子坐标和像素坐标3.5.6 蛇身的移动方向1相反方向和上一次移动的方向相反的方向称为相反方向,这种输入应该忽略。这样可以防止蛇从自己的身体中穿过。2无效方向在蛇的这一次移动之后和下一次移动之前这个时间间隔输入了多个非相反方向,只有最后一个是有效方向,其他的都是无效方向。蛇的最终运动方向以有效方向为准。(3) Snak并增加监听器,并另外启动一个线程来不断调用蛇的move(),在Snak并提供一个启动线程的方法。3.5.7吃到食物判定通过判定坐标是否重合来判断,只需要判断蛇头是否和食物重合就可以了, 因为蛇的身 体都是走蛇头走过的地方,蛇吃掉食物后身体就会变长。在 Controller的snakeMoved中添 加如下代码:/*判断是否吃到食物*/if (food != null & food.isSnakeEatFood(snake) /*吃到食物后,蛇增加身体,再重新丢一个食物*/snake.eatFood();food.setLocation(ground = null ? food.getNew() : ground .getFreePoint();/*如果吃到食物,就肯定不会吃到石头*/else if (ground != null & ground.isSnakeEatRock(snake) /*如果吃到的是石头,或吃到自己的身体,就让蛇死掉*/ stopGame();if (snake.isEatBody()stopGame();4系统详细设计4.1 程序设计4.1.1 主类 MainFrame1主类为此程序的入口,定义了 MainFrame的对象frame,开场运行此程序2源代码见文件 MainFrame.Java4.1.2 类 MainFrame1成员变量见表4-1表4-1主要成员变量成员变量描述变量类型名称选项面板private GameOptionPaneloptionPanel游戏面板private GamePanelgamePanel蛇类对象private Snakesnake石头对象private Groundground食物对象private Foodfood控制对象private Controllercontroller速度标签private JLabelinfoLabel2方法见表4-2方法名功能gameOver()游戏完毕gameStart()游戏开场gameContinue()游戏继续gamePause()游戏暂停4.1.3 类 Snake1成员变量见表4-3表4-3主要成员变量成员变量描述变量类型名称上下左右(方向)intUP、DOWN、LEFT RIGHT蛇体LinkedListbody蛇头坐标Pointhead蛇尾坐标Pointtail是否活着booleanlive是否暂停booleanpause速度intspeed监听Setlistener2方法见表4-4表4-4 主要方法方法名功能eatFood()setHeadC010ro setBodyC010rochangeDirection(int) move() begin()判断食物是否被蛇吃掉,如果食物在蛇运行方向的 正前方,并且与蛇头接触,那么被吃掉设置蛇头的颜色设置蛇身的颜色改变运行方向蛇在运行中所采取的措施开启一个新的线程驱动蛇定时移动4.1.4 类 Food1成员变量见表4-5表4-5主要成员变量成员变量描述变量类型名称颜色private Colorcolor随机private Randomrandom2源代码见文件Food.java4.1.5 类 Controller该类包含控制器和处理按键逻辑,控制器,控制Ground, Snake Food,负责游戏的逻辑处理按键事件,实现了 SnakeListener接口的snakeMoved()方法,可以处理Snake触发的事 件,该类继承KeyAdapter类并且覆盖keyPressed方法:处理按键事件,根据按键不同,发 出不同的指令:UP:改变蛇的移动方向为向上DOWN:改变蛇的移动方向为向下LEFT:改变蛇的移动方向为向左RIGHT:改变蛇的移动方向为向右SPACE暂停/继续PgUp/PgDn:加速/减速蛇的移动Y:开场新游戏的方法4.1.6 类 Ground可以叫做地形,或地面,和食物一样, Ground也有x, y坐标和颜色等属性,构造方法 Ground()初始化地图,设置格局,可以通过setRockColor(方法设置石头的颜色,方法isSnakeEatRock刻断蛇是否吃到食物,最后运用drawMe()方法显示石头。源代码见文件Ground.java4.1.7 类 GameListener此类为游戏监听类,实现游戏的监听功能。源代码见文件GameListener.java4.1.8 类 SnakeListener此类为蛇的监听类,实现蛇运动的监听,蛇移动的监听snakeMoved()蛇吃到食物的监听snakeEatFood()源代码见文件SnakeListener.java4.1.9 类 Global工具类此类中存放了其他类中用到的一些常量:格子的像素宽度,高度 、蛇的初始长度和 初始速度等。源代码见文件Global.java4.1.10 类 GameOptionPanel此类为游戏的选项面板类,实现游戏面板的控制。源代码见文件 GameOptionPanel.java4.1.11 类 GamePanel此类为游戏的显示界面设置,可以通过 setBackgroundColorQ置游戏的背景颜色。源代码见文件GamePanel.java4.2 贪吃蛇游戏各功能界面截图4.2.1 游戏的初始界面图4-1初始界面图4-2控制面板带示熊期卷飙图4-3速度标签4.2.2游戏运行过程界面1鼠标点击开场新游戏按钮,开场游戏:图4-4开场游戏图4-5开场游戏有加速 有改颜色 有网格2按空格键,游戏开场运行,蛇开场移动,并且吃到一次食物即红色方块后就变成蛇体:图4-6吃到食物身体变长3按方向键改变蛇的运行方向,并且碰壁后从新开场游戏,红色方块随机地方产生:图4-7碰壁死亡5系统测试5.1 测试的意义系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误 的测试。测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的部构造精心设计测试用例,并利用这些实例来运行程 序,以便发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的 系统分析系统设计和实施的最后复查。 根据测试的概念和目的,在进展信息系统测试时应遵 循以根本原那么。5.2 测试过程(1)拟定测试方案。在制定测试方案时,要充分考虑整个工程的开发时间和开发进程以及 一些人为因素和客观条件等,使得测试方案是可行的。测试方案的容主要有测试的容、进度 安排、测试所需的环境和条件、测试培训安排等。(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每 一项功能或特性所必须完成的根本测试工程和测试完成的标准。(3)根据测试大纲设计和生成测试用例。 在设计测试用例的时候,可综合利用前面介绍的 测试用例和设计技术,产生测试设计说明文档,其容主要有被测工程、输人数据、测试过程、 预期输出结果等。实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进展 完整的测试(5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进展概要说明,列 出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预 计的工作量及修改的负责人员。5.3 测试结果贪吃蛇测试情况如表5-1所示:表5-1贪吃蛇测试情况执行的操作期望的结果实际结果翻开文件,运行代码代码正常运行,无错误信息符合期望结果点击“开场游戏贪吃蛇出现,食物出现符合期望结果点击“暂停游戏游戏暂停,蛇和食物都静止符合期望结果点击“停顿游戏游戏停顿,重新开场新游戏符合期望结果利用方向键控制方向,空格键暂停游戏蛇运行方向正常,空格键暂停游戏符合期望结果键盘按PgUp/PgDn蛇加速/减速运动符合期望结果点击“设置背景颜色出现颜色选项,背景颜色变化符合期望结果点击“设置蛇头 /蛇身/食物颜色蛇头、蛇身和食物颜色变化明显且显示正常效果符合期望结果“显示网格打钩出现网格,并且自行选择网格颜色符合期望结果点击“恢复默认设置所有设置都恢复到初始化状态符合期望结果蛇每吃到一个食物身体变长符合期望结果蛇碰壁或者吃到自己的身体完毕游戏符合期望结果通过以上测试,验证程序运行正常,没有发现什么错误结论毕业设计是我们作为学生在学习阶段的最后一个环节,是对所学根底知识和专业知识的 一种综合应用,是一种综合的再学习、再提高的过程,这一过程对我们学生的学习能力和独 立思考及工作能力也是一个培养,同时毕业设计的水平也反映了大学教育的综合水平,因此学校十分重视毕业设计这一环节,加强了对毕业设计工作的指导和发动教育。在大学的学习 过程中,毕业设计是一个重要的环节,是我们步入社会参与实际工作的一次极好的演示,也 是对我们自学能力和解决问题能力的一次考验,是学校生活与社会生活间的过渡。在完成毕业设计的这段时间里,我收获颇多:通过这次的java贪吃蛇游戏设计我了解到java语言的特点:简单性、面向对象、平台 无关性、可移植性、解释性、高性能、动态性、可靠性和平安性、多线程、分布式处理等, 在课程设计过程中不仅稳固了我们以前的根底理论知识,而且使我们各个方面的能力都有很大的提高。从一开场的无从下手,到不断的查阅资料,图书馆借书,再到请教教师的帮助, 这些都很好的锻炼了我们理论联系实际,与具体工程、课题相结合的能力,开发、设计游戏 的能力进一步在课程设计中表达。这让我学会了很多,为以后的学习和工作加强。在设计过 程中,总是遇到这样或那样的问题。有时发现一个问题的时候,需要做大量的工作,花大量 的时间才能解决。为以后的工作积累了经历,增强了信心。既让我们懂得了怎样把理论应用 于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决,它更是自己综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节。其实我们可以把毕业设 计看作是一个社会实践的容,在完成毕业设计的时候,所用到的知识,以及所具备的专注力 和责任心,同样在以后的社会工作中是必不可少的。任何事情都是一分为二的,在毕业设计过程中也暴露出自己专业根底的很多缺乏之处。 例如对java语言的综合运用的技巧的缺乏,对一些 java类的理解不够透彻,等等。感觉自 己所学习的只是冰山一角,面对稍微复杂的东西还是没能得心应手,再一次体会到学无止境的意义了。这款游戏的优点,就是简单的画面和容易的操作很容易使玩家就上手,适合不通年龄段的玩家娱乐。当然这款游戏也存在有缺乏的地方,有些功能还是没有实现。通过这次设计过 程中,我查阅了大量的资料,对java有了更深刻的认识,通过这次的设计,更提高了我在程 序设计和调试方面的技巧,更重要的是我认识了自己的缺乏, 在编程方面我还需要努力学习 来充实自己,来获取更大的收获。致大学三年学习时光已经接近尾声, 毕业论文的完成也随之画上了圆满的句号, 在此我想 对我的学校,我的父母、亲人们,我的教师和同学们表达我由衷的意。感我的家人对我大学 三年学习的默默支持;感我的学校给了我在大学三年深造的时机,让我能继续学习和提高; 感所有教过我的教师和同学们三年来的关心和鼓励。当然,这次的毕业设计得到了很多教师和同学的帮助,首先,最主要感的是我的指导教 师一一王莉教师,她为人随和热情,治学严谨细心。王教师始终认真负责地给予我深刻而细 致地指导,帮助我拓宽思路,精心点拨、热忱鼓励。在整个毕业设计过程中她给了我很大的 帮助:在毕业设计选题时她给了我很多的意见,同时又帮我具体分析使我最后选择了基于 java游戏设计这个具体目标,让我的毕业设计有了具体的方向。在论文提纲制定时,我的思 路不是很清晰,经过教师的帮助,让我在写作时思路更加清晰和明确。在完成初稿后,教师 认真查看了我的文章,指出了我存在的很多问题,然后不断的修改完善。在此十分感王教师 的细心指导,才能让我顺利完成毕业设计论文。最后,感在整个毕业设计期间和我密切合作的同学, 和曾经在各个方面给予过我帮助的 伙伴们,在此,我再一次真诚地向帮助过我的教师和同学表示衷心的感!参考文献1、思民,Java开发技术与工程实践M.清华大学,2010-112、彬彬,马文强.Eclipse应用开发完全手册M.人民邮电,2007-93、庆)克罗夫特著.晖译,Java游戏高级编程M.清华大学,2005-8-14、王晓东,计算机算法设计与分析(第三版)M.电子工业,2009-12-15、宛延闿,Java程序设计实例剖析.,国防工业,2003-36、包汝,Java十大经典案例.,科学,2005-17、阿奇,Java实用教程第二版,电子工业,2009-8-1
展开阅读全文