java扫雷小游戏软件设计方案报告_第1页
java扫雷小游戏软件设计方案报告_第2页
java扫雷小游戏软件设计方案报告_第3页
java扫雷小游戏软件设计方案报告_第4页
java扫雷小游戏软件设计方案报告_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

佛山科学技术学院《可视化编程技术》课程设计汇报计算器软件设计学生姓名:吴晓莉学号:914210年级专业:11级教育技术学2班指导老师:容汝佳学院:教育科学学院广东★佛山提交日期:6月目录1.序言………………22.概要设计…………32.1开发环境……………………32.2游戏功效……………………32.3界面设计……………………32.4类框架结构图……………43.具体设计………………………43.1使用java类说明……………………43.2类关键方法………………53.2.1处理按了运算符后计算……………53.2.2处理输入字符…………63.2.3进制转换……………63.2.4设计总体认识…………73.2.5程序步骤图……………84.运行结果…………85.测试分析…………95.1程序运行情况………………95.2程序异常处理………………96.源程序……………9参考文件……………27设计总结……………27摘要:该程序是一个扫雷小游戏,含有赶快简练游戏界面,玩者只要是曾经玩过扫雷游戏,那么我这个游戏是很轻易上手。该游戏含有三种模式:简单模式,中等模式和复杂模式。游戏界面上有一个显示剩下雷数目标小方框,还有一个计时小方框。中间是一个“重新玩按钮”,选择菜单栏有重新玩、能够选择模式、还能退出。关键字:java扫雷,游戏类,方法,事件1序言学生学习压力越来越大,应该有适时娱乐放松,,所以我在学习了java语言以后,决定用java语言编写一个简单扫雷小游戏,能够实现简单娱乐功效,且比一般扫雷游戏增加部分功效。Java是由Sun企业开发新一代纯面向对象网络编程语言。其目标是建立一个在任意种机器、任一个操作系统网络环境中运行软件,实施所谓“程序写一次,四处运行”目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎一个程序开发语言。Java开发小组把Java按特征分为基础版、移动版、企业版,每个版本有一个软件开发包。Java基础版本叫Java2标准版(Java2StandardEdition,J2SE),它包含建立Java应用程序或是Applet所需应用程序编程接口(API)。Java2移动版(TheJava2MobileEdition,J2ME)包含创建无线Java应用程序API。还有Java2企业版(TheJava2Enterprise,J2EE)是J2SE增强版本,包含建立多层架构应用程序API。Java语言是由C++语言发展起而来,是一个根本面向对象程序设计语言。作为一个纯面向对象程序设计语言,它很适合大型软件开发。Java语言去掉了C++语言部分轻易引发错误特征。Java语言特点有:面向对象、跨平台、安全性、多线程和图形功效强。2概要设计2.1开发环境 开发平台:MicrosoftWindowsXPProfessionalServicePack2 开发工具:JBuilder+JDK1.6.0_022.2游戏功效功效1:打开游戏以后,会默认进入疯狂模式,能够经过菜单栏选择不一样游戏模式。功效2:游戏界面左边有个小框,用来显示目前界面剩下雷数目。功效3:游戏界面右边有一个小框,用来显示目前游戏已经进行了时间(秒)。功效4:游戏界面中间有一个按钮,点击能够重新开始游戏。功效5:菜单栏二级菜单有选项能够退出游戏。2.3界面设计图2.3.1游戏面板(疯狂模式)图2.3.2游戏面板(中等模式)图2.3.32.4类框架结构图BottomPanel图2.4.1CenterPanel图2.4.2Display图2.4.3Field图2.4.4Digit图2.4.5J_sweep图2.4.6NorthPanel图2.4.7BottomPanel属性privatestaticfinallongserialVersionUID操作publicBottomPanel()图2.4CenterPanel属性privatestaticfinallongserialVersionUID=1L;privateintcountX,countY,fieldsLeft;privateField[][]fields;privateDifficultydifficulty;privateRandomrandom;privatebooleangameOver;privateJ_sweepminesweeper;publicCenterPanel(J_sweepminesweeper,Difficultydifficulty)publicvoidsetMinesweeper(Difficultydifficulty)privatevoidsetFields()publicvoidpaint(Graphicsg)privatevoidsetGameOver()privatevoidsetWon()privatevoidperformFieldClick(intx,inty)privatevoidperformFieldClickFlagged(intx,inty)privatebooleanisNeighbourMinesFlagged(intx,inty)publicvoidmousePressed(MouseEvente)图2.4Display属性privatestaticfinallongserialVersionUID=1L;privateDigitdigit0,digit1,digit2;privateintvalue;操作publicDisplay(intvalue)publicvoidsetValue(intvalue)publicintgetValue()publicvoidpaint(Graphicsg)图2.4Field属性privateintx,y,neighbourMines;privatebooleanclicked,mine,flag,mineClicked;privateColorcolor1,color2,color3,color4,color5,color6,color7,color8;操作publicField(intx,inty)publicbooleansetClicked()publicbooleanisClicked()publicvoidsetMine(booleanmine)publicvoidincrementNeighbourMines()publicintgetNeighbourMines()publicintsetFlag()publicbooleanisFlag()publicvoidsetGameOver()publicvoidsetWon()publicvoidpaint(Graphicsg)图2.4Digit属性privateintdigit,x,y,width,height;privateColordarkRed;操作publicDigit(intdigit,intx,inty)publicvoidsetDigit(intdigit)publicvoidpaint(Graphicsg)图2.4J_sweep属性privatestaticfinallongserialVersionUIDprivateNorthPanelnorthPanel;privateCenterPanelcenterPanel;privateBottomPanelbottomPanel;privateJCheckBoxMenuItemmiBeginner,miIntermediate,miExpert;privateDifficultydifficulty;publicJ_sweep()publicvoidstartTime()publicvoidstopTime()publicvoidsetMines(intvalue)publicvoidsetMines(intvalue,booleanreal)publicvoidsetMainMenuDifficulty()publicvoidactionPerformed(ActionEvente)publicstaticvoidmain(String[]args)图2.4NorthPanelprivatestaticfinallongserialVersionUIDprivateJ_sweepminesweeper;privateDisplaymineDisplay,timeDisplay;privatelongbegin;privateTimertimer;publicNorthPanel(J_sweepminesweeper,Difficultydifficulty)publicvoidsetMinesweeper(Difficultydifficulty)publicvoidsetMines(intvalue,booleanreal)publicvoidstartTime()publicintstopTime()publicvoidactionPerformed(ActionEvente)图2.43具体设计3.1扫雷游戏使用Java类说明类名:BottomPanel

