首页 > 技术文章 > 结对项目-连连看

zhaolinlin 2015-05-16 18:26 原文

一、      题目简介:休闲娱乐连连看

二、源码的github链接:https://github.com/zllwxq130/test/blob/master/lianliankan.md

三、结对分工情况

    结对人:4109—4112 吕彩霞 — 赵林林

        赵林林:掌握代码清晰,能力强,主要负责代码编辑。

        吕彩霞:动手能力强,输入代码快,主要负责题目选择及输入运行。

        共同任务:运行过程中出现的代码错误进行修改,共同研究错误原因。

四、      结对实践过程

     1、课题设计的目的: 
       1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。 
       2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力,提高学生适应实际,实践编程的能力;  

       3)熟练掌握JAVA语言中图形用户界面程序的编写; 

       4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。 

      2、课题设计的意义: 

        近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。 一个学期的时间来学习JAVA这门课,我感觉觉得还不错,因为我们不但学习了书上理论的东西,还安排了上机操作课。我认为学习一门计算机语言必定离不开实践,只有通过实践我们才能体会到书本上体会不到的东西。所以,我们不仅要认真学习课本理论知识,更重要的是要通过上机实践才能增强和巩固我的知识。课程设计是培养我们综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是我们实践能力与创新精神的综合培养;在实践能力方面培养我们理论与实践相结合的作风,增强了我们将来在人才市场上的竞争力。所以,对于我们初学者,首先利用课程设计这样的较小项目锻炼自己的科学研究精神和提高创新能力,是很有必要的。 

3、可行性论证: 

“连连看“游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。我通过所学的JAVA,设计了一个操作简单、界面美观、功能较齐全的“连连看”游戏。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。这个游 戏是用图形界面实现的,通过编译解释后,出现一个图开界面。界面是由若干个小方格组成的,每一个小方格里有一个数值,如果在一个边上有相同的数值,连续点击它们就会消失,同时界面上正上方的分数就会自动加分。游戏还设有退出,重设,再来一局等功能。

         4、连连看算法设计

      在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。 

      * 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了) 

    * 1.相邻   

      * 2. 若不相邻的先在第一个按钮的同行找一个空按钮。
  1).找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。

     2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。

     3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了,可以消了.  

      * 3.若2失败后,再在第一个按钮的同列找一个空按钮。

1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮 

2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。

3).没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。 

      *  若以上三步都失败,说明这两个按钮不可以消去。

    主要代码:

界面设计:

  1. public void init(){
  2. mainFrame=new JFrame("JKJ连连看");
  3. thisContainer = mainFrame.getContentPane();
  4. thisContainer.setLayout(new BorderLayout());
  5. centerPanel=new JPanel();
  6. southPanel=new JPanel();
  7. northPanel=new JPanel();
  8. thisContainer.add(centerPanel,"Center");
  9. thisContainer.add(southPanel,"South");
  10. thisContainer.add(northPanel,"North");
  11. centerPanel.setLayout(new GridLayout(6,5));
  12. for(int cols = 0;cols < 6;cols++){
  13. for(int rows = 0;rows < 5;rows++ ){
  14. diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));
  15. diamondsButton[cols][rows].addActionListener(this);
  16. centerPanel.add(diamondsButton[cols][rows]);
  17. }
  18. }
  19. exitButton=new JButton("退出");
  20. exitButton.addActionListener(this);
  21. resetButton=new JButton("重列");
  22. resetButton.addActionListener(this);
  23. newlyButton=new JButton("再来一局");
  24. newlyButton.addActionListener(this);
  25. southPanel.add(exitButton);
  26. southPanel.add(resetButton);
  27. southPanel.add(newlyButton);
  28. fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));
  29. northPanel.add(fractionLable);
  30. mainFrame.setBounds(280,100,500,450);
  31. mainFrame.setVisible(true);
  32. }

