1、摘要 随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域, 包括医药,汽车工业,手机行业,游戏,等等地方。Java游戏的开发为满足人们娱乐所需而设计。 本游戏为打砖块游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。 本课程设计报告介绍了游戏的构想,分析,开发,实现的过程。论述了游戏的功能开发,设计构思。给出了游戏的设计步骤,游戏系统关键的设计思想;在游戏系统
2、实现章节给出了部分功能流程和相关代码。 关键词:游戏,打砖块 目 录 JAVA程序课程设计任务书 II 摘要 IV 目 录 V 第1章 引言 1 1.1 背景 1 1.2 课程设计内容 1 1.3 任务分工 2 第二章 弹砖块小游戏应用程序 3 2.1 弹砖块小游戏应用程序概述 3 2.1.1 打砖块小游戏系统任务及目的 3 2.2 主要特色系统介绍 3 2.3 本章小结 4 第3章 打砖块游戏系统的设计 5 3.1 系统需求分析 5 3.2 系统开发及运行环境 5 3.3 系统主要功能要求
3、5 3.4.1 打砖块系统总体结构 6 3.4 系统数据流图 9 3.5 本章小结 9 第4章 系统数据库设计 10 4.1数据库设计过程 10 4.1需求分析 10 4.2功能实现 10 4.3 本章小结 11 第5章 系统的具体实现 12 5.1界面设计 12 5.1.1 用户登录界面图 12 5.1.2 游戏主界面 13 5.2程序设计及调试运行 19 5.2.1自动计时 19 5.2.2 在JPanel中画图 20 5.2.3用户注册登录系统 21 5.2.4 游戏结果的存储 22 5.3 本章小结 23 第6章 结束语 24 致谢 25 参
4、考文献 26 附录 源代码 27 III 第1章 引言 1.1 背景 游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。面对游戏产业如此巨大的市场空间,国内各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训已随着游戏行业的总体发展开始逐步迈入了正轨。 虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发
5、展,这就更加严格了对社会培训机构的稳定性和正规性的要求。在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。 所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。 1.2 课程设计内容 打砖块游戏是一种动作电子游戏的名称。玩家操作一根萤幕上水平的弹板,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。球碰到砖块、弹板与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。游戏的功能包含以下内容
6、 (1)基本的游戏操作 用户可以通过鼠标或者键盘来操作弹板,尽量让弹球不要掉下底下。开始按钮和暂停按钮可以控制游戏的进行。 (2)宝物获得功能 用户在游戏过程中,可能获得相关的宝物,可以使弹板增长一部分。 (3)速度设置功能 本游戏有5个速度设置,可以根据用户的需要,调节到用户想要的速度进行游戏。 (4)音乐设置功能 用户可以根据自己的喜好,选择自己喜欢的音乐,或者是关掉它。 (5)用户注册登录功能 每个用户在游戏开始时都要输入用户的信息注册,登录,并记录。当用户退出游戏以后,系统将记录用户的游戏信息。 (6)计分,记时功能 用户在游戏的过程中,
7、系统将记录游戏的成绩,并保存在文件中,用户退出游戏后也可以查询成绩。 1.3 任务分工 第二章 弹砖块小游戏应用程序 2.1 弹砖块小游戏应用程序概述 此程序设计是一个小游戏(弹砖块)的实现,主要运用了用户图形界面,程序接口和基本函数绘制来实现,事件监听(包括鼠标事件,键盘事件,响应时间)也是这个程序的特色。此程序用到了图片的引用,砖块、弹板应用了函数绘制和图片引用,弹球的设计外且安全是应用函数绘制。游戏还利用JAVA Applet实现了播放声音。再加入复选框,按钮,标签等来实现本游戏用户界面布局。总之,本游戏
8、在用户界面的可操作性、游戏的美观度、计分计时存储结果方便都基本完善,有一定的可玩性。 2.1.1 打砖块小游戏系统任务及目的 此小程序是为群众闲暇消遣之用,玩家在进入游戏后输入自己的大名,按游戏规则用弹球打掉弹板上的全部砖块,获得相应的分数,进入下一关,知道全部过关,游戏结束后可记录玩家分数及排行榜名次 进入游戏界面,一个文本框可以选择是否记录游戏这名字,接着是“开始”、“暂停”、“重新开始”按钮以及四个复选框分别控制背景音乐、速度、模型和关卡,还有四标签记录时间、生命分数和排行榜数据。 2.2 主要特色系统介绍 游戏增加了背景音乐以及碰撞音乐的设置,并用图片代替了纯粹用函数
9、构造出的砖块,使玩家在使用此程序时更加能体验到乐趣。自主选关、模式选择和速度选择给了玩家更多的自主机动性,使得玩家可以根据自己的意愿来设定游戏难度,排行榜功能也是特色之一,玩家可以根据排行榜来了解自己玩的如何,可以有个相对的比较。 2.3 本章小结 虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏具备了弹砖块这个经典游戏锁应该具有的基本雏形。通过这一章,我们对这个游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。 第3章 打砖块游戏系统的设计
10、 这一章是打砖块游戏系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。 3.1 系统需求分析 打砖块的设计目标为: (1)实现打砖块游戏功能,使用背景音乐,可用键盘或者鼠标控制挡板,并对游戏时间,游戏分数进行记录并保存成绩到文本,列出成绩排行榜。 (2)实现游戏难度和游戏模型的选择,通过本关后可以选择进入下一关。 (3)得到不同宝物可以实现多种游戏功能,加强游戏可玩性。 3.2 系统开发及运行环境 硬件平台: q CPU:INTEL-I5。 q 内存:1024MB以上。 软件平台: q 操作系统:Windows XP
11、 q 数据库:TXT文档。 q 开发工具包:JDK Version1.6.2。 q 分辨率:最佳效果1024×768像素。 3.3 系统主要功能要求 本系统为了实现游戏打砖块。本系统主要实现如下功能: q 系统界面美观大方舒适。 q 实现游戏一些基础信息的保存和读取。 q 画面流畅,具有可玩性 q 没有较大的游戏BUG。 q 显示游戏者的游戏时间和积分。 q 存储玩家的积分。 q 实现多种难度的选择。 q 实现多种砖块的排列模型。 q 多种宝物可以实现不同的功能 q 玩家
12、可以输入名称存入数据库。 q 系统最大限度地实现了易维护性和易操作性。 q 系统运行稳定、安全可靠。 q 实现用户的注册及注册信息的保存 3.4.1 打砖块系统总体结构 打砖块游戏是基于基本的软件和普通硬件基础上的传统优秀游戏,一个游戏应该包括以下几大功能,如图3.1所示 打砖块系统 数据保存 查询统计 基础游戏功能 用户注册 输入姓名 姓名得分记录 查询游戏分数 打砖块 游戏难度调整 游戏模型调整 图3.1
13、 系统功能结构图 各功能模块实现的功能为: 游戏管理模块:实现基本的打砖块操作并实现游戏模型调整和游戏难度调整。 查询统计:让玩家注册用户并保存它的游戏数据。实现游戏分数的查询。 游戏管理模块图如图3.2所示。 游戏管理模块 打砖块功能实现模块 游戏模型调整模块 游戏难度调整模块 图3.2游戏管理功能模块图 查询统计模块图如图3.3所示 查询统计 输入用户名 姓名得分记录 查询分数模块 用户注册信息保存 图3.3 查询统计功能模块图 3.4 系统数据流图 游戏信息的流向,即系统数据流图如图2.3所示。 游戏注册和信息保存
14、 开始游戏并记录分数 显示玩家得分 存储玩家得分并判断能否进排行榜 更改玩家游戏分数 输出玩家分数榜 图3.3系统数据流图 3.5 本章小结 本章是打砖块游戏的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。这里我们开始接触JAVA程序设计的最初步骤,也是很重要的一步。 第4章 系统数据库设计 本章是打砖块的数据库设计,有了数据库,就可以对游戏的成绩,玩家姓名进行保存,提高游戏的可玩性、竞争性 4.1数据库设计过程 数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库应用系统,使之能有效的存储数
15、据,满足各种用户的应用需求。数据库设计方法是研究数据库及其应用系统的技术,是数据库在应用领域中的主要的研究课题。 4.1需求分析 打砖块的游戏存储需要两部分:一是游戏姓名注册以及存储,二是游戏分数存储 4.2功能实现 运用较为简单的java程序代码,先需要注册用户名,效果如图4.2.1将游戏数据存入一个名为score.txt的文本文档。实现效果如下图4.2.2 图4.2.1 图4.2.2 游戏信息的存储 4.3 本章小结 本章是打砖块游戏系统的数据库开发。采用的是TXT文本 。
16、 第5章 系统的具体实现 界面是系统和玩家之间最直接的交互界面,界面的友好性体现了程序设计的质量,界面是否便捷易懂也是程序所基本的要求。 5.1界面设计 5.1.1 用户登录界面图 5.1.2 游戏主界面 上图就是进入游戏后的界面,接下来用一个框图来表现界面的说明。 界面的初始化的关键代码为: public class Game extends JFrame implem
17、ents Runnable, KeyListener, ActionListener { private String s = new String("打砖块游戏"); // 定义组件 JToolBar toolbar = new JToolBar(); // 工具栏 JButton gstart = null; // 开始按钮 JButton gstop = null; // 暂停按钮 JButton grestart = null; // 重新开始按钮 JButton setmusic = null; // 设置音乐按钮 JButton setsp
18、eed; // 设置速度按钮 JLabel ctime = null; // 计时标签 JLabel clife=null;//生命标签 JLabel cscore=null;//分数标签 JComboBox gmodel = null; // 砖块排列模型 JComboBox setgate=null; //设置关卡 JTextField setName=null;//游戏者姓名 // 定义变量 static int speed = 100; // 速度(全局静态) static boolean isfire = true; // isfire为true
19、时,有碰撞声 static int toolgate = 0; static boolean respeed = false; int hours = 0, minutes = 0, seconds = 0; int m = 8, n = 5; int life = 3; // 生命 int score=0;//分数 boolean isstop = true;// 开始 暂停 boolean setpaddle = true; boolean setball = true; int model = 1; // 砖块叠放的模型 0为矩形 1为三角形 2为
20、倒三角形3为空三角形4为六边形 // 定义嵌入对象 SetMusic GetMusic; // 音乐窗口 SetSpeed settingspeed; // 速度窗口 FireVoice firevoice; // 声明碰撞声音类 Thread t = new Thread(this); // 定义图形 Brick brick[][] = null; // 砖块 Ball ball = new Ball(); // 球 Paddle paddle = new Paddle(); // 板块 Treasure[] treasure = new Treasu
21、re[4]; // 宝物 MyPanel panel; // 画板 BufferedImage img1; // 图片 BufferedImage img2; /** * 主界面初始化函数 * **/ public void init() { initvariable(); GetMusic = new SetMusic();// 开启音乐 settingspeed = new SetSpeed();// 初始化速度设置窗口 firevoice = new FireVoice(); setName=new JTextFie
22、ld(10);//输入姓名对话框 // 设置窗体 setSize(800, 500); setBackground(Color.white); panel = new MyPanel(); this.setResizable(false); this.setLocation(200, 200); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); this.setTitle(s); // 初始化按钮 gstart
23、 = new JButton("开始"); gstop = new JButton("暂停"); grestart = new JButton("重新开始"); setmusic = new JButton("设置音乐"); setspeed = new JButton("设置速度"); // 初始化计时标签 ctime = new JLabel("计时:00:00:00"); clife=new JLabel("生命:3"); cscore=new JLabel("分数:0"); // 初始化下拉栏 String[] smodel
24、 { "模型1", "模型2", "模型3", "模型4", "模型5" }; gmodel = new JComboBox(smodel); String[] sgate={"第1关","第2关","第3关","第4关","第5关"}; setgate=new JComboBox(sgate); // 将组件添加到工具栏 toolbar.add(gstart); toolbar.addSeparator();//添加分隔栏 toolbar.add(gstop); toolbar.addSeparator();//添加分隔栏 toolba
25、r.add(grestart); toolbar.addSeparator();//添加分隔栏 toolbar.add(setmusic); toolbar.addSeparator();//添加分隔栏 toolbar.add(setspeed); toolbar.addSeparator();//添加分隔栏 toolbar.add(gmodel); toolbar.addSeparator();//添加分隔栏 toolbar.add(setgate); toolbar.addSeparator();//添加分隔栏 toolbar.a
26、dd(ctime); toolbar.addSeparator();//添加分隔栏 toolbar.add(clife); toolbar.addSeparator();//添加分隔栏 toolbar.add(cscore); // 添加组件到画板 contentPane.add(toolbar, BorderLayout.NORTH); contentPane.add(panel, BorderLayout.CENTER); // 监听事件 gstop.setEnabled(false); gstart.addActionListe
27、ner(this); gstop.addActionListener(this); grestart.addActionListener(this); setmusic.addActionListener(this); setspeed.addActionListener(this); gmodel.addActionListener(this); setgate.addActionListener(this); setName.addActionListener(this); addMouseMotionListener(new MouseMo
28、ve()); panel.addKeyListener(this); panel.requestFocus(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //输入姓名 setVisible(true); int h = JOptionPane.showConfirmDialog(null, setName,"输入姓名", JOptionPane.YES_NO_OPTION); if (h == 1) { System.exit(0); } else { t.star
29、t(); } } 5.2程序设计及调试运行 编写12个CLASS文件,存入一个包“S”中,各个模块的程序代码都完成后,进行编译连接运行,经过反复调试,找出错误和不足,以达到游戏所需的基本功能和基本界面。这个过程比较繁琐,我们参考网络上现有的资源,并加以改进,对各个模块仔细分析备注并进行调试,做到程序简洁易懂,可读性好。尽量避免因代码不完善而导致的游戏运行中可能出现的错误。 5.2.1自动计时 游戏的自动计功能是非常有必要的,可以让玩家很直观地看到自己所玩的时间。下面是自动计时功能的部分关键代码: public String
30、 gettimes(int hours, int minuts, int seconds) { // 设置时间格式 String text; if (hours < 10) text = "时间:"+"0" + hours; else text = String.valueOf(hours); if (minutes < 10) text = text + ":" + "0" + minutes; else text = text + ":" + minutes; if (seconds < 10) text = te
31、xt + ":" + "0" + seconds; else text = text + ":" + seconds; return text; } 5.2.2 在JPanel中画图 JPanel 是一般轻量级容器,可以向JPanel容器中放入JPanel,JTextfiled,JButton等。Swing的JPanel支持double buffering的功能,使得JPanel在处理动画上更为流畅,较不会有画面闪烁的情况发生。 下面是此程序运用Jpanel画图的部分主要代码: class MyPanel extends JPanel {
32、protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; ctime.setText(gettimes(hours, minutes, seconds)); // 设置时间 g.drawImage(img1, (int) paddle.xpaddle, (int) (paddle.ypaddle), (int) paddle.width, (int) paddle.height, null);// 画板块 for (int j = 0; j < brick
33、[0].length; j++) { // 画砖块 for (int i = 0; i < brick.length; i++) { brick[i][j].xBrick = i * (800 / m); brick[i][j].yBrick = j * (200 / n); if (brick[i][j].alive == 1) { g.drawImage(img2, (int) brick[i][j].xBrick, (int) brick[i][j].yBrick, (int) brick[i
34、][j].width, (int) brick[i][j].heigh, null); } } } // 画球 g2d.setPaint(new GradientPaint((int) ball.xBall, (int) ball.yBall, Color.blue, (int) (ball.xBall + ball.r), (int) (ball.yBall + ball.r), Color.yellow, true)); g2d.fill(new Ellipse2D.Double(ball.xB
35、all, ball.yBall, ball.r, ball.r)); // 画宝物 g.setColor(Color.black); for (int k = 0; k < treasure.length; k++) { if (treasure[k].alive == 1) { g.fill3DRect((int) treasure[k].xtreasure, (int) treasure[k].ytreasure, (int) treasure[k].width, (int) treasure[k].
36、height, true); } } } } 5.2.3用户注册登录系统 下面给出登录功能的主要代码 public void loginDialog() { login = new JDialog(); login.setTitle("登录"); login.setLayout(new FlowLayout()); login.add(new JLabel("用户名:")); login.add(name);
37、 login.add(new JLabel("密 码:")); password.setEchoChar('*'); login.add(password); JButton confirm = new JButton("登录"); confirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (compareUserData(
38、name.getText().trim(), new String(password.getPassword()))) { login.setVisible(false); f.setVisible(true); } else { JOptionPane.showMessageDialog(login, "用户名或密码错误!", "错误提示", JOptionPane.ERROR_MESSAGE); } } }); logi
39、n.add(confirm); final JDialog regDialog = new JDialog(login, "注册", true); registerDialog(regDialog); JButton register = new JButton("注册"); register.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
40、 regDialog.setVisible(true); } }); login.add(register); login.setSize(200, 130); login.setResizable(false); login.setLocationRelativeTo(null); login.setVisible(true); } 5.2.4 游戏结果的存储 此功能将用户游戏后的结果存入TXT文档中 关键代码如下 public boolean
41、 saveUserData(String name, String sex, String password1, String password2) { if (!password1.equals(password2)) return false; try { RandomAccessFile out = new RandomAccessFile("user.txt", "rw"); out.seek(out.length()); out.writeUTF(name); out.writeUTF(sex); out.writeUT
42、F(password1); out.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; } //保存成绩 public void saveScore(){ try{ RandomAccessFile raf=new RandomAccessFile("score.txt","rw"); String s=String.valueOf(score); ra
43、f.seek(raf.length()); raf.writeBytes("name:"+name.getText()); raf.writeBytes(" score:"+s+" "); }catch(IOException e ){} } 5.3 本章小结 本章介绍了程序的具体实现和部分关键代码,包括自动计时,界面初始化和用Jpanel画图的部分源代码,在这里我们对本程序有了更加深入彻底的了解。 第6章 结束语 由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开
44、发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。通过小游戏的设计,对以学过的内容加深理解,对游戏开发的过程有初步的认识,为以后的游戏开发设计和更加深入的学习计算机语言打下夯实的基础。 目前竞争日益激烈的行业环境,对于未来行业的前景,还是要保持乐观的心态。毕竟游戏并不是一下子就可以编写成的。需要不断的技术积累,需要团队的合作,提高了工作的效率,才算是在游戏开发的道路上成功了一半。在现在这个信息化飞速发展的道路上,要成为一名合格的编程人员,那就必须走好每一步现在的路。 基于Java的打砖块小游戏,满足了用户娱乐的需求,已经达到了预期的目标。虽然该游戏大部分功能基本
45、上已经实现,但是还是会存在一些不足: (1)游戏中存在一些BUG,游戏中弹球有时不会下落,未碰到的砖块却自动消失了。 (2)游戏的关卡太少,样式不够多样化,不能满足用户对该游戏的挑战。 (3)游戏的色彩不够多样化,色彩单一,不能给用户增加新鲜的娱乐感。 (4)对于用户信息方面,由于该程序没有涉及到数据库的相关内容,在用户信息存储,用户信息更新功能方面表现欠佳。在用户信息功能的方面有待进一步改善。 致谢 参考文献 [1] (美) 埃克尔著 陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业
46、出版社,2005 [2](美)Gary J.Bronson著 张珑 刘雅文译. Java编程原理[J]. 清华大学出版社,2004 [3](美)Michael Morrison著 徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,2005.9 [4](美)Wendy Stahler著 冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005 [5](美)克罗夫特(David Wallace Croft)著 彭晖译. Java游戏高级编程[J]. 清华大学出版社,2005 [6] (美)David Brackeen著 邱仲潘译. Java游戏编程[J]. 科
47、学出版社,2004 [7] 聂庆亮编著. Java应用开发指南[J]. 清华大学出版社,2010 [8] 耿祥义,张跃平编著. Java面向对象程序设计[J]. 清华大学出版社,2010 [9] 杨绍方编著. Java编程实用技术与案例[J]. 清华大学出版社,2000.11 [10] 明日科技编著. Java编程全能词典[J]. 电子工业出版社,2010 附录 源代码 此游戏包含8个java文件,Ball.java, Brick.java, Paddle.java, Treasure.java, Nextnew.java,
48、 SetMusic.java, SetSpeed.java, Game.java。 Ball.java package s; //球 public class Ball { double xBall=10,yBall=470; double r=20; public Ball (){ } } Brick.java package s; //砖块 public class Brick { double xBrick=0,yBrick=0; double width=60; double heigh=40; int aliv
49、e=0; int istreasure=0; public Brick(){ } } Paddle.java package s; //档板 public class Paddle { public double xpaddle=320; public double width=150; public double height=20; public double ypaddle=435-height; } Treasure.java package s; //宝物 public class Treasure {
50、 int alive=0; double xtreasure=0,ytreasure=0,width=10,height=10; public Treasure(){ } } NextNew.java package s; //下一关 import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class NextNew extends JFrame implemen