作用:这是设计整个界面底部颜色

继承父类:JPanel类

实现接口:没有

publicclassBottomPanelextendsJPanel{ privatestaticfinallongserialVersionUID=-29266788L; publicBottomPanel(){ super(); setBackground(Color.white);//这是设计整个界面底部颜色 }}类名:J_sweep

作用:主类。

继承父类:JFrame类

实现接口:ActionListener类

publicclassJ_sweepextendsJFrameimplementsActionListener{ privatestaticfinallongserialVersionUID=5319706L;//生成序列号,不用管它 privateNorthPanelnorthPanel; privateCenterPanelcenterPanel; privateBottomPanelbottomPanel; privateJCheckBoxMenuItemmiBeginner,miIntermediate,miExpert; privateDifficultydifficulty; publicJ_sweep() { super("wxl_扫雷");//软件标题 setDefaultCloseOperation(EXIT_ON_CLOSE);//退出按钮 /* resizeable值为true时,表示在生成窗体能够自由改变大小; resizeable值为false时,表示生成窗体大小是由程序员决定,用户不能够自由改变该窗体大小 */ setResizable(false); difficulty=Difficulty.疯狂模式;//默认定义最高难度 JMenuBarmenuBar=newJMenuBar();//菜单栏控件 JMenumenu=newJMenu("文件");//菜单栏菜单项 JMenuItemmenuItem=newJMenuItem("重新玩");//菜单栏下拉菜单 menuItem.addActionListener(this);//给下拉框加上事件捕捉 menu.add(menuItem);//下拉框放入下拉菜单控件 menu.addSeparator();//加个空格线 miBeginner=newJCheckBoxMenuItem("简单模式");//选择框下面一样,不解释! miBeginner.addActionListener(this); menu.add(miBeginner); miIntermediate=newJCheckBoxMenuItem("中等模式"); miIntermediate.addActionListener(this); menu.add(miIntermediate); miExpert=newJCheckBoxMenuItem("疯狂模式",true); miExpert.addActionListener(this); menu.add(miExpert); menu.addSeparator(); menuItem=newJMenuItem("退出"); menuItem.addActionListener(this); menu.add(menuItem); menuBar.add(menu); setJMenuBar(menuBar);//把菜单栏加入面板 northPanel=newNorthPanel(this,Difficulty.疯狂模式);//定义一个面板 add(northPanel,BorderLayout.NORTH);//把这个面板放在上面 centerPanel=newCenterPanel(this,Difficulty.疯狂模式); add(centerPanel,BorderLayout.CENTER);//把这个面板放在中间 /*调整此窗口大小,以适合其子组件首选大小和布局XJQ*/ bottomPanel=newBottomPanel(); add(bottomPanel,BorderLayout.SOUTH); pack(); //设置窗口相对于指定组件位置 setLocationRelativeTo(null); //设置可视化 setVisible(true); }类名:CenterPanel

作用:设置中间面板

继承父类:JPanel类

实现接口:MouseListener类

publicclassCenterPanelextendsJPanelimplementsMouseListener{ privatestaticfinallongserialVersionUID=1L; privateintcountX,countY,fieldsLeft; privateField[][]fields;//用数组定义界面横向和纵向 privateDifficultydifficulty;//定义难度 privateRandomrandom; privatebooleangameOver; privateJ_sweepminesweeper; }类名:Display

作用:计时

继承父类:JPanel类

实现接口:没有publicclassDisplayextendsJPanel{ privatestaticfinallongserialVersionUID=1L; privateDigitdigit0,digit1,digit2;//定义了一个表示雷有、无、不确定量 privateintvalue; }

类名:Field

作用:定义数字颜色

继承父类:没有

实现接口:没有publicclassField{ privateintx,y,neighbourMines; privatebooleanclicked,mine,flag,mineClicked; privateColorcolor1,color2,color3,color4,color5,color6,color7,color8;//定义了从1——8之间,八个数字颜色 }类名NorthPanel

作用:定义中间面板

继承父类:JPanel类

实现接口:ActionListener类publicclassNorthPanelextendsJPanelimplementsActionListener{ privatestaticfinallongserialVersionUID=040336L; privateJ_sweepminesweeper; privateDisplaymineDisplay,timeDisplay; privatelongbegin; privateTimertimer;}类名Digit

作用:统计剩下雷数目

继承父类:没有

实现接口:没有publicclassDigit{ privateintdigit,x,y,width,height; privateColordarkRed;//定义接下来用来绘制数字颜色}3.2类关键方法3.2.1设计整个界面底部颜色:publicBottomPanel(){ super(); setBackground(Color.white); } 3.2.2添加鼠标监听器:publicCenterPanel(J_sweepminesweeper,Difficultydifficulty) { super(); this.setBackground(Color.LIGHT_GRAY); addMouseListener(this); this.minesweeper=minesweeper; this.difficulty=difficulty; random=newRandom(); setFields(); }3.2.3设置三种模式界面大小:privatevoidsetFields() { intmines=0; switch(difficulty) { case简单模式: countX=countY=12;//这是设置简单模式界面横竖全部有12个格子 mines=15;//这是设置简单模式雷个数 break; case中等模式: countX=countY=16;//这是设置中等模式界面横竖全部有16个格子 mines=40;//这是设置中等模式雷个数 break; case疯狂模式: countX=30;//这是设置疯狂模式界面横向有30个格子 countY=16;//这是设置疯狂模式界纵向全部有16个格子 mines=99;//这是设置疯狂模式雷个数 break; }3.2.4publicDigit(intdigit,intx,inty) { this.digit=digit; this.x=x; this.y=y; width=13; height=23; darkRed=newColor(128,0,0); } publicvoidsetDigit(intdigit) { this.digit=digit; } publicvoidpaint(Graphicsg) { g.setColor(Color.BLACK); g.fillRect(x,y,width,height); switch(digit) { case0:case2:case3:case5:case6:case7:case8:case9: g.setColor(Color.RED); g.drawLine(x+2,y+1,x+10,y+1); g.drawLine(x+3,y+2,x+9,y+2); g.drawLine(x+4,y+3,x+8,y+3); break; case-2:case-1:case1:case4: g.setColor(darkRed); g.fillRect(x+3,y+1,1,1); g.fillRect(x+5,y+1,1,1); g.fillRect(x+7,y+1,1,1); g.fillRect(x+9,y+1,1,1); g.fillRect(x+4,y+2,1,1); g.fillRect(x+6,y+2,1,1); g.fillRect(x+8,y+2,1,1); g.fillRect(x+5,y+3,1,1); g.fillRect(x+7,y+3,1,1); break; } switch(digit) { case-1:case2:case3:case4:case5:case6:case8:case9: g.setColor(Color.RED); g.drawLine(x+3,y+10,x+9,y+10); g.drawLine(x+2,y+11,x+10,y+11); g.drawLine(x+3,y+12,x+9,y+12); break; case-2:case0:case1:case7: g.setColor(darkRed); g.fillRect(x+4,y+10,1,1); g.fillRect(x+6,y+10,1,1); g.fillRect(x+8,y+10,1,1); g.fillRect(x+3,y+11,1,1); g.fillRect(x+5,y+11,1,1); g.fillRect(x+7,y+11,1,1); g.fillRect(x+9,y+11,1,1); g.fillRect(x+4,y+12,1,1); g.fillRect(x+6,y+12,1,1); g.fillRect(x+8,y+12,1,1); break; } switch(digit) { case0:case2:case3:case5:case6:case8:case9: g.setColor(Color.RED); g.drawLine(x+4,y+19,x+8,y+19); g.drawLine(x+3,y+20,x+9,y+20); g.drawLine(x+2,y+21,x+10,y+21); break; case-2:case-1:case1:case4:case7: g.setColor(darkRed); g.fillRect(x+5,y+19,1,1); g.fillRect(x+7,y+19,1,1); g.fillRect(x+4,y+20,1,1); g.fillRect(x+6,y+20,1,1); g.fillRect(x+8,y+20,1,1); g.fillRect(x+3,y+21,1,1); g.fillRect(x+5,y+21,1,1); g.fillRect(x+7,y+21,1,1); g.fillRect(x+9,y+21,1,1); break; } switch(digit) { case0:case4:case5:case6:case8:case9: g.setColor(Color.RED); g.drawLine(x+1,y+2,x+1,y+10); g.drawLine(x+2,y+3,x+2,y+9); g.drawLine(x+3,y+4,x+3,y+8); break; case-2:case-1:case1:case2:case3:case7: g.setColor(darkRed); g.fillRect(x+1,y+2,1,1); g.fillRect(x+1,y+4,1,1); g.fillRect(x+1,y+6,1,1); g.fillRect(x+1,y+8,1,1); g.fillRect(x+1,y+10,1,1); g.fillRect(x+2,y+3,1,1); g.fillRect(x+2,y+5,1,1); g.fillRect(x+2,y+7,1,1); g.fillRect(x+2,y+9,1,1); g.fillRect(x+3,y+4,1,1); g.fillRect(x+3,y+6,1,1); g.fillRect(x+3,y+8,1,1); break; } switch(digit) { case0:case2:case6:case8: g.setColor(Color.RED); g.drawLine(x+1,y+12,x+1,y+20); g.drawLine(x+2,y+13,x+2,y+19); g.drawLine(x+3,y+14,x+3,y+18); break; case-2:case-1:case1:case3:case4:case5:case7:case9: g.setColor(darkRed); g.fillRect(x+1,y+12,1,1); g.fillRect(x+1,y+14,1,1); g.fillRect(x+1,y+16,1,1); g.fillRect(x+1,y+18,1,1); g.fillRect(x+1,y+20,1,1); g.fillRect(x+2,y+13,1,1); g.fillRect(x+2,y+15,1,1); g.fillRect(x+2,y+17,1,1); g.fillRect(x+2,y+19,1,1); g.fillRect(x+3,y+14,1,1); g.fillRect(x+3,y+16,1,1); g.fillRect(x+3,y+18,1,1); break; } switch(digit) { case0:case1:case2:case3:case4:case7:case8:case9: g.setColor(Color.RED); g.drawLine(x+11,y+2,x+11,y+10); g.drawLine(x+10,y+3,x+10,y+9); g.drawLine(x+9,y+4,x+9,y+8); break; case-2:case-1:case5:case6: g.setColor(darkRed); g.fillRect(x+11,y+2,1,1); g.fillRect(x+11,y+4,1,1); g.fillRect(x+11,y+6,1,1); g.fillRect(x+11,y+8,1,1); g.fillRect(x+11,y+10,1,1); g.fillRect(x+10,y+3,1,1); g.fillRect(x+10,y+5,1,1); g.fillRect(x+10,y+7,1,1); g.fillRect(x+10,y+9,1,1); g.fillRect(x+9,y+4,1,1); g.fillRect(x+9,y+6,1,1); g.fillRect(x+9,y+8,1,1); break; } switch(digit) { case0:case1:case3:case4:case5:case6:case7:case8:case9: g.setColor(Color.RED); g.drawLine(x+11,y+12,x+11,y+20); g.drawLine(x+10,y+13,x+10,y+19); g.drawLine(x+9,y+14,x+9,y+18); break; case-2:case-1:case2: g.setColor(darkRed); g.fillRect(x+11,y+12,1,1); g.fillRect(x+11,y+14,1,1); g.fillRect(x+11,y+16,1,1); g.fillRect(x+11,y+18,1,1); g.fillRect(x+11,y+20,1,1); g.fillRect(x+10,y+13,1,1); g.fillRect(x+10,y+15,1,1); g.fillRect(x+10,y+17,1,1); g.fillRect(x+10,y+19,1,1); g.fillRect(x+9,y+14,1,1); g.fillRect(x+9,y+16,1,1); g.fillRect(x+9,y+18,1,1); break; } }}3.2.4JAVA设计摘要JAVA设计目录结构JAVA设计概要和具体设计JAVA设计版权意识JAVA设计需要编译环境JAVA设计实用性开始3.2.5程序步骤图开始默认进入疯狂模式默认进入疯狂模式否选择模式?否选择模式?是是疯狂模式简单模式?疯狂模式简单模式?中等模式?游戏开始,计时游戏开始,计时失败?胜利?失败?胜利?是是重新玩?重新玩?否否退出游戏退出游戏图3绘制扫雷游戏方法PAD图4运行结果图4.1游戏胜利结果显示图4.2游戏失败结果显示5测试分析5.1程序运行情况:程序运行时,左上角方框会显示目前剩下雷数目,玩者每标识一个雷,雷数目就会降低一。但因为当玩者在玩时,可能会出现标识雷错误,这么假如玩者标识雷数目比实际数目多,则会出现雷数目为负数,所以,我考虑到这个,所以在设计这个小框时候,专门多考虑了-1———-3这多个数字,以防出现数字到零时,不再降低。5.2程序异常处理:

try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(ClassNotFoundExceptione){} catch(InstantiationExceptione){} catch(IllegalAccessExceptione){} catch(UnsupportedLookAndFeelExceptione){}6程序清单:importjava.awt.Color;importjavax.swing.JPanel;publicclassBottomPanelextendsJPanel{ /** * */ privatestaticfinallongserialVersionUID=-29266788L; publicBottomPanel(){ super(); setBackground(Color.white);//这是设计整个界面底部颜色 }}importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Graphics;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Random;importjava.util.Set;importjavax.swing.JPanel;/***@authorXJQ*中间面板*/publicclassCenterPanelextendsJPanelimplementsMouseListener{ privatestaticfinallongserialVersionUID=1L; privateintcountX,countY,fieldsLeft; privateField[][]fields; privateDifficultydifficulty; privateRandomrandom; privatebooleangameOver; privateJ_sweepminesweeper; publicCenterPanel(J_sweepminesweeper,Difficultydifficulty) { super(); this.setBackground(Color.LIGHT_GRAY); addMouseListener(this);//这是添加鼠标监听器 this.minesweeper=minesweeper; this.difficulty=difficulty; random=newRandom(); setFields(); } publicvoidsetMinesweeper(Difficultydifficulty) { this.difficulty=difficulty; gameOver=false; setFields(); repaint(); } privatevoidsetFields() { intmines=0; switch(difficulty) { case简单模式: countX=countY=12;//这是设置简单模式界面横竖全部有12个格子 mines=15;//这是设置简单模式雷个数 break; case中等模式: countX=countY=16;//这是设置中等模式界面横竖全部有16个格子 mines=40;//这是设置中等模式雷个数 break; case疯狂模式: countX=30;//这是设置疯狂模式界面横向有30个格子 countY=16;//这是设置疯狂模式界纵向全部有16个格子 mines=99;//这是设置疯狂模式雷个数 break; } fieldsLeft=countX*countY-mines; setPreferredSize(newDimension(countX*16,countY*16)); fields=newField[countY][countX]; for(inty=0;y<countY;y++) { for(intx=0;x<countX;x++) fields[y][x]=newField(x,y); } Set<Integer>minePositions=newHashSet<Integer>(); while(minePositions.size()<mines) minePositions.add(random.nextInt(countX*countY));//取随机坐标x、y设置雷位置 Iterator<Integer>i=minePositions.iterator(); while(i.hasNext()) { intminePosition=i.next(); inty=minePosition/countX; intx=minePosition%countX; fields[y][x].setMine(true); for(intyy=y>0?y-1:y;yy<=(y<countY-1?y+1:y);yy++) { for(intxx=x>0?x-1:x;xx<=(x<countX-1?x+1:x);xx++) fields[yy][xx].incrementNeighbourMines(); } } } @Override publicvoidpaint(Graphicsg) { super.paint(g); for(inty=0;y<fields.length;y++) { for(intx=0;x<fields[y].length;x++) fields[y][x].paint(g); } } privatevoidsetGameOver() { minesweeper.stopTime(); gameOver=true; for(inty=0;y<countY;y++) { for(intx=0;x<countX;x++) fields[y][x].setGameOver(); } } privatevoidsetWon() { minesweeper.stopTime(); gameOver=true; minesweeper.setMines(0,true);//当剩下雷数目为零时,游戏胜利 for(inty=0;y<countY;y++) { for(intx=0;x<countX;x++) fields[y][x].setWon(); } } privatevoidperformFieldClick(intx,inty) { if(fields[y][x].isClicked()) return; if(!fields[y][x].setClicked()) { setGameOver(); return; } fieldsLeft--; if(fields[y][x].getNeighbourMines()==0) { for(intyy=y>0?y-1:y;yy<=(y<countY-1?y+1:y);yy++) { for(intxx=x>0?x-1:x;xx<=(x<countX-1?x+1:x);xx++) performFieldClick(xx,yy); } } } privatevoidperformFieldClickFlagged(intx,inty) { for(intyy=y>0?y-1:y;yy<=(y<countY-1?y+1:y);yy++) { for(intxx=x>0?x-1:x;xx<=(x<countX-1?x+1:x);xx++) { if(fields[yy][xx].getNeighbourMines()==0) performFieldClick(xx,yy); if(fields[yy][xx].isClicked()||fields[yy][xx].isFlag()) continue; if(!fields[yy][xx].setClicked()) { setGameOver(); return; } fieldsLeft--; } } } privatebooleanisNeighbourMinesFlagged(intx,inty) { if(fields[y][x].getNeighbourMines()==0) returnfalse; intflags=0; for(intyy=y>0?y-1:y;yy<=(y<countY-1?y+1:y);yy++) { for(intxx=x>0?x-1:x;xx<=(x<countX-1?x+1:x);xx++) { if(fields[yy][xx].isFlag()) flags++; } } returnflags==fields[y][x].getNeighbourMines(); } @Override publicvoidmousePressed(MouseEvente) { intx=e.getX()/16; inty=e.getY()/16; if(gameOver||x>fields[0].length-1||y>fields.length-1) return; minesweeper.startTime(); if(e.getButton()==MouseEvent.BUTTON1) { if(fields[y][x].isClicked()&&isNeighbourMinesFlagged(x,y)) performFieldClickFlagged(x,y); else performFieldClick(x,y); if(fieldsLeft==0) setWon(); } else minesweeper.setMines(fields[y][x].setFlag());//当右击时,在小格子上放置事先绘制好小旗子图形 repaint(); } @Override publicvoidmouseClicked(MouseEvente){} @Override publicvoidmouseEntered(MouseEvente){} @Override publicvoidmouseExited(MouseEvente){} @Override publicvoidmouseReleased(MouseEvente){}}/**这个类是一个枚举功效,能够选择不用模式。*//***@authorXJQ*/publicenumDifficulty{ 简单模式, 中等模式, 疯狂模式}/*这个类就是我添加功效,用来统计剩下雷数目,关键是经过绘制数字来显示,不一样数字绘制方法不一样依据不一样数字含有同一个笔画来进行绘制。比如数字2和数字5显示时候,在横向有三笔,那么这三笔就能够用一样方法绘制经过switch函数检索需要绘制数字,然后开始绘制除此之外,这个显示小窗口是能够自动跟程序左对齐,因为程序分为三种模式,每一个模式界面大小全部不一样,所以就得就显示小框跟程序窗口自动左对齐下面是具体程序*/importjava.awt.Color;importjava.awt.Graphics;/***@authorXJQ*/publicclassDigit{ privateintdigit,x,y,width,height; privateColordarkRed; publicDigit(intdigit,intx,inty) { this.digit=digit; this.x=x; this.y=y; width=13; height=23; darkRed=newColor(128,0,0); } publicvoidsetDigit(intdigit) { this.digit=digit; } publicvoidpaint(Graphicsg) { g.setColor(Color.BLACK); g.fillRect(x,y,width,height); switch(digit) { case0:case2:case3:case5:case6:case7:case8:case9: g.setColor(Color.RED); g.drawLine(x+2,y+1,x+10,y+1); g.drawLine(x+3,y+2,x+9,y+2); g.drawLine(x+4,y+3,x+8,y+3); break; case-2:case-1:case1:case4: g.setColor(darkRed); g.fillRect(x+3,y+1,1,1); g.fillRect(x+5,y+1,1,1); g.fillRect(x+7,y+1,1,1); g.fillRect(x+9,y+1,1,1); g.fillRect(x+4,y+2,1,1); g.fillRect(x+6,y+2,1,1); g.fillRect(x+8,y+2,1,1); g.fillRect(x+5,y+3,1,1); g.fillRect(x+7,y+3,1,1); break; } switch(digit) { case-1:case2:case3:case4:case5:case6:case8:case9: g.setColor(Color.RED); g.drawLine(x+3,y+10,x+9,y+10); g.drawLine(x+2,y+11,x+10,y+11); g.drawLine(x+3,y+12,x+9,y+12); break; case-2:case0:case1:case7: g.setColor(darkRed); g.fillRect(x+4,y+10,1,1); g.fillRect(x+6,y+10,1,1); g.fillRect(x+8,y+10,1,1); g.fillRect(x+3,y+11,1,1); g.fillRect(x+5,y+11,1,1); g.fillRect(x+7,y+11,1,1); g.fillRect(x+9,y+11,1,1); g.fillRect(x+4,y+12,1,1); g.fillRect(x+6,y+12,1,1); g.fillRect(x+8,y+12,1,1); break; } switch(digit) { case0:case2:case3:case5:case6:case8:case9: g.setColor(Color.RED); g.drawLine(x+4,y+19,x+8,y+19); g.drawLine(x+3,y+20,x+9,y+20); g.drawLine(x+2,y+21,x+10,y+21); break; case-2:case-1:case1:case4:case7: g.setColor(darkRed); g.fillRect(x+5,y+19,1,1); g.fillRect(x+7,y+19,1,1); g.fillRect(x+4,y+20,1,1); g.fillRect(x+6,y+20,1,1); g.fillRect(x+8,y+20,1,1); g.fillRect(x+3,y+21,1,1); g.fillRect(x+5,y+21,1,1); g.fillRect(x+7,y+21,1,1); g.fillRect(x+9,y+21,1,1); break; } switch(digit) { case0:case4:case5:case6:case8:case9: g.setColor(Color.RED); g.drawLine(x+1,y+2,x+1,y+10); g.drawLine(x+2,y+3,x+2,y+9); g.drawLine(x+3,y+4,x+3,y+8); break; case-2:case-1:case1:case2:case3:case7: g.setColor(darkRed); g.fillRect(x+1,y+2,1,1); g.fillRect(x+1,y+4,1,1); g.fillRect(x+1,y+6,1,1); g.fillRect(x+1,y+8,1,1); g.fillRect(x+1,y+10,1,1); g.fillRect(x+2,y+3,1,1); g.fillRect(x+2,y+5,1,1); g.fillRect(x+2,y+7,1,1); g.fillRect(x+2,y+9,1,1); g.fillRect(x+3,y+4,1,1); g.fillRect(x+3,y+6,1,1); g.fillRect(x+3,y+8,1,1); break; } switch(digit) { case0:case2:case6:case8: g.setColor(Color.RED); g.drawLine(x+1,y+12,x+1,y+20); g.drawLine(x+2,y+13,x+2,y+19); g.drawLine(x+3,y+14,x+3,y+18); break; case-2:case-1:case1:case3:case4:case5:case7:case9: g.setColor(darkRed); g.fillRect(x+1,y+12,1,1); g.fillRect(x+1,y+14,1,1); g.fillRect(x+1,y+16,1,1); g.fillRect(x+1,y+18,1,1); g.fillRect(x+1,y+20,1,1); g.fillRect(x+2,y+13,1,1); g.fillRect(x+2,y+15,1,1); g.fillRect(x+2,y+17,1,1); g.fillRect(x+2,y+19,1,1); g.fillRect(x+3,y+14,1,1); g.fillRect(x+3,y+16,1,1); g.fillRect(x+3,y+18,1,1); break; } switch(digit) { case0:case1:case2:case3:case4:case7:case8:case9: g.setColor(Color.RED); g.drawLine(x+11,y+2,x+11,y+10); g.drawLine(x+10,y+3,x+10,y+9); g.drawLine(x+9,y+4,x+9,y+8); break; case-2:case-1:case5:case6: g.setColor(darkRed); g.fillRect(x+11,y+2,1,1); g.fillRect(x+11,y+4,1,1); g.fillRect(x+11,y+6,1,1); g.fillRect(x+11,y+8,1,1); g.fillRect(x+11,y+10,1,1); g.fillRect(x+10,y+3,1,1); g.fillRect(x+10,y+5,1,1); g.fillRect(x+10,y+7,1,1); g.fillRect(x+10,y+9,1,1); g.fillRect(x+9,y+4,1,1); g.fillRect(x+9,y+6,1,1); g.fillRect(x+9,y+8,1,1); break; } switch(digit) { case0:case1:case3:case4:case5:case6:case7:case8:case9: g.setColor(Color.RED); g.drawLine(x+11,y+12,x+11,y+20); g.drawLine(x+10,y+13,x+10,y+19); g.drawLine(x+9,y+14,x+9,y+18); break; case-2:case-1:case2: g.setColor(darkRed); g.fillRect(x+11,y+12,1,1); g.fillRect(x+11,y+14,1,1); g.fillRect(x+11,y+16,1,1); g.fillRect(x+11,y+18,1,1); g.fillRect(x+11,y+20,1,1); g.fillRect(x+10,y+13,1,1); g.fillRect(x+10,y+15,1,1); g.fillRect(x+10,y+17,1,1); g.fillRect(x+10,y+19,1,1); g.fillRect(x+9,y+14,1,1); g.fillRect(x+9,y+16,1,1); g.fillRect(x+9,y+18,1,1); break; } }}/*这个模块是我自己添加,作用是计时首先是从电脑中获取时间(以秒记)然后设置变量,是变量等于时间,用和上一个模块一样方法,进行绘制数字以统计时间不一样是要考时间位数,假如是个位数,则直接绘制,假如是两位或三位数,则要先取模取得十位上数字或百位上数字,再进行绘制相同,这个功效也跟程序窗口自动右对齐。*/importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Graphics;importjavax.swing.JPanel;publicclassDisplayextendsJPanel{ privatestaticfinallongserialVersionUID=1L; privateDigitdigit0,digit1,digit2; privateintvalue; publicDisplay(intvalue) { setPreferredSize(newDimension(53,37)); setBackground(Color.LIGHT_GRAY); this.value=value; digit0=newDigit(0,7,7); digit1=newDigit(0,20,7); digit2=newDigit(0,33,7); } publicvoidsetValue(intvalue) { this.value=value; } publicintgetValue() { returnvalue; } @Override publicvoidpaint(Graphicsg) { super.paint(g); digit0.setDigit(0); digit1.setDigit(0); digit2.setDigit(0); inttemp=value; if(temp>=0) { if(temp/100>0) { digit0.setDigit(temp/100); temp%=100; } if(temp/10>0) { digit1.setDigit(temp/10); temp%=10; } digit2.setDigit(temp); } else { temp=-temp%100; if(temp/10>0) { digit0.setDigit(-1); digit1.setDigit(temp/10); temp%=10; } else { digit0.setDigit(-2); digit1.setDigit(-1); } digit2.setDigit(temp); } g.setColor(Color.WHITE); g.drawRect(5,30,42,1); g.drawRect(46,5,1,25); g.setColor(Color.gray); g.drawRect(5,5,41,1); g.drawRect(5,5,1,25); digit0.paint(g); digit1.paint(g); digit2.paint(g);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论