还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计JAVA题目小游戏班级网络工程11-1学号201101050627姓名尹燕军_________指导老师赵建立//显示信息对话框提JOpt ionPane.s6owMessageDiaLog mainFrame,示电脑胜利了!Computer isthe winner.;并重新初始化init;//}〃设置用户按钮重新可用userBtn.set Enabledtrue;}}@SuppressWarningsserial//定义一个自定义的面板类并继承了private classMyPaintPanel extendsComponent组件类仓,建——个工的变量private Bufferedlmagebim^;//Buffered magebim^private定义一个私有的栈类型的变量StackInteger data;//data//构造我的初始面板的方法private MyPaintPanel{bimg=new BufferedImage
190.,285,工〃表示一个具有位颜色分量的图像,Buffered mage.TYPE_SBVTE—BGR;8RGB创建——个并将它Graphics2D g2=bimg.createGraphics;//Graphics2D,绘制到此中Bufferedlmage订设置要画的颜色,即面板的颜色g
2.setColorColor E;//在坐标处画一个大小为宽高为g
2.fillRect0,0,190,285;//0,0190,285的白色矩形区域;//释放此图形的上下文以及它使用的所有系统资源调用g
2.dispose dispose之后,就不能再使用对象Graphics;//在此面板中实例化一个具体的栈的对象data=new Stackdnteger}〃定义画图形的默认方法public voidpaintGraphics g{从坐标出开始画图片g.drawlmagebimg0,0,null;//0,0〃释放此图形的上下文以及它使用的所有系统资源调用g.disp se;dispose之后,就不能再使用对象Graphics〃添加火柴棍的方法private voidaddint num{创建——个并将它Graphics2D g2=bimg.createGraphics;//Graphics2D,绘制到此中Bufferedlmage;//将当前栈的大小赋给变量”£int loc=data.size当前栈为“//System.out.printin+data.size;动态的坐标int offX=loc%3*65;//动态的坐标int offY=loc/3*15;//设置火柴棒的颜色为黄色g
2.setColor Color.VELLOW;//g
2.fillRectoffX+;〃填充火柴棒的颜色区域〃设置火柴棒8,offY+5,50,6g
2.setColor Color.GREEN;头的颜色为绿色设置火柴棒头的坐标,g
2.fillArcoffX+50,offY+3,10,10,0,360;//大小为宽和高为的度的弧1360〃设置当前火柴棒的根数的颜色g
2.setColor Color.8L4CK;g
2.drawStringString.vatueO/num,,offX,offY画出数字+g
2.getFont.getSize;//把数字压入堆栈顶部data.push num;//1;//重画repaint;//释放此图形的上下文以及它使用的所有系统资源调用g
2.dispose dispose之后,就不能再使用叩对象Gr hies}定义一个移除火柴棍的方法private intremove//{;//创建一个并将它绘Graphics2D g2=bimg.createGraphics Graphics2D,制到此中Bufferedlmage将当前栈的大小即火柴棍的数量减int loc=data.size-1;//1当前栈为//System.out.printin+data.size;动态的获取坐标int offX=loc%3*65;//动态的获取坐标int offY=loc/3*15;//〃设置移除填充颜色为白色g
2.setColor Color.WHITE;g
2.fillRectoffX,画出移除火柴棍的位置;//释放此图形的上下文以及它使用的所offY,60,15;//g
2.dispose有系统资源调用之后,就不能再使用对象dispose Graphics;//调用重新画的方法repaint移除堆栈顶部的对象,并作为此函数的值返回该对象return data.pop;//〃定义一个重置的方法{private voidreset;//清楚该面板栈中的内容data.clear仓建——个并Graphics2D g2=bimg.createGraphics;//1J Graphics2D,将它绘制到此中Bufferedlmageg
2.setColorColor.WH工TE;//设置颜色为白色在坐标为处填充大小为的矩形g
2.fillRect0,0,190,285;//0,0190,285区域释放此图形的上下文以及它使用的所有系统资源调用g
2.dispose;//dispose之后,就不能再使用对象Graphics重绘此组件repaint;//}定义一个返回第二个面板火柴棍的数量private intgetCnt//;//返回当前栈中的火柴棍数量return data.size
四、测试运行界面电脑用户ResetComputer FirstTake11/2O34O567,8-9,■10O1112-◎13®14r1516»17j18;19o20«21-・2223•24•25»26o
27.28o29二3031■•32•33■•34®35•3637»38339404142•434445C146•具体步骤
1.如果是电脑先拿先单击Computer First按钮,电脑随机拿走几根火柴,并在电脑按钮下方显示Computertakes/matches thistime”提示信息,单击之后电脑拿走的按钮被禁用,直到用户单击自己的按钮之后才能再拿ResetComputer FirstT
242.之后用户单击自己的Take按钮,根据自己的情况拿相应的火柴数,比如说用户拿三根火柴4036925814703电脑用户Computer FirstTakeComputer takes1matches thistime.24464541,1,2O3・4443・424・56・97-8・12・・1011・1513・141816*17・211920・242223・27・25・2630・28・29・3331・3236•34・353937・
38403.可以看到用户根据自己的需要拿了三根火柴,之后电脑又拿了一根,如此循环,直到哪一方赢得比赛的胜利从下图中可以看到电脑赢得了比赛的胜利
五、心得体会在本次的课程设计中,我遇到了很多问题,也学会了很多东西比如Graphics的绘图方法的问题,如何绘制曲线,如何绘制直线,如何绘制矩形,如何绘制圆形等一些基本图形的绘制,经过自己与同学的讨论,学会了图形类的使用方法还有浏览器中不能显示Applet程序使由于缺少某种插件等等但是随着这些问题的解决,我也从中学习到了新知识,感觉付出是值得的目■、需求分析录
1.1概述
二、概要设计
1.2技术原理详细设计
3.1程序类
3.2主要代码U测试!
五、心得体会
一、需求分析概述
1.1程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜(使用图形界面)技术原理
1.2该游戏程序设计的主要内容是使用java中的各种组件与容器互相搭配来完成的一个小游戏游戏设计中的主要的知识要点包括java的awt包中的颜色类,图形类,图像类,事件监听器类,和util包中的stack类,timer类,和timertask类的使用方法,以及swing包中的窗口类,按钮类,标签类,面板类,复选框类等一些常用组件的用法通过这些组件来掌握事件监听器的用法,java中栈的用法,以及实现了Runnable类的TimerTask类的用法,通过这个类实现线程技术,还有Graphics类中的主要方法的使用,学会运用这些方法来来绘制火柴,绘制图片的目的八概要设计•设置随机数的范围•获取随机数•设计出人性化的图形界面•给予不同的提示完成游戏
三、详细设计
3.1程序类博笈日策力已Package Explorer/目src田1default package/国JRE SystemLibrary[JavaSE-1,7];@resourcesjar-D:\Program Files\Java\jret@rtjar*D:\Program FiIes\Java\jre7\lib・l@jssejar D:\Program FiIes\Java\jre7\lib0@jcejar-D:\Program FiIes\Java\jre7\lib国l charsetsjar-D:\Program Files\Java\jre7\@jfrjar-D:\Program Files\Java\jre7\libaccess-bridgejar-D:\Program Files\Java dnsnsjar-D:\Program Files\Java\jre7\lib・jaccessjar-D:\Program Files\Java\jre7\lil localedatajarD:\Program Files\Java\jresunecjar-D:\Program FiIes\Java\jre7\lib1@sunjcejorovider.jar-D:\Program Hles\Ja\oio sunmscapijar-D:\Program Files\Java\jre@sunpkcslljar-D:\Program Files\Java\jre@zipfsjar-D:\Program AIes\J ava\j re7\l ib\t
3.2主要代码引入颜色类import java.awt.Color;////引入组件类import java.awt.Component;〃引入封装单个对象中组件的宽度和高度精确到整数的类import java.awt.Dimension;弓入图形类import java.awt.Graphics;//I引入二维图形类import java.awt.Graphics2D;//importjava・awt.event.ActionEvent;//弓I入事件类引入事件监听器类import java.awt.event.Action Listener;//工弓入缓冲图像类import mage;//I引入栈类import java.util.Stack;//引入计时器类import java.util.Timer;//引入了实现接口的类,并具有了线程的功能import java.util.TimerTask;//Runnable import弓|入按钮类javax.swing.JButton;//引入下拉列表框类import javax.swing.DComboBox;//引入主框架主窗口类import javax.swing.UFrame;//弓入标签类import javax.swing.ILabel;//I〃引入选项面板类import javax.swing.JOptionPane;引入面板类定义一个公共的主类import javax.swing.J Panel;//public classha//Test{定义主方法public staticvoid mainString[]args//main{调用类的构造方法new ha;//Test Test}private staticfinal intMIN_CNT=20;〃定义一个常量,设置为最小火柴棍数量为20private staticfinal int MAX_CNT=50;//定义一个常量,设置为最大火柴棍数量为5private staticfinal int MAX_TAKE=3;//定义一个常量,设置为最大拿火柴数量为3private staticfinal intDELAY=1000;//定义一个常量,设置为延迟时间为定义主框架变量定private DFramemainFrame;//private MyPaintPanel[]paints;//义我自己画的面板数组变量定义我的按钮属性private^Button userBtn;//private定义我的下拉列表〃定义电脑按钮属性JComboBoxuserNum;//private^Button compBtn;定义电脑标签定义计时器的变量private DLabelcompTxt;//private Timertimer;//定义一个私有的构造方法,来完成游戏的初始化动作private ha//{实例化一个主窗口mainFrame=new JFrame;//〃设置窗体大小不可调整mainFrame.set Resizablefalse;mainFrame.setDefaultCloseOperation Frame・EX_T7^O/\^CLOSE;〃设置默认的关闭操作为关闭窗口〃实例化一个主面板对象JPanel mainPanel=new JPanel;mainPanel.set Layout设置布局为空,即没有任何布局null;//mainPanel.setPreferredSizenew Dimension600;〃将组件的首选大小设置为常量值400〃将主面板添加到框架窗口中mainFrame.addmainPanel;电脑”;〃创建并设置标签按钮的内容为电脑DLabel labll=new JLabel“labll.〃设置标签内容沿轴的对齐方式setHorizontalAlignment Label.CENTER;X〃设置该标签显示位置为坐标宽高labll.setBounds0,10,200,20;0,10,200,20〃将标签加入主面板mainPanel.addlabll;JButton btnll=newJButtonReset:;〃定义一个重新来的按钮为添加行为事bt nil.addAct ionListener newAction Listener//Reset”件监听器,采用匿名类的方式{@Override实现监听器中的方法public voidactionPerformedActionEvent e//当单击此按钮时,调用该初始化方法};设置重置按钮的位置,左上角坐标为,btnll.setBounds250,10,100,20;//2510,大小为宽高20重来标签添加到主面板上mainPanel.add btnll;//用户”;//定义用户标签Kabel labl2=new JLabel“设置用户水平方式为居中labl
2.setHorizontalAlignment JLabel.CENTER;//;〃设置用户标签的位置,左上角坐标为labl
2.setBounds400,10,200,20大小为宽高400,10,200,20将用户标签添加到主面板上mainPanel.addlabl2;//定义一个电脑首先拿的按钮compBtn=new3ButtorComputer First/为电脑开始按钮定义行为compBtn.addAct ionListener newActionListener//事件监听器{©Override行为监听器中的默认方法public voidactionPerformedActionEvent e//{〃当单击电脑按钮时,调用电脑拿方法compTake;}};〃设置电脑按钮的位置,左上角坐标为compBtn.set Bounds1040,180,20;10,40,大小为宽高180,20〃按钮添加到主面板上mainPanel.add compBtn;定义一个空标签compTxt=new JLabel;//〃设置空标签的位置,左上角坐标为compTxt.set Bounds10^70,400,20;10,70,大小为宽高400,20将空标签加到主面板上mainPanel.add compTxt;//userBtn=newJButton”Take”;〃定义用户拿按钮为用户按钮定义行user Btn.addAct ionListener newAct ionListener//为事件监听器@Overridepublic voidactionPerformedActionEvent e「〃当单击用户拿按钮时,调用用户拿方法use Take;}};设置用户拿按钮的位置,左上角的坐标为userBtn.setBounds400,40,90,20;//大小为宽高400,40,90,20〃用户按钮添加到主面板上mainPanel.add userBtn;定义一个下拉列表框userNum=new JComboBox/for inti=0;iMAX_TAKE;i++//定义一个拿最大的循环工工;〃通过循环给列表框逐个添加选项userNum.add temi+}设置下拉列表框中的位置,左上角的坐标为userNum.setBounds495,40,90,20;//大小为宽高495,40,90,20将列表框添加到主面板mainPanel.adduserNum;//h〃定义我画的面板paints=new MyPaintParel
[3];for inti=0;i3;i++//用次循环来画出三个面板3{分别创建个面板,并调用构造方法初始化paints[i]=new MyPaintPanel;//3三个面板设置三个面板的位置paints[i].setBounds5+200*i,110,190,285;//和坐标,间距为5〃将三个面板分别添加到主面板上mainPanel.addpaints[i];};//调整此窗口的大小,以适合其子组件的首选大小和布局mainFrame.pack设置当前主窗口的可见性〃调用初始化方mainFrame.setVisibletrue;//init;法〃定义初始化的方法private voidinit{如果计时器不为空的话就执行下面的语句if timer!=null//{快速终止计时器的任务执行线程timer.cancel;//;//实例化一个计时器的对象timer=new Timer设置空标签的文本为空compTxt.setText;//设置是否启用电脑按钮组件,即电脑组件可用compBtn.setEnabledtrue;//设置是否启用用户按钮组件,即用户组件可用userBtn.set Enabledtrue;//;//调用重置方法,来重新定义第一块面板paints
[0].reset;//调用重置方法,来重新定义第二块面板paints
[1].reset调用重置方法,来重新定义第三块面板paints
[2].reset;//int num=MIN_CNT+intMAX_CNT+1-MIN_CNT*Math.rmdo朋;//随机产生一个大于小于的数2050分别用循环添加面板for inti=0;inum;i++//for{〃分别将产生的随机数添加到第二块面板paints[l].addi+1;〃定义一个用户拿火柴棒的方法{private voiduserTake设置按钮不可用compBtn.set Enabledfalse;//〃定义用户拿得火柴棍的数量int takeCnt=userNum.getSelectedIndex+1;〃将自定义的第二个面板中的火柴棍的数量赋给int rel=paints[l].getCnt;rel如果用户拿火柴棍的数量比面板中的数量大的话,执行下面的语if takeCntrel//句{JOptionPane.s/7Oh/A7essageDiatogmainFrame^There isonly+rel+matches.;//用标准对话框类调用显示There isonlymachines的对话框return;}定义一个将第二块面板中的火柴棍的数量移for inti=0;itakeCnt;i++//动到用户面板的循环{;〃将第二个面板要移除的火柴棍的数量给int index=paints
[1].remove index变量〃将的值添加到用户拿的面板上}paints
[2].addindex;index如果用户拿的火柴棍的数量和第二个相等执行下面的语句{if takeCnt==rel//JOptionPane.s/oh/MessageDiatogmainFrame Youare thewinner.;//J显示“你胜利的对话框“并重新初始化}如果不相等的话,执行下面的语句,init;//else//让电脑接着拿火柴棍compTake/叩〃定义电脑拿的方法private voidco Take设置电脑按钮的当前状态为不可用compBtn.set Enabledfalse;//设置用户按钮的当前状态为不可用userBtn.set Enabledfalse;//〃实例化一个的对象MyTask task=new MyTask;MyTasktimer.scheduletask^DELAY;//执行线程,安排在指定延迟1秒后执行指定的任务}//定义一个继承了实现接口的类private classMyTask extendsTimerTask Runnable使自己也具有线程功能{@Override因为实现了接口,重写父类的方法public voidrun//TimerTask Runnablerun{〃将火柴棍面板中的火柴的数量赋给int rel=paints[l].getCnt;设置当前拿火柴棍的数量为int takeCnt=0;//0如果当前火柴棍的数量比最大拿火柴的数量小的话,执行下if rel=/KTAKE//面的语句{将火柴棍的数量赋给电脑要拿的数量takeCnt=rel;//else ifrel%MAX_TAKE+10//如果面板中的火柴棍的数量对4取余大于的话执行下面的语句{takeCnt=rel%MAX_TAKE+1;//将面板中的火柴的数量对4取余之后赋给电脑要拿的火柴的数量//否则面板中的火柴棍的数量对取余小于或等于的话执行下面的语句else40takeCnt=1+intMAX_TAKE*Math;//随机产生一个小于4的数,给电脑要拿的数量}for inti=0;itakeCnt;i++;//将火柴面板中的火柴移除并赋给int index=paints[l].remove index〃将移除的火柴添加到电脑拿的面板上paints
[0].addindex;}compTxt.setTextComputer takes+takeCnt+matches thistime.“;〃设置电脑显示拿火柴的数量如果和电脑那的数量和面板中的数量相等执行下面的语if takeCnt==rel//。
个人认证
优秀文档
获得点赞 0