连连看课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《高级语言程序设计(2)》课程设计报告
1、程序设计说明书
【设计题目】连连看程序
【问题描述】
小游戏连连看,玩家需要找出游戏中图片相同的两个方块,如果它们之间的连接线不多于3根直线,就可将这两个方块消除,当游戏中没有满足条件的图案时,还可以实现重新排序的功能,游戏中的倒计时结束时,游戏结束时,游戏结束即可得出所得分数。
【软件功能】
1 通过找出游戏中图片相同的两个方块,将其消除
2 游戏中没有满足条件的方块时,可重新排列
3 可计算游戏总得分,有“下一局”和“退出游戏”的功能
4 可通过倒计时控制游戏时间,每一局开始倒计时都重新开始
5 利用SWING设计适合的图形用户界面
6 能响应鼠标或者键盘事件
【算法思想】
在检验两个图片能否消掉的时候,要让两个图片同时满足两个条件才行,就是两者配对并且连线成功。
分 3 种情况:这三种情况都需要三个检测,这三个检测分别检测一条直路经。
这样就会有三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了。
(1)、相邻
(2)、若不相邻的先在第一个按钮的同行找一个空按钮。1.找到后看第二个按钮
横向到这个空按钮所在的列是否有按钮。2.没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。3.没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了可以消了.
(3)、若(2)失败后,再在第一个按钮的同列找一个空按钮。1.找到后看第二个
按钮竖向到这个空按钮所在的行是否有按钮 2.没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3.没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。
若以上三步都失败,说明这两个按钮不可以消去
两图能相连的所有情况:
(1)(2)(3)
【类的设计】
图片连连看游戏程序中只有一个类,类名为LianLianKan,该类实现了接口ActionListener;该类总共有十三个方法,他们的功能分别是:init()初始化;
createImgBtn()传进两个String类型的参数,返回带有数字和图片的按钮;
randomBuild(),产生十五对随机的数字;fraction()计算得分;reload()将游戏按钮重列;estimateEven()传进两个int型和一个JButton型的三个参数(分别是击中的按钮位置坐标和按钮),选中按钮信息的存储与操作;xiao()消去符合游戏规则的相同的两个按钮;linePassOne()在第一按钮同行有空按钮的条件下判断第二转折点出现的情况;rowPassOne()在第一按钮同列有空按钮的条件下判断第二转折点出现的情况;remove()将相同的两个按钮消去;actionPerformed()实现按钮事件的监听;timerDemo()时间提示;main()主方法;
【用户界面】
【程序技巧】
1.程序采用图形用户界面,简单大方,且易于操作;
2.连连看图片采用大家熟悉的图片,能激起玩家的游戏兴趣;
3.游戏功能较为齐全,可实现退出、重列和下一局的功能,重列功能可对游戏中
剩余的图片进行重新排列,使游戏继续进行,下一局功能可以使游戏重新开始
4.游戏具有倒计时功能,能够控制游戏时限,使游戏具有一定难度,倒计时结束
时显示“game over”
5.游戏可以统计玩家的游戏得分
【模块划分及调用关系】
根据对“连连看”游戏的分析,该游戏可分为三个模块:算法模块、界面显示模块、菜单控制模块。
【模块划分及调用关系】
根据对“连连看”游戏的分析,该游戏可分为三个模块:算法模块、界面显示模块、菜单控制模块。
【模块流程图】
主模块流程图:
算法模块:
【运行说明】
将图片和LianLianKan.java文件放到同一个文件夹里
javac LianLianKan.java
java LianLianKan
或者在eclipse里面,将图片和LianLianKan.java文件放到同一个包中运行
2、程序上机调试报告
【语法错误及其排除】
将图片加载在按钮上,并在调用按钮时会出现随机的图片时出现错误,最后创建了一个方法JButton createImgBtn(String ing,String txt),作用是传进两个String类型的参数,返回带有数字和图片的按钮,方法中的主要内容有ImageIcon image = new
ImageIcon(getClass().getResource(ing));JButton button = new
JButton(txt,image);通过调用这个方法就可以将图片与按钮固定在一起。
加载计时器时出现错误,即如果只在初始方法init()里调用timerDemo()方法时,在点击重列按钮或者下一局按钮时,时间提示里的时间是两次时间相掺杂的;改为只在main()方法里调用timerDemo()方法,在点击重列按钮时没有问题,但在点击下一局按钮时,时间还是相掺杂着出现;最后改为在main()方法里调用timerDemo()方法的同时在actionPerformed()方法里将
if(e.getSource()==newlyButton)
{
int grid[][] = new int[8][7];
this.grid = grid;
randomBuild();
mainFrame.setVisible(false);
pressInformation=false;
Init();
}
改为:
if(e.getSource()==newlyButton)
{
flag=true;
int grid[][] = new int[8][7];
this.grid = grid;
randomBuild();
mainFrame.setVisible(false);
pressInformation=false;
init();
timerDemo();
}
【算法错误及其排除】
在编辑randomBuild()方法产生随机的两两相同的数字时,程序中会出现并非两两相同的图片,达不到预期的效果,后改为在randomBuild()方法里添加如下
这样的程序:while(grid[cols][rows]!=0){
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);