《java课程设计报告贪吃蛇游戏设计》由会员分享,可在线阅读,更多相关《java课程设计报告贪吃蛇游戏设计(12页珍藏版)》请在金锄头文库上搜索。
1、.前言前言Java 最初被命名为 Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高, Sun 放弃了该项计划。就在Oak 几近失败之时,随着互联网的发展, Sun 看到了 Oak 在计算机网络上的广阔应用前景。 于是改造了 Oak, 以“Java”的名称正式发布。Java 编程语言的风格十分接近C、C+语言。 Java 是一个纯的面向对象的程序设计语言,它继承了C+ 语言面向对象技术的核心。Java 舍弃了 C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overlo
2、ading )、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的存空间,使得程序员不用再为存管理而担忧。在Java SE 1.5版本中,Java 又引入了泛型编程(Generic Programming )、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码( bytecode ),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了 “一次编译、到处执行 ”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java 程序的运行效
3、率。但在J2SE 1.4.2发布后, Java 的执行速度有了大幅提升。与传统程序不同, Sun 公司在推出Java 之际就将其作为一种开放的技术。全球数以万计的Java 开发公司被要求所设计的Java 软件必须相互兼容。 “Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun 公司对 Java 编程语言的解释是: Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。.!.正文正文1.11.1 课程设计目的课程设计目的JAVA 程
4、序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。 本课程的程序设计专题实际是计算机相关专业学生学习完JAVA 程序设计课程后,进行的一次全面的综合训练, JAVA 程序设计的设计目的是加深对理论教学容的理解和掌握, 使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。2.12.1 工程概况工程概况2.1.12.1.1 案例提出及工程用时案例提出及工程用时经过两天在图书馆以及网络上查阅的资料,然后提出这次课程设计的目标贪吃蛇游戏的设计。然后
5、接下来就是查阅更多的资料,制定接下来的详细计划,最终计划用两周的时间完成此次课程设计提出的案例。2.1.22.1.2 开发环境开发环境硬件环境:硬件环境:CPU:Intel Pentium(R)4主频:2.40GHz存:256MB软件环境:软件环境:操作系统:Windows *P编程环境: JDK 1.6开发工具:Eclipse jdk.!.3.13.1 设计方案论证设计方案论证3.1.13.1.1 设计思路设计思路贪吃蛇游戏设计与实现, 主要分为以下二个模块: 游戏主界面模块和游戏控制模块。 在此只实现游戏的游戏主界面模块、游戏控制模块。 并且只是实现移动速度、暂停、重新开始等功能。游戏主界
6、面模块:游戏的主界面是进入游戏后, 能够给玩家第一感官的部分, 主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、 暂停游戏按钮、重新开始游戏按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。游戏控制模块:这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。本设计所开发的是基于 Java 的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。3.1.23.1.2 程序概述程序概述本程序是一个
7、利用 Java 应用软件制作的贪食蛇小游戏。在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;游戏运行过程中,如果想暂停,只需要按F3 键即可。重新开始游戏的按键为F2。当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中的移动和长度。3.1.33.1.3 程序流程图程序流程图本次游戏设计的处理流程如图1 所示。.!.进入游戏画面单击“F2”按钮,游戏开始,蛇开始随机。键盘操作:左移右移向下向上没有吃到食物且蛇碰到边界游戏中途欲中断,稍后继续游戏单击“确定”游戏结束单击“F3 暂停游戏”再次单击开始F3 按钮, 游戏恢复
8、图图 1.1.程序流程图程序流程图3.1.43.1.4 总设计模块的划分总设计模块的划分根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。.!.贪吃蛇游戏游戏游主戏界控面制模模块块图图 2.2.设计总模块设计总模块游戏控制模块的主要框架如图3 所示。游戏控制模块游游游戏戏戏的的的暂重退停新出功开能始图图 3.3.控制模块框架控制模块框架游戏暂停控制:点击“F3”按钮,游戏暂停;再单击,游戏继续。游戏重新开始控制:点击“F2”键后,点击确定,即游戏重新开始。游戏退出控制:点击“F4”键好,点击确定,退出游戏界面。3.1.53.1.5 类、方法、属性说明类、方法、属
9、性说明(1)成员变量.!.表表 1 1 主要成员变量(属性)主要成员变量(属性)成员变量描述成员变量描述文件菜单中子菜单“新建”编辑菜单中子菜单“撤消”格式菜单中子菜单“颜色”帮助菜单中子菜单“帮助主题”(2)方法变量类型变量类型JMenuItemJMenuItemJMenuMenuItem名称名称mFile_NewmEdit_UndoformatMenu_ColormHelp_HelpTopics表表 2 2 主要方法主要方法方法名方法名Notepad4()Te*t.setBackground(Color.black)Te*t.setForeground(Color.black)功能功能描述
10、记事本设置编辑区默认背景色设置编辑区默认前景色备注备注无无无4.14.1 设计结果与分析设计结果与分析本程序在运行后,能够正常的相应按键事件。由于程序的主要部分已经集成为一个对象 SnakeModel,所以利用键盘就可以实现操作。蛇前行的过程中,可以任意向其左或右方向改变方向。点击 F3 键后游戏就暂停了。点击 F2 键游戏重新开始。点击 F4 游戏退出。运行结果如下图 4 所示:图图 4 4 程序运行图程序运行图当蛇没有吃到食物且碰到边界或碰撞到自己的身体时, 游戏结束。 如果想重新开始即点击“确定”后按 F2 键,运行结果如下图 5 所示:图图 5 5 重新开始图重新开始图4.1.14.1
11、.1 程序异常处理程序异常处理在蛇的运行线程过程中, 当蛇撞到墙或自己的身体时, 将抛出一个 E*ception 类的异常对象,然后使用 try-catch 去捕捉这个异常,.!.异常的处理如下:tryThread.sleep(timeInterval); catch(E*ception e)break;心得体会心得体会通过这次课程设计,我对这学期所学的JAVA 语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到
12、自己对Java程序的又有了新的认识。总之, 通过本次的课程设计, 使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合, 为我今后参加工作打下了坚实的基础, 使我受益匪浅。参考文献参考文献1文靖编著.Java 程序设计基础与上机指导.:清华大学,20062毅主编.跨平台程序设计语言Java.:电子科技大学,3王路群.Java 高级程序设计.:中国水利水电,20064雍俊海编著.Java 程序设计习题集.:清华大学,20065朱福喜编著.Java 语言习题与解析.:清华大学,20066吴其庆编著.Java 程序设计实例教程.:冶金工业,2006程序代码:程序代码:importim
13、port java.awt.*;importimport java*.swing.*;importimport java.util.*;importimport java.awt.event.*;.!.publicclasspublicclass She e*tendse*tends JFrame implementsimplementszhong.setFont(f);ActionListener, WindowListener JLabel bt1;JLabel bt2;MyPaint mp;JMenuItem kaishi;JMenuItem zanting;JMenuItem tuic
14、hu;JRadioButton chu;JRadioButton zhong;JRadioButton gao;JRadioButton chao;JMenuItem guanyu;Font f;publicpublic She() f = newnew Font(宋体, Font.PLAIN, 12);mp = newnew MyPaint();mp.setShe(thisthis);JMenuBar caidan = newnew JMenuBar();JMenu shezhi = newnew JMenu(设置);shezhi.setFont(f);JMenu nandu = newne
15、w JMenu(难度);nandu.setFont(f);JMenu bangzhu = newnew JMenu(帮助);bangzhu.setFont(f);caidan.add(shezhi);caidan.add(nandu);caidan.add(bangzhu);kaishi = newnew JMenuItem(开始游戏 F2);kaishi.setFont(f);kaishi.addActionListener(thisthis);zanting = newnew JMenuItem(暂停/继续F3);zanting.setFont(f);zanting.addActionLi
16、stener(thisthis);tuichu = newnew JMenuItem(退出 F4);tuichu.setFont(f);tuichu.addActionListener(thisthis);chu = newnew JRadioButton(初级,最快速度195, truetrue);chu.setFont(f);chu.addActionListener(thisthis);zhong = newnew JRadioButton(中级,最快速度225);.zhong.addActionListener(thisthis);gao = newnew JRadioButton(高
17、级,最快速度255);gao.setFont(f);gao.addActionListener(thisthis);chao = newnew JRadioButton(超级,最快速度275);chao.setFont(f);chao.addActionListener(thisthis);ButtonGroup bg = newnew 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);gu
18、anyu = newnew JMenuItem(关于);guanyu.setFont(f);guanyu.addActionListener(thisthis);shezhi.add(kaishi);shezhi.add(zanting);shezhi.add(tuichu);bangzhu.add(guanyu);bt1 = newnew JLabel(长度:0);bt1.setFont(f);bt2 = newnew JLabel(移动:5);bt2.setFont(f);JPanel p = newnew JPanel();p.setLayout(newnew GridLayout(1,
19、 2);p.add(bt1);p.add(bt2);thisthis.addWindowListener(thisthis);/添加窗体监听器thisthis.setJMenuBar(caidan);thisthis.add(p, BorderLayout.NORTH);thisthis.add(mp);thisthis.add(newnew JLabel(),BorderLayout.WEST);thisthis.setSize(335, 385);thisthis.setResizable(falsefalse);thisthis.setLocation(300, 150);.!.this
20、this.setTitle(MyPaint);thisthis.setVisible(truetrue);publicvoidpublicvoid setDS(intint a, intint b) bt1.setTe*t(长度: + a);bt2.setTe*t(移动: + b);publicvoidpublicvoid setChu() chu.setSelected(truetrue);mp.setSD(300, 110);thisthis.setDS(0, 305 - 300);chu.setEnabled(truetrue);zhong.setEnabled(truetrue);ga
21、o.setEnabled(truetrue);chao.setEnabled(truetrue);publicvoidpublicvoid setNanDu() chu.setEnabled(falsefalse);zhong.setEnabled(falsefalse);gao.setEnabled(falsefalse);chao.setEnabled(falsefalse);publicvoidpublicvoid actionPerformed(ActionEvent e) if if (e.getSource() = zanting) mp.setZanTing();elseifel
22、seif (e.getSource() = kaishi) mp.setKaiShi();elseifelseif (e.getSource() = tuichu) mp.setTuiChu();elseifelseif (e.getSource() = guanyu) JLabel gy = newnew JLabel(小游戏贪吃蛇V1.0);gy.setFont(f);JOptionPane.showMessageDialog(thisthis,gy);elseifelseif (e.getSource() = chu) mp.setSD(300, 110);thisthis.setDS(
23、0, 305 - 300);elseifelseif (e.getSource() = zhong) .mp.setSD(250, 80);thisthis.setDS(0, 305 - 250);elseifelseif (e.getSource() = gao) mp.setSD(200, 50);thisthis.setDS(0, 305 - 200);elseifelseif (e.getSource() = chao) mp.setSD(150, 30);thisthis.setDS(0, 305 - 150);publicstaticvoidpublicstaticvoid mai
24、n(String args) newnew She();/* Method windowOpened* paramparam e*/publicvoidpublicvoid windowOpened(WindowEvent e) / TODOTODO: Add your code herepublicvoidpublicvoid windowClosing(WindowEvent e) System.e*it(0);publicvoidpublicvoid windowClosed(WindowEvent e) / TODOTODO: Add your code herepublicvoidp
25、ublicvoid windowIconified(WindowEvent e) / TODOTODO: Add your code herepublicvoidpublicvoid windowDeiconified(WindowEvente) / TODOTODO: Add your code herepublicvoidpublicvoid windowActivated(WindowEvent e)/ TODOTODO: Add your code herepublicvoidpublicvoid windowDeactivated(WindowEvente) .!./ TODOTOD
26、O: Add your code hereclassclass MyPaint e*tendse*tends JPanel implementsimplementsRunnable, KeyListener, FocusListener She s;Font f = newnew Font(宋体, Font.PLAIN, 12);intint a = JOptionPane.showConfirmDialog(s,ks);if if (a = 0) * = 150;y = 0;sj* = r.ne*tInt(300)/10*10;sjy = r.ne*tInt(300)/10*10;intin
27、t * = 150;intint y = 0;Random r = newnew Random();intint sj* = r.ne*tInt(300)/10*10;intint sjy = r.ne*tInt(300)/10*10;intint f* = 2;intint sw = 0;intint sd = 300;intint cs = 0;intint d = 150;String z* = newnew String1000;booleanboolean zanting = falsefalse;booleanboolean zanting1 = falsefalse;boolea
28、nboolean siwang = falsefalse;booleanboolean shenti = falsefalse;publicpublic MyPaint() Thread t = newnew Thread(thisthis);t.start();thisthis.addKeyListener(thisthis);thisthis.setFocusable(truetrue);thisthis.addFocusListener(thisthis);publicvoidpublicvoid setShe(She ss) s = ss;publicvoidpublicvoid se
29、tZanTing() if if (zanting) zanting = falsefalse;elseelse zanting = truetrue;publicvoidpublicvoid setKaiShi() JLabel ks = newnew JLabel(是否重新开始?);ks.setFont(f);.f* = 2;sw = 0;sd = 300;cs = 0;zanting = falsefalse;siwang = falsefalse;shenti = falsefalse;s.setChu();s.setDS(sw, 305 - sd);publicvoidpublicv
30、oid setTuiChu() JLabel tc = newnew JLabel(确定退出吗?);tc.setFont(f);intint a = JOptionPane.showConfirmDialog(s,tc);if if (a = 0) s.dispose();System.e*it(0);publicvoidpublicvoid setSD(intint a, intint b) sd = a;d = b;publicvoidpublicvoid paint(Graphics g) z*cs = * + / + y;supersuper.paint(g);g.setColor(C
31、olor.BLACK);g.drawRect(0, 0, 300, 300);g.setColor(Color.BLACK);g.fillRect(sj*, sjy, 10, 10);g.setColor(Color.BLUE);g.fillRect(*, y, 10, 10);g.setColor(Color.RED);forfor (intint i = 1; i = sw; i+) intint j = cs - i;.!.if if (j 0) j = cs-i+999+1;String s = z*j.split(/);if if (* = Integer.parseInt(s0)
32、& y =Integer.parseInt(s1) /蛇撞到自己身上了sw+;if if (sw = 1) s.setNanDu();if if (sd = d) sd = d;siwang = truetrue;shenti = truetrue;if if (sj* = Integer.parseInt(s0) & sjy =Integer.parseInt(s1) /食物在蛇身体上g.setColor(Color.BLACK);g.fillRect(sj*, sjy, 10, 10);g.setColor(Color.RED);continuecontinue;g.fillRect(In
33、teger.parseInt(s0),Integer.parseInt(s1), 10, 10);publicvoidpublicvoid run() whilewhile (truetrue) cs+;if if (cs = 1000) cs = 0;switchswitch (f*) casecase 1:y-=10;/上breakbreak;casecase 2:y+=10;/下breakbreak;casecase 3:*-=10;/左breakbreak;casecase 4:*+=10;/右breakbreak;thisthis.repaint();if if (* = sj* &
34、 y = sjy) sj* = r.ne*tInt(300)/10*10;sjy = r.ne*tInt(300)/10*10;.elseelse sd-=5;s.setDS(sw, 305 - sd);if if (* 290 | y 290 | shenti)JOptionPane.showMessageDialog(s, 游戏结束!);siwang = truetrue;shenti = falsefalse;whilewhile (zanting | zanting1) trytry Thread.sleep(100);catchcatch (E*ception e) whilewhi
35、le (siwang) trytry Thread.sleep(100);catchcatch (E*ception e) trytry Thread.sleep(sd);catchcatch (E*ception e) publicvoidpublicvoid keyPressed(KeyEvent e) switchswitch (e.getKeyCode() casecase 38:f* = 1;/上.!.breakbreak;casecase 40:f* = 2;/下breakbreak;casecase 37:f* = 3;/左breakbreak;casecase 39:f* =
36、4;/右breakbreak;casecase KeyEvent.VK_F3:thisthis.setZanTing();breakbreak;casecase KeyEvent.VK_F2:thisthis.setKaiShi();breakbreak;.casecase KeyEvent.VK_F4:thisthis.setTuiChu();breakbreak;publicvoidpublicvoid keyReleased(KeyEvent e) publicvoidpublicvoid keyTyped(KeyEvent e) publicvoidpublicvoid focusGained(FocusEvent e) zanting1 = falsefalse;publicvoidpublicvoid focusLost(FocusEvent e) zanting1 = truetrue;.!