Java课程教学设计报告-扫雷小游戏.doc

举报
资源描述
^` JAVA语言课程设计报告 题 目:扫雷小游戏 设 计 者: 专业班级: 学 号: 指导教师: 2011年 12月 12日 计算机学院 目录: 1设计内容及要求…………………………………………………..1 1.1扫雷小游戏的基本要求……………………………………….1 1.2 需求实现的主要功能…………………………………………...1 2需求分析…………………………………………………………..1 2.1 扫雷区域的布局设计…………………………………………...1 2.2 雷区的设计………………………………………………………1 2.3 音效的设计…………………………………………………….1 3 总体设计………………………………………………………..2 3.1总体功能图……………………………………………………..2 3.2游戏设计流程图…………………………………………………2 4 主要功能设计……………………………………………………3 4.1 雷区设计流程图…………………………………………………3 4.2 音效设计流程图…………………………………………………4 4.3 排行榜设计流程图………………………………………………5 5 代码实现………………………………………………………….6 5.1 类之间的关系图…………………………………………………6 5.2 各界面图及代码:………………………………………………6 5.2.1 游戏菜单界面………………………………………………6 5.2.2 游戏登录界面(初级、中级、高级)…………………….8 5.2.3自定义扫雷界面……………………………………………..15 6扫雷总结……………………………………………………………18 7参考文献…………………………………………………………18 1设计内容及要求 1.1扫雷小游戏的基本要求 扫雷小游戏主要采用Java语言编写,适合windows XP 以下的系统,以eclipse为平台。具体要求如下: <1> 扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。单机游戏菜单选择“初级”、“中级”和“高级”。 <2> 游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。 <3> 用户选择某个方格,单击它就行。若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。 <4> 如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。 <5> 用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。 <6> 扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。 <7> 如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。 1.2 需求实现的主要功能 (1) 该游戏具有计时功能,即扫完全部地雷所花费的时间。 (2) 用户可以选择是否有音效。 (3) 用户可以自定义级别,还可以输入任意地雷数。 (4) 自动保存扫雷排行榜。 2需求分析 2.1 扫雷区域的布局设计 系统的整体布局为:CardLayout 布局,采用菜单、按钮、面板……等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。 2.2 雷区的设计 MineArea类是javax.swing 包中Jpanel容器的子类,实现了ActionListener和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。 2.3 音效的设计 music类是java.awt包中Frame的子类,通过构造音效声音方法,在MainFrame主类中,通过ActionListener来监视是否已开始游戏,来决定播放计时声,之后又通过ActionListener来监视是否踩到雷和是否完成来决定,播放相应的音乐。 2.4 排行榜设计 LogDialog是javax.swing包中Jdialog对话框的子类,并实现了ActiongListener接口。LogDialog创建的对象dialog是MainFrame类(主类)的成员之一,当用户选择查看“英雄榜”菜单项时,该对话框可见,提供了查看扫雷的最好成绩的界面。 3 总体设计 3.1总体功能图 图1-1 总体功能图 3.2游戏设计流程图 图1-2 游戏设计流程图 4 主要功能设计 4.1 雷区设计流程图 图1-3 雷区设计流程图 4.2 音效设计流程图 图1-4 音效设计流程图 4.3 排行榜设计流程图 图 1-5 排行榜设计流程图 5 代码实现 5.1 类之间的关系图 图1-6 类之间的关系图 5.2 各界面图及代码: 5.2.1 游戏菜单界面 图1-7 游戏菜单界面 其主要代码为:private void setMenuBar() {//设置菜单项 JMenuBar menuBar = new JMenuBar(); menuBar.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2)); JMenu gameMenu = new JMenu("游戏(G)"); JMenu helpMenu = new JMenu("帮助(H)"); gameMenu.setMnemonic(G); helpMenu.setMnemonic(H); 声音=new Voice(); startItem = new JMenuItem("开局(N)"); startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0)); logItem = new JMenuItem("扫雷英雄榜(T)..."); markCheckItem = new JCheckBoxMenuItem("标记(?)(M)"); soundItem=new JCheckBoxMenuItem("声音(S)"); exitItem = new JMenuItem("退出(X)"); aboutItem = new JMenuItem("关于扫雷(A)..."); startItem.setMnemonic(N); exitItem.setMnemonic(X); aboutItem.setMnemonic(A); aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0)); logItem.setMnemonic(T); soundItem.setMnemonic(S); soundItem.setSelected(sound); markCheckItem.setMnemonic(M); markCheckItem.setSelected(markCheck); gameMenu.add(startItem); gameMenu.addSeparator(); //radio group levelItem = new JRadioButtonMenuItem[4]; ButtonGroup levelGroup = new ButtonGroup(); levelItem[0] = new JRadioButtonMenuItem("初级(B)"); levelItem[1] = new JRadioButtonMenuItem("中级(I)"); levelItem[2] = new JRadioButtonMenuItem("高级(E)"); levelItem[3] = new JRadioButtonMenuItem("自定义(C)..."); levelItem[0].setMnemonic(B); levelItem[1].setMnemonic(I); levelItem[2].setMnemonic(E); levelItem[3].setMnemonic(C); for(int i=0;i<4;i++) { levelGroup.add(levelItem[i]); levelItem[i].addActionListener(this); gameMenu.add(levelItem[i]); } levelItem[currentLevel].setSelected(true); gameMenu.addSeparator(); gameMenu.add(markCheckItem); gameMenu.addSeparator(); gameMenu.add(soundItem); gameMenu.addSeparator(); gameMenu.add(logItem); gameMenu.addSeparator(); gameMenu.add(exitItem); helpMenu.add(aboutItem); startItem.addActionListener(this); markCheckItem.addActionListener(this); soundItem.addActionListener(this); logItem.addActionListener(this); exitItem.addActionListener(this); aboutItem.addActionListener(this); menuBar.add(gameMenu); menuBar.add(helpMenu); setJMenuBar(menuBar); } 5.2.2 游戏登录界面(初级、中级、高级) 图1-8 初级扫雷界面 图1-9 中级扫雷界面 图2.0 高级扫雷界面 其主要代码为:private LevelLog levelLog[]; private JTextArea logArea; private JButton resetButton; private JButton confirmButton; public LogDialog(JFrame frame, LevelLog log[]) { super(frame, "扫雷英雄榜", true); getContentPane().setLayout(null); levelLog = log; logArea = new JTextArea(); logArea.setEditable(false); logArea.setBackground(UIManager.getColor("CheckBox.background")); logArea.setBounds(10,10,160,60); getContentPane().add(logArea, null); resetButton = new JButton("重新计分"); resetButton.setBounds(10,70,90,25); resetButton.addActionListener(this); getContentPane().add(resetButton, null); setTextArea(); confirmButton = new JButton("确定"); confirmButton.setBounds(105,70,60,25); confirmButton.addActionListener(this); getContentPane().add(confirmButton, null); setSize(180,140); setLocationRelativeTo(frame); setResizable(false); show(); } private void setTextArea() { logArea.setText("初级:" + levelLog[0].toString() + "中级:" + levelLog[1].toString() + "高级:" + levelLog[2].toString()); } public void actionPerformed(ActionEvent e) { if(e.getSource()==resetButton) { for(int i=0;i<3;i++) { levelLog[i].setDefault(); } setTextArea(); } else { dispose(); } } 雷区界面设计代码: private Polygon segmentPolygon[]; private int numberSegment[][] = { {0, 1, 2, 3, 4, 5 }, //0 {1, 2 }, //1 {0, 1, 3, 4, 6 }, //2 {0, 1, 2, 3, 6 }, //3 {1, 2, 5, 6 }, //4 {0, 2, 3, 5, 6 }, //5 {0, 2, 3, 4, 5, 6 }, //6 {0, 1, 2 }, //7 {0, 1, 2, 3, 4, 5, 6 }, //8 {0, 1, 2, 3, 5, 6 } //9 }; private int div[] = {1,10,100,1000,10000,100000}; private Image numberImage[]; private Color fontColor = Color.red; //the color of number private Color bgColor = Color.black; private Color maskColor = Color.darkGray; private int dWidth = 12; private int dHeight = 21; public LedNumber() { init(); } public LedNumber(Color fc) { fontColor = fc; init(); } public LedNumber(Color fc, Color bgc) { bgColor = bgc; fontColor = fc; init(); } public LedNumber(Color fc,Color bgc,Color mc) { bgColor = bgc; fontColor = fc; maskColor = mc; init(); } public Image getLedImage(int dg, int bound) { dg %= div[bound]; Image image = new BufferedImage(dWidth*bound, dHeight,BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); bound--; for(int i = bound;i>=0;i--) { g.drawImage(numberImage[dg/div[i]],(bound-i)*dWidth,0,this); dg %= div[i]; } return image; } public void init() { segmentPolygon = new Polygon[7]; numberImage = new Image[10]; //setup polygons setNumberPolygon(); setNumberImage(); } public void setBackGround(Color bgc) { bgColor = bgc; } public void setFontColor(Color fc) { fontColor = fc; } public void setMaskColor(Color mkc) { maskColor = mkc; } public void setDigitWidth(int w) { dWidth = w; init(); } public void setDigitHeight(int h) { dHeight = h; init(); } public void setDigitSize(int w, int h) { dWidth = w; dHeight = h; init(); } private void setNumberImage() { int i = 0; int j = 0; int k; Graphics g; while(i<10) { numberImage[i] = new BufferedImage(15,20,BufferedImage.TYPE_INT_RGB); g = numberImage[i].getGraphics(); g.setColor(bgColor); g.fillRect(0,0,15,20); g.setColor(Color.DARK_GRAY); j = 0; while(j
展开阅读全文
相关搜索
温馨提示:
taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

当前位置:首页 > 教育专区 > 教案示例


本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