java专业课程设计贪吃蛇游戏设计.doc
《java专业课程设计贪吃蛇游戏设计.doc》由会员分享,可在线阅读,更多相关《java专业课程设计贪吃蛇游戏设计.doc(16页珍藏版)》请在咨信网上搜索。
序言 Java最初被命名为Oak,目标设定在家用电器等小型系统编程语言,来处理诸如电视机、电话、闹钟、烤面包机等家用电器控制和通讯问题。因为这些智能化家电市场需求没有预期高,Sun放弃了该项计划。就在Oak几近失败之时,伴随互联网发展,Sun看到了Oak在计算机网络上宽广应用前景。于是改造了Oak,以“Java”名称正式公布。 Java 编程语言风格十分靠近C、C++语言。Java是一个纯面向对象程序设计语言,它继承了 C++ 语言面向对象技术关键。Java舍弃了C ++语言中轻易引发错误指针(以引用替换)、运算符重载(operator overloading)、多重继承(以接口替换)等特征,增加了垃圾回收器功效用于回收不再被引用对象所占据内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全枚举、不定长参数和自动装/拆箱等语言特征。 Java 不一样于通常编译实施计算机语言和解释实施计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依靠多种不一样平台上虚拟机来解释实施字节码。从而实现了“一次编译、四处实施”跨平台特征。不过,每次编译实施需要消耗一定时间,这同时也在一定程度上降低了 Java 程序运行效率。但在 J2SE 1.4.2 公布后,Java 实施速度有了大幅提升。 和传统程序不一样,Sun 企业在推出 Java 之际就将其作为一个开放技术。全球数以万计 Java 开发企业被要求所设计 Java 软件必需相互兼容。“Java 语言靠群体力量而非企业力量”是 Sun 企业口号之一,并取得了广大软件开发商认同。这和微软企业所提倡重视精英和封闭式模式完全不一样。 Sun 企业对 Java 编程语言解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全和系统无关、可移植、高性能、多线程和动态语言。 正文 1.1课程设计目标 《JAVA程序设计》是计算机相关专业必修专业基础课程,其实践性、应用性很强。实践教学步骤是必不可少一个关键步骤。本课程程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行一次全方面综合训练,JAVA程序设计设计目标是加深对理论教学内容了解和掌握,使学生较系统地掌握程序设计及其在网络开发中广泛应用,基础方法及技巧,为学生综合利用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 2.1工程概况 2.1.1案例提出及工程用时 经过两天在图书馆和网络上查阅资料,然后提出这次课程设计目标《贪吃蛇游戏》设计。然后接下来就是查阅更多资料,制订接下来具体计划,最终计划用两周时间完成此次课程设计提出案例。 2.1.2开发环境 硬件环境: CPU:Intel Pentium(R)4 主频:2.40GHz 内存:256MB 软件环境: 操作系统:Windows XP 编程环境: JDK 1.6 开发工具:Eclipse jdk 3.1设计方案论证 3.1.1设计思绪 贪吃蛇游戏设计和实现,关键分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏游戏主界面模块、游戏控制模块。而且只是实现移动速度、暂停、重新开始等功效。 游戏主界面模块: 游戏主界面是进入游戏后,能够给玩家第一感官部分,关键包含游戏图形区域界面、游戏速度选择更新界面、新生方块预览、暂停游戏按钮、重新开始游戏按钮。从很大程度上决定了玩家对游戏爱好问题,所以,游戏主界面应该努力争取美观,爽心悦目。 游戏控制模块: 这个模块是游戏中心步骤,关键完成控制游戏开始、暂停、重新开始等功效。为了能够给玩家一个很好游戏环境,这部分应该做到易懂、易操作。 本设计所开发是基于Java一个贪吃蛇游戏软件,关键实现游戏速度控制、游戏暂停、游戏退出等功效,分为: 游戏主界面模块、游戏控制模块以二个模块。 3.1.2程序概述 本程序是一个利用Java应用软件制作贪食蛇小游戏。在游戏过程中,用户经过点击小键盘区方向键来控制蛇运行方向;游戏运行过程中,假如想暂停,只需要按F3键即可。重新开始游戏按键为F2。当蛇没有吃到食物且碰到墙壁或自己身体时游戏结束。 本程序另一个功效是在程序运行窗口左上角显示,用户在游戏过程中移动和长度。 3.1.3程序步骤图 此次游戏设计处理步骤图1所表示。 单击“F2”按钮, 游戏开始,蛇开始随机。 键盘操作: 向上 左移 右移 向下 没有吃到食物且蛇碰到边界 单击“确定” 游戏结束 游戏中途欲中止,稍后继续游戏 单击“F3暂停游戏” 游戏暂停 进入游戏画面 再次单击开始F3按钮,游戏恢复 图1.程序步骤图 3.1.4 总设计模块划分 依据游戏需求中游戏所要实现功效,整个游戏分为二个模块进行具体设计,图2所表示。 贪吃蛇游戏 游戏主界面模块 游戏控制模块 图2.设计总模块 游戏控制模块关键框架图3所表示。 游戏控制模块 游戏暂停功效 游戏重新开始 游戏退出 图3.控制模块框架 游戏暂停控制:点击“F3”按钮,游戏暂停;再单击,游戏继续。 游戏重新开始控制:点击“F2”键后,点击确定,即游戏重新开始。 游戏退出控制:点击“F4”键好,点击确定,退出游戏界面。 3.1.5类、方法、属性说明 (1)组员变量 表1 关键组员变量(属性) 组员变量描述 变量类型 名称 文件菜单中子菜单“新建” JMenuItem mFile_New 编辑菜单中子菜单“撤消” JMenuItem mEdit_Undo 格式菜单中子菜单“颜色” JMenu formatMenu_Color 帮助菜单中子菜单“帮助专题” MenuItem mHelp_HelpTopics (2)方法 表2 关键方法 方法名 功效 备注 Notepad4() 描述记事本 无 Text.setBackground(Color.black) 设置编辑区默认背景色 无 Text.setForeground(Color.black) 设置编辑区默认前景色 无 4.1设计结果和分析 本程序在运行后,能够正常对应按键事件。因为程序关键部分已经集成为一个对象SnakeModel,所以利用键盘就能够实现操作。蛇前行过程中,能够任意向其左或右方向改变方向。点击F3键后游戏就暂停了。点击F2键游戏重新开始。点击F4游戏退出。运行结果以下图4所表示: 图4 程序运行图 当蛇没有吃到食物且碰到边界或碰撞到自己身体时,游戏结束。假如想重新开始即点击“确定”后按F2键,运行结果以下图5所表示: 图5 重新开始图 4.1.1程序异常处理 在蛇运行线程过程中,当蛇撞到墙或自己身体时,将抛出一个Exception类异常对象,然后使用try-catch去捕捉这个异常, 异常处理以下: try{ Thread.sleep(timeInterval); } catch(Exception e) { break; } 心得体会 经过这次课程设计,我对这学期所学JAVA语言程序设计有一个更深刻了解,将所学知识应用于实践,因为所学知识有限,为了使游戏能够实现自己预先构想,我经过上网和去图书馆找程序,比很好步骤图及功效模块,不停阅读修改代码使程序达成预期所要实现目标,完成课程设计后,能够感觉到自己对Java程序又有了新认识。总而言之,经过此次课程设计,使我平时学到理论知识得到了很好地升华,理论和实际得到一次很好结合,为我以后参与工作打下了坚实基础,使我受益匪浅。 参考文件 [1]赵文靖编著.Java程序设计基础和上机指导.北京:清华大学出版社, [2]赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社, [3]王路群.Java高级程序设计.北京:中国水利水电出版社, [4]雍俊海编著.Java程序设计习题集.北京:清华大学出版社, [5]朱福喜编著.Java语言习题和解析.北京:清华大学出版社, [6]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社, 程序代码: import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; public class She extends JFrame implements ActionListener, WindowListener { JLabel bt1; JLabel bt2; MyPaint mp; JMenuItem kaishi; JMenuItem zanting; JMenuItem tuichu; JRadioButton chu; JRadioButton zhong; JRadioButton gao; JRadioButton chao; JMenuItem guanyu; Font f; public She() { f = new Font("宋体", Font.PLAIN, 12); mp = new MyPaint(); mp.setShe(this); JMenuBar caidan = new JMenuBar(); JMenu shezhi = new JMenu("设置"); shezhi.setFont(f); JMenu nandu = new JMenu("难度"); nandu.setFont(f); JMenu bangzhu = new JMenu("帮助"); bangzhu.setFont(f); caidan.add(shezhi); caidan.add(nandu); caidan.add(bangzhu); kaishi = new JMenuItem("开始游戏 F2"); kaishi.setFont(f); kaishi.addActionListener(this); zanting = new JMenuItem("暂停/继续 F3"); zanting.setFont(f); zanting.addActionListener(this); tuichu = new JMenuItem("退出 F4"); tuichu.setFont(f); tuichu.addActionListener(this); chu = new JRadioButton("初级,最快速度195", true); chu.setFont(f); chu.addActionListener(this); zhong = new JRadioButton("中级,最快速度225"); zhong.setFont(f); zhong.addActionListener(this); gao = new JRadioButton("高级,最快速度255"); gao.setFont(f); gao.addActionListener(this); chao = new JRadioButton("超级,最快速度275"); chao.setFont(f); chao.addActionListener(this); ButtonGroup bg = new ButtonGroup(); bg.add(chu); bg.add(zhong); bg.add(gao); bg.add(chao); nandu.add(chu); nandu.add(zhong); nandu.add(gao); nandu.add(chao); guanyu = new JMenuItem("相关"); guanyu.setFont(f); guanyu.addActionListener(this); shezhi.add(kaishi); shezhi.add(zanting); shezhi.add(tuichu); bangzhu.add(guanyu); bt1 = new JLabel(" 长度:0"); bt1.setFont(f); bt2 = new JLabel("移动:5"); bt2.setFont(f); JPanel p = new JPanel(); p.setLayout(new GridLayout(1, 2)); p.add(bt1); p.add(bt2); this.addWindowListener(this);//添加窗体监听器 this.setJMenuBar(caidan); this.add(p, BorderLayout.NORTH); this.add(mp); this.add(new JLabel(" "), BorderLayout.WEST); this.setSize(335, 385); this.setResizable(false); this.setLocation(300, 150); this.setTitle("MyPaint"); this.setVisible(true); } public void setDS(int a, int b) { bt1.setText(" 长度:" + a); bt2.setText("移动:" + b); } public void setChu() { chu.setSelected(true); mp.setSD(300, 110); this.setDS(0, 305 - 300); chu.setEnabled(true); zhong.setEnabled(true); gao.setEnabled(true); chao.setEnabled(true); } public void setNanDu() { chu.setEnabled(false); zhong.setEnabled(false); gao.setEnabled(false); chao.setEnabled(false); } public void actionPerformed(ActionEvent e) { if (e.getSource() == zanting) { mp.setZanTing(); } else if (e.getSource() == kaishi) { mp.setKaiShi(); } else if (e.getSource() == tuichu) { mp.setTuiChu(); } else if (e.getSource() == guanyu) { JLabel gy = new JLabel("小游戏 贪吃蛇 V1.0"); gy.setFont(f); JOptionPane.showMessageDialog(this, gy); } else if (e.getSource() == chu) { mp.setSD(300, 110); this.setDS(0, 305 - 300); } else if (e.getSource() == zhong) { mp.setSD(250, 80); this.setDS(0, 305 - 250); } else if (e.getSource() == gao) { mp.setSD(200, 50); this.setDS(0, 305 - 200); } else if (e.getSource() == chao) { mp.setSD(150, 30); this.setDS(0, 305 - 150); } } public static void main(String[] args) { new She(); } /** * Method windowOpened * * * @param e * */ public void windowOpened(WindowEvent e) { // TODO: Add your code here } public void windowClosing(WindowEvent e) { System.exit(0); } public void windowClosed(WindowEvent e) { // TODO: Add your code here } public void windowIconified(WindowEvent e) { // TODO: Add your code here } public void windowDeiconified(WindowEvent e) { // TODO: Add your code here } public void windowActivated(WindowEvent e) { // TODO: Add your code here } public void windowDeactivated(WindowEvent e) { // TODO: Add your code here } } class MyPaint extends JPanel implements Runnable, KeyListener, FocusListener { She s; Font f = new Font("宋体", Font.PLAIN, 12); int x = 150; int y = 0; Random r = new Random(); int sjx = r.nextInt(300)/10*10; int sjy = r.nextInt(300)/10*10; int fx = 2; int sw = 0; int sd = 300; int cs = 0; int d = 150; String[] zx = new String[1000]; boolean zanting = false; boolean zanting1 = false; boolean siwang = false; boolean shenti = false; public MyPaint() { Thread t = new Thread(this); t.start(); this.addKeyListener(this); this.setFocusable(true); this.addFocusListener(this); } public void setShe(She ss) { s = ss; } public void setZanTing() { if (zanting) { zanting = false; } else { zanting = true; } } public void setKaiShi() { JLabel ks = new JLabel("是否重新开始?"); ks.setFont(f); int a = JOptionPane.showConfirmDialog(s, ks); if (a == 0) { x = 150; y = 0; sjx = r.nextInt(300)/10*10; sjy = r.nextInt(300)/10*10; fx = 2; sw = 0; sd = 300; cs = 0; zanting = false; siwang = false; shenti = false; s.setChu(); s.setDS(sw, 305 - sd); } } public void setTuiChu() { JLabel tc = new JLabel("确定退出吗?"); tc.setFont(f); int a = JOptionPane.showConfirmDialog(s, tc); if (a == 0) { s.dispose(); System.exit(0); } } public void setSD(int a, int b) { sd = a; d = b; } public void paint(Graphics g) { zx[cs] = x + "/" + y; super.paint(g); g.setColor(Color.BLACK); g.drawRect(0, 0, 300, 300); g.setColor(Color.BLACK); g.fillRect(sjx, sjy, 10, 10); g.setColor(Color.BLUE); g.fillRect(x, y, 10, 10); g.setColor(Color.RED); for (int i = 1; i <= sw; i++) { int j = cs - i; if (j < 0) { j = cs-i+999+1; } String[] s = zx[j].split("/"); if (x == Integer.parseInt(s[0]) && y == Integer.parseInt(s[1])) {//蛇撞到自己身上了 siwang = true; shenti = true; } if (sjx == Integer.parseInt(s[0]) && sjy == Integer.parseInt(s[1])) {//食物在蛇身体上 g.setColor(Color.BLACK); g.fillRect(sjx, sjy, 10, 10); g.setColor(Color.RED); continue; } g.fillRect(Integer.parseInt(s[0]), Integer.parseInt(s[1]), 10, 10); } } public void run() { while (true) { cs++; if (cs == 1000) { cs = 0; } switch (fx) { case 1: y-=10;//上 break; case 2: y+=10;//下 break; case 3: x-=10;//左 break; case 4: x+=10;//右 break; } this.repaint(); if (x == sjx && y == sjy) { sjx = r.nextInt(300)/10*10; sjy = r.nextInt(300)/10*10; sw++; if (sw == 1) { s.setNanDu(); } if (sd <= d) { sd = d; } else { sd-=5; } s.setDS(sw, 305 - sd); } if (x < 0 || x > 290 || y < 0 || y > 290 || shenti) { JOptionPane.showMessageDialog(s, "游戏结束!"); siwang = true; shenti = false; } while (zanting || zanting1) { try { Thread.sleep(100); } catch (Exception e) { } } while (siwang) { try { Thread.sleep(100); } catch (Exception e) { } } try { Thread.sleep(sd); } catch (Exception e) { } } } public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case 38: fx = 1;//上 break; case 40: fx = 2;//下 break; case 37: fx = 3;//左 break; case 39: fx = 4;//右 break; case KeyEvent.VK_F3: this.setZanTing(); break; case KeyEvent.VK_F2: this.setKaiShi(); break; case KeyEvent.VK_F4: this.setTuiChu(); break; } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void focusGained(FocusEvent e) { zanting1 = false; } public void focusLost(FocusEvent e) { zanting1 = true; } }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 专业课程 设计 贪吃 游戏
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文