主函数:

  1. public static void main(String[] args) {
  2. lianliankan llk = new lianliankan();
  3. llk.randomBuild();
  4. llk.init();
  5. }
  6. }

   消去函数:

  1. public void xiao() { //相同的情况下能不能消去。仔细分析,不一条条注释
  2. if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判断是否相邻
  3. remove();
  4. }
  5. else{
  6. for (j=0;j<7;j++ ) {
  7. if (grid[x0][j]==0){ //判断第一个按钮同行哪个按钮为空
  8. if (y>j) { //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边
  9. for (i=y-1;i>=j;i-- ){ //判断第二按钮左侧直到第一按钮中间有没有按钮
  10. if (grid[x][i]!=0) {
  11. k=0;
  12. break;
  13. }
  14. else{ k=1; } //K=1说明通过了第一次验证
  15. }
  16. if (k==1) {
  17. linePassOne();
  18. }
  19. }
  20. if (y<j){ //如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边
  21. for (i=y+1;i<=j ;i++ ){ //判断第二按钮左侧直到第一按钮中间有没有按钮
  22. if (grid[x][i]!=0){
  23. k=0;
  24. break;
  25. }
  26. else { k=1; }
  27. }
  28. if (k==1){
  29. linePassOne();
  30. }
  31. }
  32. if (y==j ) {
  33. linePassOne();
  34. }
  35. }
  36. if (k==2) {
  37. if (x0==x) {
  38. remove();
  39. }
  40. if (x0<x) {
  41. for (n=x0;n<=x-1;n++ ) {
  42. if (grid[n][j]!=0) {
  43. k=0;
  44. break;
  45. }
  46. if(grid[n][j]==0 && n==x-1) {
  47. remove();
  48. }
  49. }
  50. }
  51. if (x0>x) {
  52. for (n=x0;n>=x+1 ;n-- ) {
  53. if (grid[n][j]!=0) {
  54. k=0;
  55. break;
  56. }
  57. if(grid[n][j]==0 && n==x+1) {
  58. remove();
  59. }
  60. }
  61. }
  62. }
  63. }
  64. for (i=0;i<8;i++ ) { //列
  65. if (grid[i][y0]==0) {
  66. if (x>i) {
  67. for (j=x-1;j>=i ;j-- ) {
  68. if (grid[j][y]!=0) {
  69. k=0;
  70. break;
  71. }
  72. else { k=1; }
  73. }
  74. if (k==1) {
  75. rowPassOne();
  76. }
  77. }
  78. if (x<i) {
  79. for (j=x+1;j<=i;j++ ) {
  80. if (grid[j][y]!=0) {
  81. k=0;
  82. break;
  83. }
  84. else { k=1; }
  85. }
  86. if (k==1) {
  87. rowPassOne();
  88. }
  89. }
  90. if (x==i) {
  91. rowPassOne();
  92. }
  93. }
  94. if (k==2){
  95. if (y0==y) {
  96. remove();
  97. }
  98. if (y0<y) {
  99. for (n=y0;n<=y-1 ;n++ ) {
  100. if (grid[i][n]!=0) {
  101. k=0;
  102. break;
  103. }
  104. if(grid[i][n]==0 && n==y-1) {
  105. remove();
  106. }
  107. }
  108. }
  109. if (y0>y) {
  110. for (n=y0;n>=y+1 ;n--) {
  111. if (grid[i][n]!=0) {
  112. k=0;
  113. break;
  114. }
  115. if(grid[i][n]==0 && n==y+1) {
  116. remove();
  117. }
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }
  124.  

运行结果:



 

 

五、 问题及心得

   这次课程设计不仅是对这学期所学知识的 一种综合检验,而且也是对我们团队合作能力的一种提高,增强了团队实践能力。通过这次课程 设计使我明白了自己知识还比较欠缺, 只是学习书本知识还是远远不够的, 自己不会的东西 还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的 理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。

   在这次的课程设计中不仅检验了我们所学习的知识, 也培养了我们的实践能力,让我们知道遇到一个问题,如何去寻找思路,如何去解决问题,最终 完成整个事情。

 

推荐阅读