java课程设计.docx
- 文档编号:10084289
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:19
- 大小:22.70KB
java课程设计.docx
《java课程设计.docx》由会员分享,可在线阅读,更多相关《java课程设计.docx(19页珍藏版)》请在冰点文库上搜索。
java课程设计
《Java程序设计》课程设计报告
2015—2016学年第二学期
设计题目:
《数字连连看》
学生姓名:
黄杰
学号:
3
专业班级:
软件工程1402
指导教师:
姜国权
2016年7月2日
1.JAVA程序设计书3
1.1《简易连连看》3
3
1.2本系统设计的知识点3
2.功能设计3
2.1算法设计3
2.2部分模块流程图4
3.代码设计5
4.界面及运行效果,测试工具与测试效果14
5.设计总结16
5.1.程序调试情况:
16
5.2.本人在程序设计中感想:
16
6.致谢16
主要参考文献16
:
1.1Java程序课程设计任务书
1.1《简易连连看游戏》
本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。
<1>.该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。
方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。
<2>.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。
<3>.重列按钮(帮助)的功能:
游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。
<4>.退出按钮:
击左下方的“退出游戏”按钮,即可结束游戏。
1.2本系统涉及的知识点:
循环,javaGUI组件,函数,数组,分支等
2.功能设计
2.1算法设计
本系统需要实现的功能要求:
数字按钮:
1.设计填有数字的按钮
2.设计放按钮的界面
图一,数字按钮功能模块
重列,结束,再来一局:
1.对数据重新排列
2.结束游戏
图二,三个功能按钮模块
数据记录:
输出完成游戏所得分数
图三,数据记录模块
鼠标操作
1.操作数字之间的连接
2.对已成功配对的进行消除
图四,鼠标操作模块
2.2部分模块流程图:
连连看游戏系统
数据记录
鼠标操作
数字按钮
重列,结束,再来一局
操作数字间的链接(配对)
对成功配对的数字进行消除
输出完成游戏所得分数
结束游戏
对数据重新排列
设计铺放按钮的界面
设计填有数字的按钮
3代码设计
packagemybase.programe;
/*
*lianliankan总体算法思路:
由两个确定的按钮。
若这两个按钮的数字相等,就开始找它们相连的路经。
这个找路经
*分3种情况:
(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。
这样就会有
*三条路经。
若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)
*1.相邻
*
*2.若不相邻的先在第一个按钮的同行找一个空按钮。
1).找到后看第二个按钮横向到这个空按钮
*所在的列是否有按钮。
2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。
3).没有的话,再从
*与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。
没有的话路经就通了,可以消了.
*
*3.若2失败后,再在第一个按钮的同列找一个空按钮。
1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。
*2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。
3).没有的话,再从与第一个按钮同列的
*那个空按钮横向到与第二个按钮同列看是否有按钮。
没有的话路经就通了,可以消了。
*
*若以上三步都失败,说明这两个按钮不可以消去。
*/
importjavax.swing.*;
importjava.awt.*;
import;
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);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=randoms;
}
}
}
publicvoidfraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));
}
publicvoidreload(){
intsave[]=newint[30];
intn=0,cols,rows;
intgrid[][]=newint[8][7];
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重新放一次
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!
=0){
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=save[n];
n--;
}
mainFrame.setVisible(false);
pressInformation=false;//这里一定要将按钮点击信息归为初始
init();
for(inti=0;i<6;i++){
for(intj=0;j<5;j++){
if(grid[i+1][j+1]==0)
diamondsButton[i][j].setVisible(false);
}
}
}
publicvoidestimateEven(intplaceX,intplaceY,JButtonbz){
if(pressInformation==false){
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
pressInformation=true;
}else{
x0=x;
y0=y;
fristMsg=secondMsg;
firstButton=secondButton;
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
if(fristMsg==secondMsg&&secondButton!
=firstButton){
xiao();
}
}
}
publicvoidxiao(){//相同的情况下能不能消去。
if((x0==x&&(y0==y+1||y0==y-1))||((x0==x+1||x0==x-1)&&(y0==y))){//判断是否相邻
remove();
}
else{
for(j=0;j<7;j++){
if(grid[x0][j]==0){//判断和第一个按钮同行的哪个按钮为空
//如果找到一个为空的,就按列值的三种情况比较第二个按钮与空按钮的位置
if(y>j){//第二个按钮在空按钮右边
for(i=y-1;i>=j;i--){//检测从第二个按钮横向左边到空格所在列为止是否全是空格
if(grid[x][i]!
=0){
k=0;
break;//存在非空格的就退出,这一退出就不可能k==2了,所以就会到下而215行出同理的判断列
}else{
k=1;
}//K=1说明全是空格通过了第一次验证,也就是从第二个按钮横向左边到空格所在列为止全是空格
}
if(k==1){
linePassOne();//进入第二次验证,也就是从第一个按钮到它同行的空格之间的空格判断
}
}
if(y for(i=y+1;i<=j;i++){//检测从第二个按钮横向右边到空格所在列为止是否全是空格 if(grid[x][i]! =0){ k=0; break; }else{ k=1; } } if(k==1){ linePassOne(); } } if(y==j){//第二个按钮和空按钮同列 linePassOne(); } } //第三次检测,检测确定为空的第j列的那个按钮竖向到第二个按钮,看是不是有按钮 if(k==2){ if(x0==x){//第一,二按钮在同行 remove(); } if(x0 for(n=x0;n<=x-1;n++){//从空按钮竖向到第二个按钮所在行是否有按钮 if(grid[n][j]! =0){ k=0; break; } //没有按钮,说明这条路经就通了 if(grid[n][j]==0&&n==x-1){ remove(); } } } if(x0>x){//第一按钮在第二按钮上边 for(n=x0;n>=x+1;n--){ if(grid[n][j]! =0){ k=0; break; } if(grid[n][j]==0&&n==x+1){ remove(); } } } } } //当上面的检测与第一个按钮同行的空格按钮失败后(不能找到与第二个按钮的相连路经),下面就执行 //检测与第一个按钮同列的空格按钮 for(i=0;i<8;i++){ if(grid[i][y0]==0){//判断和第一个按钮同列的哪个按钮为空 if(x>i){//第二个按钮在这个空按钮的下面 for(j=x-1;j>=i;j--){ if(grid[j][y]! =0){ k=0; break; }else{ k=1; } } if(k==1){ rowPassOne(); } } if(x for(j=x+1;j<=i;j++){ if(grid[j][y]! =0){ k=0; break; }else{ k=1; } } if(k==1){ rowPassOne(); } } if(x==i){//第二个按钮与这个空按钮同行 rowPassOne(); } } if(k==2){ if(y0==y){//第二个按钮与第一个按钮同列 remove(); } if(y0 for(n=y0;n<=y-1;n++){ if(grid[i][n]! =0){ k=0; break; } if(grid[i][n]==0&&n==y-1){remove(); } } } if(y0>y){//第二个按钮在第一个按钮左边 for(n=y0;n>=y+1;n--){ if(grid[i][n]! =0){ k=0; break; } if(grid[i][n]==0&&n==y+1){ remove(); } } } } }//--------------------------------for }//-------------else }//------------xiao publicvoidlinePassOne(){ if(y0>j){//第一按钮同行空按钮在左边 for(i=y0-1;i>=j;i--){//判断第一按钮同左侧空按钮之间有没按钮 if(grid[x0][i]! =0){ k=0; break; }else{ k=2; }//K=2说明通过了第二次验证 } } if(y0 for(i=y0+1;i<=j;i++){ if(grid[x0][i]! =0){ k=0; break; }else{ k=2; } } } } publicvoidrowPassOne(){ if(x0>i){//第一个按钮在与它同列的那个空格按钮下面 for(j=x0-1;j>=i;j--){ if(grid[j][y0]! =0){ k=0; break; }else{ k=2; } } } if(x0 for(j=x0+1;j<=i;j++){ if(grid[j][y0]! =0){ k=0; break; }else{ k=2; } } } } publicvoidremove(){ firstButton.setVisible(false); secondButton.setVisible(false); fraction(); pressInformation=false; k=0; grid[x0][y0]=0; grid[x][y]=0; }//具体的消去内容,并将已消去的按钮值赋值为“0” publicvoidactionPerformed(ActionEvente){//对按钮事件发生后的定义 if(e.getSource()==newlyButton){ intgrid[][]=newint[8][7]; this.grid=grid; randomBuild(); mainFrame.setVisible(false); pressInformation=false; init(); } if(e.getSource()==exitButton) System.exit(0); if(e.getSource()==resetButton) reload(); for(intcols=0;cols<6;cols++){ for(introws=0;rows<5;rows++){ if(e.getSource()==diamondsButton[cols][rows]) estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);} } } publicstaticvoidmain(String[]args){//主函数,调用。 LianLianKanllk=newLianLianKan(); llk.randomBuild(); llk.init(); } } 4.界面及运行效果、测试工具与测试效果 5.设计总结 5.1.程序调试情况: 在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。 分三种情况: (从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路径。 这样就会有三条路径。 若这三条路径上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了) 5.2.本人在程序设计中感想: 由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。 通过小游戏的设计,对以学过的内容加深理解,对游戏开发的过程有初步
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计