分享
分销 收藏 举报 申诉 / 42
播放页_导航下方通栏广告

类型计算机科学与技术专业综合课程设计报告.doc

  • 上传人:丰****
  • 文档编号:9850631
  • 上传时间:2025-04-10
  • 格式:DOC
  • 页数:42
  • 大小:395KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    计算机科学 技术 专业 综合 课程设计 报告
    资源描述:
    计算机科学与技术专业综合课程设计报告 38 2020年4月19日 文档仅供参考,不当之处,请联系改正。 计算机科学与技术专业12级 《综合课程设计》报告 题目: 贪吃蛇小游戏 成员: 姓名 学号 郝兴明 07051 指导教师: 王金龙 开始日期: 年 12月 7 日 完成日期: 年 01月 8 日 级《综合课程设计》评价表 题 目 贪吃蛇小游戏 指导老师 王金龙 项 目 内 容 简 介 本次综合课程设计的内容为“贪吃蛇”小游戏,游戏操作简单,设计却很复杂,主要实现的内容为:经过键盘控制蛇的移动,判断蛇是否死亡,以及经过相应按钮来控制游戏的进程。 评价 工作量 (□饱满、□达到要求、□不饱满); 运行效果 (□良好、□有小问题、□错误较多); 文档及报告撰写 (□规范、□较规范、 □不规范、□未提交); 答辩 (□优秀、□良好、 □一般、 □较差); 团队分工及协作 (□很好、□较好、 □一般、 □较差)。 成绩 学 号 姓 名 组内分工 贡献排名 成 绩 郝兴明 程序设计、编写、测试、报告 答辩小组签字 青岛理工大学课程设计任务书 姓 名 组内分工 郝兴明 程序设计、编写、测试、报告 院 (系): 计算机工程 专 业: 计算机科学与技术 任务起至日期: 12月 7 日 至 01月 8 日 课程设计题目: 贪吃蛇小游戏 主要内容及要求: “贪吃蛇”小游戏主要应实现以下几个方面的功能: 1. 经过方向键控制蛇的移动 2.蛇吃到食物后身体变长 3.食物的随机产生 4.蛇吃到自己身体或墙后死亡 5.蛇在移动过程中能够暂停/继续 6.可手动停止游戏 工作计划安排: 12月07日--- 12月10日 需求分析 12月11日--- 12月15日 概要设计 12月16日--- 12月20日 框架搭建 12月21日--- 12月30日 详细功能设计 12月31日--- 01月03日 程序测试 01月04日--- 01月05日 书写报告 01月06日 项目答辩 第1部分 概述 1. 内容简介 “贪吃蛇”是一款经典的小游戏,以其操作简单、娱乐性强而广受欢迎。一条蛇在封闭的围墙内移动,在围墙内随机出现一个食物,经过键盘的方向键来控制蛇的移动,当蛇吃到食物后蛇的身体长一节,同时出现一个新的食物等待蛇去吃,如果蛇在移动过程中蛇头吃到自己身体或者吃到围墙的石头,则蛇死亡,游戏结束。 作为一个小游戏,设计中必须要考虑人机交互和用户体验,因此游戏界面应简洁直观,让用户可直接了解游戏的操作。 “贪吃蛇”的设计对java编程的提高和进阶是一次很好的锻炼机会。本次设计使用java语言,经过GUI编程、线程、事件监听等技术来实现游戏的开发,功能虽然较少,但游戏的基本功能都具备,可正常进行游戏。 2. 功能介绍 “贪吃蛇”小游戏的设计较复杂,要想实现所有功能需要很高的技术要求和很强的编程能力。由于本人技术能力欠缺,因此只能实现基本的游戏功能,经过画图的方法来显示出蛇的身体,食物的位置和墙的位置。主要操作是经过键盘的方向键来控制蛇的移动方向,无效方向要忽略;当蛇吃到食物时蛇的身体变长一节,同时产生一个新的食物;蛇吃到自己身体或者吃到石头时死亡,游戏结束;在游戏控制区域可经过相应按钮来控制游戏的运行进度。 3. 设计环境 本次游戏设计的环境及开发工具如下: 运行环境:Windows 7 编程语言:java 开发环境:eclipse 第2部分 需求分析 1. 用户特点分析 游戏开发成功后,可适用于各类人群使用,因此要求界面简单,操作方便, 不需要进行专门培训就能够学会如何操作 2. 功能需求 2.1图形界面的需求 游戏画布区主要包括蛇的身体出现的位置,食物随机出现的位置,墙的固定位置,以及蛇可移动的区域。 游戏控制区域显示按钮及操作提示。 2.2属性需求 在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能号,链接速度快,以确保系统可适用性好。 另外,还要求系统的可扩展性、可维护性、可移植性良好。 2.3功能模块需求 软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。包括如何把该游戏划分成若干个模块、决定各个模块之间的接口、模块之间穿的的信息,以及模块结构的设计等。 2.3.1游戏功能 本游戏主要完成以下几方面的功能: 1) 游戏控制功能 2) 界面布局 3) 其它辅助功能 2.3.2功能模块划分 根据游戏需求,整个游戏主要划分为游戏界面和游戏控制两个模块。见图2.1 。游戏界面是整个游戏的运行区域,可动态的观察游戏过程。游戏控制是用来控制游戏进程的,能够开始游戏,暂停/继续游戏,停止游戏。 贪吃蛇游戏   游戏界面模块 游戏控制模块 图2.1 游戏模块划分 第3部分 系统设计 1. 系统流程图 系统流程图是描绘系统物理模型的传统工具。它的基本思想是用图形符号描绘系统里面的每个部件,表示信息在各个部件之间流动的情况。 开始游戏 控制蛇移动 身体变长 是否吃到自己 是 是 是否吃到食物 否 否 是否撞墙   否 游戏结束 蛇死亡 是 图3.1 系统流程图 2.类模块设计 本次设计遵循MVC设计模式,主要类之间的关系如下: Snake类 (蛇类) Game类 (主面板) Controller类(控制器) Ground类 (墙类) Food类 (食物类) 图3.2 MVC设计模式体现 Snake类:设置蛇的属性,以及蛇的产生、移动、吃食物、死亡等方法。 Food类:设置食物的随机产生和是否被吃掉等方法。 Controller类:监听Snake类以及按键事件,并进行处理。 Game类:用来控制游戏进程和界面的显示。 3.各类的详细设计 表3.1 Snake类 成员 作用 private boolean pause; 判断是否暂停 private boolean life; 判断蛇是否死亡 private boolean isMoving; 判断蛇是否在移动 private LinkedList<Point>body; 存放蛇的身体节点 private void init(); 初始化方法 public void move(); 蛇的移动方法 public void drawMe(Graphics g); 画出蛇的身体 public void start(); 让蛇开始移动 public void die(); 让蛇死亡 表3.2 Food类: Public void newFood(Point p); 设置食物产生的位置 Public Boolean isSnakeEatFood(Snake snake); 判断蛇是否吃到食物 public void drawMe(Graphics g); 在画布上画出食物 表3.3 Ground类: Private int[][] rocks; 存放石头的数组 Public Ground(); 初始化石头 Public Boolean isSnakeEatRock(Snake snake); 判断是否吃到石头 Public Point getPoint(); 设置食物产生的位置 public void drawMe(Graphics g); 在画布上画出石头 表3.4 Controller类: Public Controller(Snake snake,Food food,Ground ground,GamePanel gamePanel); 初始化控制器类 Public void keyPressed(KeyEvent e); 监听按键事件 Public void snakeMoved(Snake snake); 监听蛇的移动 Public void newGame(); 创立新游戏 Public void setSnake(Snake snake); 设置蛇 第4部分 系统实现 1. 界面展示 “贪吃蛇”小游戏适合广大群体,故界面应以简洁直观为主,让 玩家一眼便可了解游戏的操作。具体游戏界面如下: 游戏初始化界面 图 4.1 游戏初始化界面 游戏开始界面 图 4.2 游戏开始运行界面 游戏结束界面 图 4.3 游戏结束界面 2.游戏的具体实现代码 2.1游戏画布区 public void display(Snake snake,Food food,Ground ground){ System.out.println("GamePanel's display"); this.snake = snake; this.food = food; this.ground = ground; this.repaint(); } protected void paintComponent(Graphics g){ g.setColor(new Color(0xcfcfcf)); g.fillRect(0, 0, Global.WIDTH * Global.CELL_SIZE, Global.HEIGHT * Global.CELL_SIZE); if(ground != null && snake != null && food != null){ this.ground.drawMe(g); this.snake.drawMe(g); this.food.drawMe(g); } } 2.2控制区 private static final long serialVersionUID = 1L; private final JButton button_start = new JButton("开始游戏"); private final JButton button_wait = new JButton("暂停游戏"); private final JButton button_stop = new JButton("停止游戏"); private final JLabel label_tips = new JLabel("方向键控制蛇的移动"); public GameOptionPanel(){ super(); setLayout(null); setFocusable(false); setVisible(true); button_start.setFont(new Font("楷体", Font.PLAIN, 17)); button_wait.setFont(new Font("楷体", Font.PLAIN, 17)); button_stop.setFont(new Font("楷体", Font.PLAIN, 17)); label_tips.setFont(new Font("楷体", Font.PLAIN, 25)); button_start.setFocusable(false); button_wait.setFocusable(false); button_stop.setFocusable(false); label_tips.setFocusable(false); button_start.setBounds(10, 10, 110, 40); button_wait.setBounds(145, 10, 110, 40); button_stop.setBounds(280, 10, 110, 40); label_tips.setBounds(70, 70, 300, 40); add(button_start); add(button_wait); add(button_stop); add(label_tips); } public JButton getStartButton(){ return button_start; } public JButton getWaitButton(){ return button_wait; } public JButton getStopButton(){ return button_stop; } public JLabel getTipsLabel(){ return label_tips; } 2.3蛇的移动 public void move(){ if(!(oldDirection + newDirection == 0)){ oldDirection = newDirection; } System.out.println("Snake's move"); oldTail = body.removeLast(); int x = body.getFirst().x; int y = body.getFirst().y; switch(oldDirection){ case UP: y--; if(y < 0){ y = Global.HEIGHT -1; } break; case DOWN: y++; if(y == Global.HEIGHT){ y = 0; } break; case LEFT: x--; if(x < 0){ x = Global.WIDTH - 1; } break; case RIGHT: x++; if(x == Global.WIDTH){ x = 0; } break; } Point newHead = new Point(x,y); body.addFirst(newHead); } 2.4监听按键 public void keyPressed(KeyEvent e){ if(!snake.isPause()&&snake.isLive()&&snake.isMoving()){ switch(e.getKeyCode()){ case KeyEvent.VK_UP: snake.changeDirection(Snake.UP); break; case KeyEvent.VK_DOWN: snake.changeDirection(Snake.DOWN); break; case KeyEvent.VK_LEFT: snake.changeDirection(Snake.LEFT); break; case KeyEvent.VK_RIGHT: snake.changeDirection(Snake.RIGHT); break; } } } 2.5画出蛇的身体 public void drawMe(Graphics g){ g.setColor(Color.BLUE); for(Point p:body){ g.fill3DRect(p.x * Global.CELL_SIZE, p.y * Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true); } } 2.6随机产生食物 public Point getPoint(){ Random radom = new Random(); int x = 0, y = 0; do{ x = radom.nextInt(Global.WIDTH); y = radom.nextInt(Global.HEIGHT); }while(rocks[x][y]==1); return (new Point(x,y)); } 2.7初始化墙 public Ground(){ for(int x=0;x<Global.WIDTH;x++){ rocks[x][0] = 1; rocks[x][Global.WIDTH-1] = 1; } for(int y=0;y<Global.HEIGHT;y++){ rocks[0][y] = 1; rocks[Global.HEIGHT-1][y] = 1; } } 第5部分 系统测试 5.1测试概述 进行软件测试是对系统的性能、完善程度以及安全性进行测试,在现今这个科技发达的时代,软件应用于各个领域,如果一个软件未经过细致的系统测试就投入使用,在使用过程中一旦出现问题后果将不堪设想,这不但仅是对用户负责,更是对开发人员自身负责,经过系统测试不断地发现问题和解决问题,在以后的工作中就会减小这些漏洞出现的几率,不断地完善每一个软件是每一个软件开发人员共同的愿望。因此,进行系统测试是十分必要的。 在进行本次游戏设计的过程中,对于软件的测试一直贯穿始终,对于在开发过程中的代码和文档,以及系统完成后都在进行测试。测试并不但仅是为了找出错误,经过分析错误产生的原因和错误的发生趋势,能够帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进。 测试主要分5种,即单元测试、集成测试、确认测试和白盒测试和黑盒测试。 本次游戏测试主要采用黑盒测试方法,检查游戏功能是否能实现。 5.2 详细测试 5.2.1测试一 测试内容:是否能正常开始游戏 测试方法:点击开始按钮 预期结果:游戏区出现蛇、食物和墙,蛇会移动 测试结果:和预期一样,祥见图5.1 图 5.1 开始按钮测试 5.2.2测试二 测试内容:是否能暂停/继续游戏 测试方法:点击暂停/继续按钮 预期结果:点击暂停后蛇停止移动,按钮变为继续游戏,点击继续后沿原方向移动,按钮变为暂停游戏。 测试结果:和预期一样,祥见图5.2和图5.3 图5.2 暂停游戏测试 图5.3 继续游戏测试 5.2.3测试三 测试内容:蛇是否能吃食物身体变长 测试方法:控制蛇移动去吃食物 预期结果:吃食物后蛇身体变长一节,同时产生一个新的食物 测试结果:和预期一样,祥见图5.4 图5.4 蛇吃食物测试(蛇身体默认为3节) 5.2.4测试四 测试内容:蛇撞墙是否会死 测试方法:控制蛇移动去撞墙 预期结果:蛇死亡不再移动,游戏结束 测试结果:和预期一样,祥见图5.5 图5.5 蛇撞墙死亡测试 5.2.5测试五 测试内容:蛇吃到自己身体是否会死 测试方法:控制蛇移动让蛇头吃到自己身体 预期结果:蛇死亡不再移动,游戏结束 测试结果:和预期一样,祥见图5.6 图5.6 蛇吃到自己身体测试 第6部分 系统总结 本次课程设计从游戏界面和游戏控制两方面实现了比较完善的功能,因为本人能力有限,还需要学习的地方很多,因此还是不尽完美,有很多能够优化的地方,但游戏的基本功能都很齐全,相比之前做的管理系统类的设计,应该能够说是又上升了一个层次。 虽然在设计中遇到了很多困难,比如说为了修改一个小小的bug而花费一整天,重新去学习新的知识,改了一次又一次等等,可是终于功夫不负有心人,游戏的功能都基本上实现了,作为一个学习计算机的人,特别是一个即将毕业的大四学生,更需要有坚持不懈的毅力和不断学习新知识的激情,困难只是我们走向成功的阶梯。当你克服一个一个的困难后,会感到满满的成就感。 总体来说,这次课设对我自己是一次很好的锻炼机会,不但把以前学到的只是温习了一遍,还学习到了很多新知识,而且还提高了敲代码的能力。对设计中遇到的问题,经过仔细思考和查阅资料,使得问题得以解决,对自己以后独立思考解决问题的能力也有很大帮助。 参考文献 1 李芝兴 杨瑞龙. Java程序设计之网络编程(第2版). 清华大学出版社, .7 2 张海藩 牟永敏. 软件工程导论(第6版). 清华大学出版社, .7
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:计算机科学与技术专业综合课程设计报告.doc
    链接地址:https://www.zixin.com.cn/doc/9850631.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork