java课程设计文档格式.docx
《java课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《java课程设计文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
![java课程设计文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/9/af4ac88f-05e2-4f8f-8151-add262def95d/af4ac88f-05e2-4f8f-8151-add262def95d1.gif)
.该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。
方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。
2>
.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。
3>
.重列按钮(帮助)的功能:
游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。
4>
.退出按钮:
击左下方的“退出游戏”按钮,即可结束游戏。
1.2本系统涉及的知识点:
循环,javaGUI组件,函数,数组,分支等
2.功能设计
2.1算法设计
本系统需要实现的功能要求:
图一,数字按钮功能模块
图二,三个功能按钮模块
图三,数据记录模块
图四,鼠标操作模块
2.2部分模块流程图:
3代码设计
packagemybase.programe;
/*
*lianliankan总体算法思路:
由两个确定的按钮。
若这两个按钮的数字相等,就开始找它们相连的路经。
这个找路经
*分3种情况:
(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。
这样就会有
*三条路经。
若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)
*1.相邻
*
*2.若不相邻的先在第一个按钮的同行找一个空按钮。
1).找到后看第二个按钮横向到这个空按钮
*所在的列是否有按钮。
2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。
3).没有的话,再从
*与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。
没有的话路经就通了,可以消了.
*3.若2失败后,再在第一个按钮的同列找一个空按钮。
1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。
*2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。
3).没有的话,再从与第一个按钮同列的
*那个空按钮横向到与第二个按钮同列看是否有按钮。
没有的话路经就通了,可以消了。
*若以上三步都失败,说明这两个按钮不可以消去。
*/
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassLianLianKanimplementsActionListener{
JFramemainFrame;
//主面板
ContainerthisContainer;
JPanelcenterPanel,southPanel,northPanel;
//子面板
JButtondiamondsButton[][]=newJButton[6][5];
//游戏按钮数组
JButtonexitButton,resetButton,newlyButton;
//退出,重列,重新开始按钮
JLabelfractionLable=newJLabel("
0"
);
//实例化分数标签,并初始化为“0”
JButtonfirstButton,secondButton;
//分别记录两次被选中的按钮
//储存游戏按钮位置(这里其实只要6行,5列。
但是我们用了8行,7列。
是等于在这个面板按钮的周围还围
//了一层是0的按钮,这样就可以实现靠近面板边缘的两个按钮可以消去)
intgrid[][]=newint[8][7];
staticbooleanpressInformation=false;
//判断是否有按钮被选中
intx0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;
//游戏按钮的位置坐标
inti,j,k,n;
//消除方法控制
publicvoidinit()
{
mainFrame=newJFrame("
JKJ连连看"
//实例化
thisContainer=mainFrame.getContentPane();
//将thisContainer放入mainFrame的内容窗口中
thisContainer.setLayout(newBorderLayout());
//为thisContainer创建Borderlayout布局管理器
centerPanel=newJPanel();
southPanel=newJPanel();
northPanel=newJPanel();
thisContainer.add(centerPanel,"
Center"
//以下三行是为thisContainer容器添加不同方位的新的面板组件
thisContainer.add(southPanel,"
South"
thisContainer.add(northPanel,"
North"
centerPanel.setLayout(newGridLayout(6,5));
//为centerPanel面板设置网格式布局管理器(6行5列)的容纳组建的网格
for(intcols=0;
cols<
6;
cols++){
for(introws=0;
rows<
5;
rows++){
diamondsButton[cols][rows]=newJButton(String.valueOf(grid[cols+1][rows+1]));
//将数组的行数与列数各自加一后对应元素转化为字符串类型并赋值给对应的原始数组按钮
diamondsButton[cols][rows].addActionListener(this);
//为每个网格单元设置事件监听接口
centerPanel.add(diamondsButton[cols][rows]);
}
exitButton=newJButton("
退出"
//实例特定按钮并添加时间监听接口
exitButton.addActionListener(this);
resetButton=newJButton("
重列"
resetButton.addActionListener(this);
newlyButton=newJButton("
再来一局"
newlyButton.addActionListener(this);
southPanel.add(exitButton);
//将三个特定接口添加到三个确定方位布局的面板组件容器中
southPanel.add(resetButton);
southPanel.add(newlyButton);
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));
//嵌套,把整形对象Integer转换成基本数据类型int(整数)再转化为字符串型。
northPanel.add(fractionLable);
mainFrame.setBounds(280,100,500,450);
//设置主界面的大小
mainFrame.setVisible(true);
//设置可见
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//设置当点击后界面仍旧停留且不会退出进程
publicvoidrandomBuild(){//随机数
intrandoms,cols,rows;
for(inttwins=1;
twins<
=15;
twins++){//一共15对button,30个button上的数字
randoms=(int)(Math.random()*25+1);
//强制转换随机函数产生的数值,并进行必要运算避免“0”
for(intalike=1;
alike<
=2;
alike++){
cols=(int)(Math.random()*6+1);
//随机选取连连看中的单元网格
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!
=0){//等于0说明这个空格有了button
cols=(int)(Math.random()*6+1);
this.grid[cols][rows]=randoms;
publicvoidfraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));
publicvoidreload(){
intsave[]=newint[30];
intn=0,cols,rows;
for(inti=0;
i<
=6;
i++){
for(intj=0;
j<
=5;
j++){
if(this.grid[i][j]!
=0){
save[n]=this.grid[i][j];
//记下每个button的数字
n++;
//有几个没有消去的button
n=n-1;
this.grid=grid;
while(n>
=0){//把没有消去的button重新放一次
this.grid[cols][rows]=save[n];
n--;
mainFrame.setVisible(false);
pressInformation=false