Java课程设计报告扫雷小游戏.docx

上传人:b****3 文档编号:3746047 上传时间:2022-11-25 格式:DOCX 页数:24 大小:318.98KB
下载 相关 举报
Java课程设计报告扫雷小游戏.docx_第1页
第1页 / 共24页
Java课程设计报告扫雷小游戏.docx_第2页
第2页 / 共24页
Java课程设计报告扫雷小游戏.docx_第3页
第3页 / 共24页
Java课程设计报告扫雷小游戏.docx_第4页
第4页 / 共24页
Java课程设计报告扫雷小游戏.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Java课程设计报告扫雷小游戏.docx

《Java课程设计报告扫雷小游戏.docx》由会员分享,可在线阅读,更多相关《Java课程设计报告扫雷小游戏.docx(24页珍藏版)》请在冰豆网上搜索。

Java课程设计报告扫雷小游戏.docx

Java课程设计报告扫雷小游戏

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语言编写,适合windowsXP以下的系统,以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游戏菜单界面

其主要代码为:

privatevoidsetMenuBar(){//设置菜单项

JMenuBarmenuBar=newJMenuBar();

menuBar.setBorder(BorderFactory.createLineBorder(Color.WHITE,2));

JMenugameMenu=newJMenu("游戏(G)");

JMenuhelpMenu=newJMenu("帮助(H)");

gameMenu.setMnemonic('G');

helpMenu.setMnemonic('H');

声音=newVoice();

startItem=newJMenuItem("开局(N)");

startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));

logItem=newJMenuItem("扫雷英雄榜(T)...");

markCheckItem=newJCheckBoxMenuItem("标记(?

)(M)");

soundItem=newJCheckBoxMenuItem("声音(S)");

exitItem=newJMenuItem("退出(X)");

