C++连连看源程序(课程设计ccsu)

C++连连看源程序(课程设计ccsu)

设计要求:

设计要求实现如下功能:

1)设计实现一个连连看游戏;

2)玩家选择两个相同的棋子则两棋子同时消去,可消去的子之间应该能连通,且连接时拐角不能超过两个;

3)当玩家找不到相应棋子时,玩家输入“?? ??”,系统应该提示可消去的棋子位置;

4)棋盘面积至少为20x20,中间应该空出大约10%~20%的空间用‘-’表示。棋子用大写字母ABCD表示。(提示:棋子种类不宜太多,且每种为偶数);

这是一个比较简单的搜索问题。
比如说:game[i][j];按其四个方向进行搜索,在i和j上的标号为1,表示没有拐角,在对1周围四个方向进行展开并标为2,表示有一个拐点;再对为2的拐点展开,同样的标为3,表示经过两次拐角能够到达!其他的点为0;
if(game[i][j]==0)return false;//表示不能找到这样的点
if(game[i][j]>0&&game[i][j]<4)return true;//表示可以找到这样的点


下面是关键部分的代码,如有错误,请高手指点
  bool  search( int  x1, int  y1, int  x2, int  y2)
 
2  {
 
3        memset(gk, 0 , sizeof (gk));
 
4         char  t = game[x2][y2];
 
5        game[x2][y2] = '   ' ;
 
6        gk[x1][y1] = 1 ;
 
7         // 对game[x1][y1]四个方向是空格的标为1 
  8         for  ( int  i = x1 - 1 ;i >= 0 ;i -- ){
 
9               if (game[i][y1] == '   ' )gk[i][y1] = 1 ;
10               else    break ;
11           }
12        for  ( int  j = x1 + 1 ;j < 26 ;j ++ ){
13                 if (game[j][y1] == '   ' )gk[j][y1] = 1 ;
14                 else   break ;
15             }
16      
17        for  ( int  i = y1 - 1 ;i >= 0 ;i -- ){
18             if (game[x1][i] == '   ' )gk[x1][i] = 1 ;
19            else    break ;
20           } 
21        for  ( int  i = y1 + 1 ;i < 26 ;i ++ ){
22             if (game[x1][i] == '   ' )gk[x1][i] = 1 ;
23            else    break ;
24           } 
25     
26       // 对gk[i][j]为1的四个方向是空格的标为2 
27       for  ( int  i = 1 ;i < 26 ;i ++ )
28       for  ( int  j = 1 ;j < 26 ;j ++ )
29            if   (gk[i][j] == 1 ){
30                  for  ( int  k = i - 1 ;k >= 0 ;k -- ){
31                   if   (game[k][j] == '   ' ){
32                       if (gk[k][j] == 0 )gk[k][j] = 2 ;
33                      }
34                   else   break ;
35                  }             
36               for  ( int  k = i + 1 ;k < 26 ;k ++ ){
37                   if   (game[k][j] == '   ' ){
38                        if (gk[k][j] == 0 )gk[k][j] = 2 ;
39                      }
40                    else   break ;       
41                  }
42              
43               for  ( int  k = j - 1 ;k >= 0 ;k -- ){
44                   if   (game[i][k] == '   ' ){
45                        if (gk[i][k] == 0 )gk[i][k] = 2 ;
46                      }
47                    else   break ;       
48                  }
49               for  ( int  k = j + 1 ;k < 26 ;k ++ ){
50                   if   (game[i][k] == '   ' ){
51                        if (gk[i][k] == 0 )gk[i][k] = 2 ;
52                      }
53                    else   break ;       
54                  }
55           }
56       // 对gk[i][j]为2的四个方向是空格的标为3
57       for  ( int  i = 1 ;i < 26 ;i ++ )
58       for  ( int  j = 1 ;j < 26 ;j ++ )
59       if   (gk[i][j] == 2 ){
60           for  ( int  k = i - 1 ;k >= 0 ;k -- ){
61                   if   (game[k][j] == '   ' ){
62                       if (gk[k][j] == 0 )gk[k][j] = 3 ;
63                      }
64                   else   break ;
65                  }             
66               for  ( int  k = i + 1 ;k < 26 ;k ++ ){
67                   if   (game[k][j] == '   ' ){
68                        if (gk[k][j] == 0 )gk[k][j] = 3 ;
69                      }
70                    else   break ;       
71                  }
72              
73               for  ( int  k = j - 1 ;k >= 0 ;k -- ){
74                   if   (game[i][k] == '   ' ){
75                        if (gk[i][k] == 0 )gk[i][k] = 3 ;
76                      }
77                    else   break ;       
78                  }
79               for  ( int  k = j + 1 ;k < 26 ;k ++ ){
80                   if   (game[i][k] == '   ' ){
81                        if (gk[i][k] == 0 )gk[i][k] = 3 ;
82                      }
83                    else   break ;       
84                  }
85            }       
86                     
87           game[x2][y2] = t;
88            if (gk[x2][y2] > 0 && gk[x2][y2] < 4 ) return   true ; // 如果连同且拐角不超过两个,返回true 
89            if (gk[x2][y2] == 0 return   false ;   // 否则返回false 
90        }

你可能感兴趣的:(C++连连看源程序(课程设计ccsu))