Java应用技术实训报告.docx
- 文档编号:20968501
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:46
- 大小:329.36KB
Java应用技术实训报告.docx
《Java应用技术实训报告.docx》由会员分享,可在线阅读,更多相关《Java应用技术实训报告.docx(46页珍藏版)》请在冰豆网上搜索。
Java应用技术实训报告
Java应用技术实训报告
题目
起讫日期
所在院系
学生姓名专业
班级学号
指导教师职称
所在单位
年月日
一.总体设计
本系统共包括14个java源文件和6个图象文件。
1.类之间的关系如图1所示。
2.java源文件及其功能如表1所示。
3.图象文件
地雷.gif:
地雷方块上的图标。
无雷.gif:
无雷方块上的图标。
触雷.gif:
触雷时方块上的图标。
探雷错误.gif:
游戏结束时,指出标雷错误的图标。
微笑脸.gif:
按钮上的通常图标。
哭脸.gif:
触雷时按钮上图标。
二、详细设计
1.主类Game
(1)成员变量(见表2.11)
(2)方法(见表2.12)
(3)源代码见文件Game.java
2.方块Block
(1)成员变量(见表2.21)
(2)方法(见表2.22)
(3)源代码见文件Block.java
3.雷区MineSquare
(1)成员变量(见表2.31)
(2)方法(见表2.32)
(3)源代码见文件MineSquare.java
4.雷标数目FindAroundMineMarkNumber.java
(1)方法(见表2.41)
(2)源代码见文件FindAroundMineMarkNumber.java
5.雷标判断DetermineMineMarkIsRightOrWrong
(1)成员变量(见表2.51)
(2)方法(见表2.52)
(3)源代码见文件DetermineMineMarkIsRightOrWrong.java
6.成片挖开区域DetermineDigArea
(1)成员变量(见表2.61)
(2)方法(见表2.62)
(3)源代码见文件DetermineDigArea.java
7.无雷连通区FindSafeArea
(1)方法(见表2.71)
(2)源代码见文件FindSafeArea.java
8.随机布雷RandomSetMine
(1)成员变量(见表2.81)
(2)方法(见表2.82)
(3)源代码见文件RandomSetMine.java
9.周围地雷个数FindAroundMineNumber
(1)方法见表(见表2.91)
(2)源代码见文件FindAroundMineNumber.java
10.显示剩余雷数CountMine
(1)成员变量(见表2.101)
(2)方法(见表2.102)
(3)源代码见文件CountMine.java
11.计时器TimeCount
(1)成员变量(见表2.111)
(2)方法(见表2.112)
(3)源代码见文件TimeCount.java
12.英雄榜录入对话框Record
(1)成员变量(见表2.121)
(2)方法(见表2.122)
(3)源代码见文件Record.java
13.显示英雄榜对话框ShowRecord
(1)成员变量(见表2.131)
(2)方法(见表2.132)
(3)源代码见文件ShowRecord.java
14.挖雷成功DecideWinner
(1)方法见表(见表2.141)
(2)源代码见文件DecideWinner.java
源代码
Game.java
importjava.awt.event.*;
importjava.awt.*;
importjavax.swing.*;
importjavax.swing.border.*;
importjava.util.*;
importjava.io.*;
publicclassGameextendsJFrameimplementsActionListener
{JMenuBarbar;
JMenufileMenu;
JMenuItem初级,中级,高级,扫雷英雄榜;
intgrade=2;
MineSquare雷阵;
JButtonbuttonPerson;
Containercon;
JPanelbox;
File英雄榜=newFile("英雄榜.txt");
Hashtablehashtable=null;
Record记录对话框=null;
ShowRecord显示英雄榜对话框=null;
Game()
{buttonPerson=newJButton(newImageIcon("微笑脸.gif"));
雷阵=newMineSquare("中级",40,16,16,buttonPerson,记录对话框);
buttonPerson.addActionListener(this);
con=getContentPane();
con.add(雷阵,BorderLayout.CENTER);
box=newJPanel();
box.setLayout(newGridLayout(1,3));
box.add(雷阵.count.textShowMine);
box.add(buttonPerson);
box.add(雷阵.time.textShowTime);
con.add(box,BorderLayout.NORTH);
setVisible(true);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
setBounds(100,50,360,380);
bar=newJMenuBar();
fileMenu=newJMenu("游戏");
初级=newJMenuItem("初级");
中级=newJMenuItem("中级");
高级=newJMenuItem("高级");
fileMenu.setMnemonic('G');
初级.setMnemonic('B');
中级.setMnemonic('I');
高级.setMnemonic('E');
扫雷英雄榜=newJMenuItem("扫雷英雄榜");
初级.setMnemonic('T');
fileMenu.add(初级);
fileMenu.add(中级);
fileMenu.add(高级);
fileMenu.add(扫雷英雄榜);
bar.add(fileMenu);
setJMenuBar(bar);
初级.addActionListener(this);
中级.addActionListener(this);
高级.addActionListener(this);
扫雷英雄榜.addActionListener(this);
hashtable=newHashtable();
hashtable.put("初级","初级#"+999+"#匿名");
hashtable.put("中级","中级#"+999+"#匿名");
hashtable.put("高级","高级#"+999+"#匿名");
记录对话框=newRecord(this,hashtable);
记录对话框.setGrade("高级");
if(!
英雄榜.exists())
{try{
FileOutputStreamout=newFileOutputStream(英雄榜);
ObjectOutputStreamobject_out=newObjectOutputStream(out);
object_out.writeObject(hashtable);
object_out.close();
out.close();
}
catch(IOExceptione)
{
}
}
显示英雄榜对话框=newShowRecord(this,hashtable);
validate();
}
publicvoidnewGame(Stringgrade,intnumber,introws,intcols,intw,inth)
{buttonPerson.setIcon(newImageIcon("微笑脸.gif"));
记录对话框.setGrade(grade);
雷阵=newMineSquare(grade,number,rows,cols,buttonPerson,记录对话框);
con.removeAll();
box.removeAll();
box.add(雷阵.count.textShowMine);
box.add(buttonPerson);
box.add(雷阵.time.textShowTime);
con.add(box,BorderLayout.NORTH);
con.add(雷阵,BorderLayout.CENTER);
setBounds(10,10,w,h);
validate();
}
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==初级)
{grade=1;
newGame("初级",10,8,8,180,220);
}
if(e.getSource()==中级)
{
grade=2;
newGame("中级",40,16,16,360,380);
}
if(e.getSource()==高级)
{grade=3;
newGame("高级",99,22,22,500,520);
}
if(e.getSource()==扫雷英雄榜)
{
显示英雄榜对话框.显示记录();
显示英雄榜对话框.setVisible(true);
}
if(e.getSource()==buttonPerson)
{if(grade==1)
{newGame("初级",10,8,8,180,220);
}
if(grade==2)
{newGame("中级",40,16,16,360,380);
}
if(grade==3)
{newGame("高级",99,22,22,500,520);
}
}
}
publicstaticvoidmain(Stringargs[])
{newGame();
}
}
Block.java
importjava.awt.event.*;
importjava.awt.*;
importjavax.swing.*;
importjavax.swing.border.*;
publicclassBlockextendsJButtonimplementsMouseListener
{boolean雷=false,
周围无雷=true;
int周围的雷数=0;
int探雷标记=-1;
JLabellabel;
Pointp;
publicBlock()
{label=newJLabel();
setBorder(BorderFactory.createMatteBorder(1,
1,
0,
0,
Color.lightGray));
label.setBorder(BorderFactory.createMatteBorder(1,
1,
0,
0,
Color.lightGray));
label.setHorizontalAlignment(JLabel.CENTER);
label.setLayout(newBorderLayout());
label.add(this,BorderLayout.CENTER);
p=newPoint(0,0);
addMouseListener(this);
}
publicvoid设置是否是雷(booleanb)
{雷=b;
}
publicboolean判断是否是雷()
{return雷;
}
publicvoid设置是雷时的图标(Iconicon)
{label.setIcon(icon);
}
publicvoid设置周围无雷时的图标(Iconicon)
{label.setIcon(icon);
}
publicvoid设置周围有雷时的名字(Stringname)
{label.setText(name);
}
publicString获取名字()
{returnlabel.getText();
}
publicvoid设置周围的雷数(intn)
{周围的雷数=n;
}
publicint获取周围的雷数()
{return周围的雷数;
}
publicvoid设置在雷区中的位置(inti,intj)
{p=newPoint(i,j);
}
publicPoint获取在雷区中的位置()
{returnp;
}
publicint获取探雷标记()
{return探雷标记;
}
publicvoidmousePressed(MouseEvente)
{booleanright=SwingUtilities.isRightMouseButton(e);
if((right==true)&&(this.isOpaque()==true))
{探雷标记=(探雷标记+1)%3;
repaint();
}
}
publicvoidpaintComponent(Graphicsg)
{super.paintComponent(g);
if(探雷标记==0)
{g.setColor(Color.red);
g.fillRect(6,4,8,6);
g.drawLine(13,10,14,18);
}
if(探雷标记==1)
{g.setColor(Color.blue);
g.drawString("?
",6,15);
}
}
publicvoidmouseEntered(MouseEvente)
{}
publicvoidmouseReleased(MouseEvente)
{}
publicvoidmouseExited(MouseEvente)
{}
publicvoidmouseClicked(MouseEvente)
{}
}
MineSquare.java
importjava.awt.event.*;
importjava.awt.*;
importjavax.swing.*;
importjava.util.*;
importjava.io.*;
publicclassMineSquareextendsJPanelimplementsMouseListener
{introws=10,cols=10,雷数=10;
JButtonbuttonFace=null;
Blockblock[][];
TimeCounttime;
CountMinecount;
Stringgrade=null;
RandomSetMine随机布雷者;
FindAroundMineNumber确定周围雷数者;
FindSafeArea找出无雷连通区者;
DetermineDigArea成片挖开者;
DetermineMineMarkIsRightOrWrong确定雷标记是否正确者;
FindAroundMineMarkNumber确定周围雷标数目者;
DecideWinner判断是否胜利者;
Record记录对话框=null;
publicMineSquare(Stringgrade,intmineNumber,introws,intcols,JButtonb,JDialogdialog)
{this.grade=grade;
this.rows=rows;
this.cols=cols;
雷数=mineNumber;
判断是否胜利者=newDecideWinner();
记录对话框=(Record)dialog;
block=newBlock[rows+1][cols+1];
buttonFace=b;
time=newTimeCount();
count=newCountMine(雷数);
count.textShowMine.setText(""+雷数);
setLayout(newGridLayout(rows,cols));
for(inti=1;i<=rows;i++)
{for(intj=1;j<=cols;j++)
{block[i][j]=newBlock();
block[i][j].设置在雷区中的位置(i,j);
}
}
for(inti=1;i<=rows;i++)
{for(intj=1;j<=cols;j++)
{add(block[i][j].label);
block[i][j].addMouseListener(this);
}
}
随机布雷者=newRandomSetMine();
随机布雷者.随机布雷(雷数,block,rows,cols);
确定周围雷数者=newFindAroundMineNumber();
for(inti=1;i<=rows;i++)
{for(intj=1;j<=cols;j++)
{确定周围雷数者.设置周围的雷数(i,j,block,rows,cols);
}
}
}
publicvoidgameOver()
{time.interrupt();
buttonFace.setIcon(newImageIcon("哭脸.gif"));
for(inti=1;i<=rows;i++)
{for(intj=1;j<=cols;j++)
{block[i][j].removeMouseListener(this);
if(block[i][j].判断是否是雷()&&block[i][j].isOpaque()&&block[i][j].探雷标记!
=0)
{block[i][j].requestFocus();
block[i][j].setOpaque(false);
}
if(block[i][j].探雷标记==0&&!
block[i][j].判断是否是雷())
{block[i][j].requestFocus();
block[i][j].探雷标记=-1;
block[i][j].repaint();
block[i][j].setIcon(newImageIcon("探雷错误.gif"));
}
}
}
}
publicvoidmousePressed(MouseEvente)
{booleanleft=SwingUtilities.isLeftMouseButton(e);
booleanright=SwingUtilities.isRightMouseButton(e);
BlockblockSource=(Block)e.getSource();
boolean雷=blockSource.判断是否是雷();
if(left==true&&blockSource.isOpaque()==true&&blockSource.获取探雷标记()!
=0)
{try{time.start();
}
catch(Exceptionee){
}
if(雷==true)
{blockSource.requestFocus();
blockSource.setOpaque(false);
blockSource.探雷标记=-1;
blockSource.repaint();
blockSource.setIcon(newImageIcon("触雷.gif"));
gameOver();
}
else
{buttonFace.setIcon(newImageIcon("微笑脸.gif"));
if(blockSource.周围无雷==false&&blockSource.获取探雷标记()!
=0)
{blockSource.setOpaque(false);
blockSource.探雷标记=-1;
blockSource.repaint();
}
if(blockSource.周围无雷==true&&blockSource.isOpaque())
{blockSource.setOpaque(false);
PointblockPoint=(Point)blockSource.获取在雷区中的位置();
inti=blockPoint.x;
intj=blockPoint.y;
找出无雷连通区者=newFindSafeArea();
Vectortree=找出无雷连通区者.确定无雷连通区(i,j,block,rows,cols);
for(intindex=0;index {Pointp=(Point)tree.elementAt(index); intm=p.x,n=p.y; for(intk=Math.max(m-1,1);k<=Math.min(m+1,rows);k++) {for(intt=Math.max(n-1,1);t<=Math.min(n+1,cols);t++) {if(block[k][t].探雷标记==0) {gameOver(); } else{block[k][t].requestFocus(); block[k][t].setOpaque(false); block[k][t].探雷标记=-1; block[k][t].repaint(); } } } } tree.removeAllElements(); } } } if(right) {if(blockSource.探雷标记==0&&blockSource.isOpaque
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 应用技术 报告