aboutItem=newJMenuItem("关于扫雷(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();

//radiogroup

levelItem=newJRadioButtonMenuItem[4];

ButtonGrouplevelGroup=newButtonGroup();

levelItem[0]=newJRadioButtonMenuItem("初级(B)");

levelItem[1]=newJRadioButtonMenuItem("中级(I)");

levelItem[2]=newJRadioButtonMenuItem("高级(E)");

levelItem[3]=newJRadioButtonMenuItem("自定义(C)...");

levelItem[0].setMnemonic('B');

levelItem[1].setMnemonic('I');

levelItem[2].setMnemonic('E');

levelItem[3].setMnemonic('C');

for(inti=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高级扫雷界面

其主要代码为:

privateLevelLoglevelLog[];

privateJTextArealogArea;

privateJButtonresetButton;

privateJButtonconfirmButton;

publicLogDialog(JFrameframe,LevelLoglog[]){

super(frame,"扫雷英雄榜",true);

getContentPane().setLayout(null);

levelLog=log;

logArea=newJTextArea();

logArea.setEditable(false);

logArea.setBackground(UIManager.getColor("CheckBox.background"));

logArea.setBounds(10,10,160,60);

getContentPane().add(logArea,null);

resetButton=newJButton("重新计分");

resetButton.setBounds(10,70,90,25);

resetButton.addActionListener(this);

getContentPane().add(resetButton,null);

setTextArea();

confirmButton=newJButton("确定");

confirmButton.setBounds(105,70,60,25);

confirmButton.addActionListener(this);

getContentPane().add(confirmButton,null);

setSize(180,140);

setLocationRelativeTo(frame);

setResizable(false);

show();

}

privatevoidsetTextArea(){

logArea.setText("初级:

"+levelLog[0].toString()

+"中级:

"+levelLog[1].toString()

+"高级:

"+levelLog[2].toString());

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==resetButton){

for(inti=0;i<3;i++){

levelLog[i].setDefault();

}

setTextArea();

}else{

dispose();

}

}

雷区界面设计代码:

privatePolygonsegmentPolygon[];

privateintnumberSegment[][]={

{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

};

privateintdiv[]={1,10,100,1000,10000,100000};

privateImagenumberImage[];

privateColorfontColor=Color.red;//thecolorofnumber

privateColorbgColor=Color.black;

privateColormaskColor=Color.darkGray;

privateintdWidth=12;

privateintdHeight=21;

publicLedNumber(){

init();

}

publicLedNumber(Colorfc){

fontColor=fc;

init();

}

publicLedNumber(Colorfc,Colorbgc){

bgColor=bgc;

fontColor=fc;

init();

}

publicLedNumber(Colorfc,Colorbgc,Colormc){

bgColor=bgc;

fontColor=fc;

maskColor=mc;

init();

}

publicImagegetLedImage(intdg,intbound){

dg%=div[bound];

Imageimage=newBufferedImage(dWidth*bound,dHeight,BufferedImage.TYPE_INT_RGB);

Graphicsg=image.getGraphics();

bound--;

for(inti=bound;i>=0;i--){

g.drawImage(numberImage[dg/div[i]],(bound-i)*dWidth,0,this);

dg%=div[i];

}

returnimage;

}

publicvoidinit(){

segmentPolygon=newPolygon[7];

numberImage=newImage[10];

//setuppolygons

setNumberPolygon();

setNumberImage();

}

publicvoidsetBackGround(Colorbgc){

bgColor=bgc;

}

publicvoidsetFontColor(Colorfc){

fontColor=fc;

}

publicvoidsetMaskColor(Colormkc){

maskColor=mkc;

}

publicvoidsetDigitWidth(intw){

dWidth=w;

init();

}

publicvoidsetDigitHeight(inth){

dHeight=h;

init();

}

publicvoidsetDigitSize(intw,inth){

dWidth=w;

dHeight=h;

init();

}

privatevoidsetNumberImage(){

inti=0;

intj=0;

intk;

Graphicsg;

while(i<10){

numberImage[i]=newBufferedImage(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

k=numberSegment[8][j];

g.fillPolygon(segmentPolygon[k]);

j++;

}

g.setColor(fontColor);

j=0;

while(j

k=numberSegment[i][j];

g.fillPolygon(segmentPolygon[k]);

j++;

}

i++;

}

}

publicvoidsetNumberPolygon(){

intmid=dHeight/2+1;

segmentPolygon[0]=newPolygon();

segmentPolygon[0].addPoint(2,1);

segmentPolygon[0].addPoint(dWidth-2,1);

segmentPolygon[0].addPoint(dWidth-5,4);

segmentPolygon[0].addPoint(4,4);

segmentPolygon[1]=newPolygon();

segmentPolygon[1].addPoint(dWidth-1,1);

segmentPolygon[1].addPoint(dWidth-1,mid-1);

segmentPolygon[1].addPoint(dWidth-2,mid-1);

segmentPolygon[1].addPoint(dWidth-4,mid-3);

segmentPolygon[1].addPoint(dWidth-4,4);

segmentPolygon[2]=newPolygon();

segmentPolygon[2].addPoint(dWidth-1,mid);

segmentPolygon[2].addPoint(dWidth-1,dHeight-2);

segmentPolygon[2].addPoint(dWidth-4,dHeight-5);

segmentPolygon[2].addPoint(dWidth-4,mid+1);

segmentPolygon[2].addPoint(dWidth-3,mid);

segmentPolygon[3]=newPolygon();

segmentPolygon[3].addPoint(dWidth-2,dHeight-1);

segmentPolygon[3].addPoint(1,dHeight-1);

segmentPolygon[3].addPoint(4,dHeight-4);

segmentPolygon[3].addPoint(dWidth-4,dHeight-4);

segmentPolygon[4]=newPolygon();

segmentPolygon[4].addPoint(1,dHeight-2);

segmentPolygon[4].addPoint(1,mid);

segmentPolygon[4].addPoint(3,mid);

segmentPolygon[4].addPoint(4,mid+1);

segmentPolygon[4].addPoint(4,dHeight-5);

segmentPolygon[5]=newPolygon();

segmentPolygon[5].addPoint(1,mid-1);

segmentPolygon[5].addPoint(1,1);

segmentPolygon[5].addPoint(4,4);

segmentPolygon[5].addPoint(4,mid-3);

segmentPolygon[5].addPoint(2,mid-1);

segmentPolygon[6]=newPolygon();

segmentPolygon[6].addPoint(3,mid-1);

segmentPolygon[6].addPoint(4,mid-2);

segmentPolygon[6].addPoint(dWidth-4,mid-2);

segment

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1