呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

第二个小项目 - 拼图

该项目使用的是 graphics.h  图形库,跟openGL等图形库相比要简单的多。

另外程序还不是非常完善,只是最简陋的版本,先发出来,后面会优化。

废话不多说,直接上代码。

  1 //拼图
  2 
  3 #include <graphics.h>
  4 #include <conio.h>
  5 #include <stdio.h>
  6 
  7 int a[3][3]={1,3,2,8,7,4,6,5,9};
  8 char name[6];
  9 IMAGE img;
 10 void ShowPicture()
 11 {
 12     for(int i=0;i<3;i++){
 13         for(int j=0;j<3;j++){
 14             sprintf(name,"%d.bmp",a[j][i]);
 15             getimage(&img,name);
 16             putimage(i*100,j*100,&img);
 17         }
 18     }
 19 }
 20 
 21 void PlayGame()
 22 {
 23     int i,j;
 24     bool f;
 25     while(1){
 26         //先检测是否符合正确答案
 27         f=true;
 28         for(i=0;i<3;i++){
 29             for(j=0;j<3;j++)
 30                 if(a[i][j]!=i*3+j+1){
 31                     f=false;
 32                     break;
 33                 }
 34             if(f==false)
 35                 break;
 36         }
 37         if(f==true){
 38             getimage(&img,"end.bmp");    //通关界面
 39             putimage(0,0,&img);
 40         }
 41         //如果不符合正确答案,继续执行
 42         switch(getch()){
 43         case 'w':
 44             //检测9拼图的位置
 45             for(i=0;i<3;i++){
 46                 for(j=0;j<3;j++)
 47                     if(a[i][j]==9)
 48                         break;
 49                 if(a[i][j]==9)
 50                     break;
 51             }
 52             if(1<=a[i+1][j] && a[i+1][j]<=8){
 53                 int t;
 54                 t=a[i+1][j];
 55                 a[i+1][j]=a[i][j];
 56                 a[i][j]=t;
 57             }
 58             cleardevice();
 59             ShowPicture();
 60             break;
 61         case 's':
 62             //检测9拼图的位置
 63             for(i=0;i<3;i++){
 64                 for(j=0;j<3;j++)
 65                     if(a[i][j]==9)
 66                         break;
 67                 if(a[i][j]==9)
 68                     break;
 69             }
 70             if(1<=a[i-1][j] && a[i-1][j]<=8){
 71                 int t;
 72                 t=a[i-1][j];
 73                 a[i-1][j]=a[i][j];
 74                 a[i][j]=t;
 75             }
 76             cleardevice();
 77             ShowPicture();
 78             break;
 79         case 'a':
 80             //检测9拼图的位置
 81             for(i=0;i<3;i++){
 82                 for(j=0;j<3;j++)
 83                     if(a[i][j]==9)
 84                         break;
 85                 if(a[i][j]==9)
 86                     break;
 87             }
 88             if(1<=a[i][j+1] && a[i][j+1]<=8){
 89                 int t;
 90                 t=a[i][j+1];
 91                 a[i][j+1]=a[i][j];
 92                 a[i][j]=t;
 93             }
 94             cleardevice();
 95             ShowPicture();
 96             break;
 97         case 'd':
 98             //检测9拼图的位置
 99             for(i=0;i<3;i++){
100                 for(j=0;j<3;j++)
101                     if(a[i][j]==9)
102                         break;
103                     if(a[i][j]==9)
104                         break;
105             }
106             if(1<=a[i][j-1] && a[i][j-1]<=8){
107                 int t;
108                 t=a[i][j-1];
109                 a[i][j-1]=a[i][j];
110                 a[i][j]=t;
111             }
112             cleardevice();
113             ShowPicture();
114             break;
115         }
116     }
117 }
118 void main()
119 {
120     initgraph(300,300);
121     ShowPicture();
122     PlayGame();
123     getch();
124 }

资源:

http://pan.baidu.com/share/link?shareid=661984&uk=1779322541

====================================华丽的分割线============================================

第一次改进:

加入了第二关,修改了第一关移动方格存在的BUG。

后来想加入音乐,发现加不上,有错误,遂放弃了这个想法。

上代码:

  1 //拼图2
  2 
  3 #include <graphics.h>
  4 #include <conio.h>
  5 #include <stdio.h>
  6 
  7 
  8 int a[3][3]={1,2,3,4,5,6,7,9,8};
  9 int b[3][3]={1,2,3,4,5,6,7,9,8};
 10 char name[6];
 11 IMAGE img;
 12 void ShowPicture()
 13 {
 14     
 15     for(int i=0;i<3;i++){
 16         for(int j=0;j<3;j++){
 17             sprintf(name,"%d.bmp",a[i][j]);
 18             getimage(&img,name);
 19             putimage(j*100,i*100,&img);
 20         }
 21     }
 22 }
 23 void ShowPicture2()
 24 {
 25     for(int i=0;i<3;i++){
 26         for(int j=0;j<3;j++){
 27             sprintf(name,"2_%d.bmp",b[i][j]);
 28             getimage(&img,name);
 29             putimage(j*100,i*100,&img);
 30         }
 31     }
 32 }
 33 void PlayGame()
 34 {
 35     
 36     void PlayGame2(void );
 37     int i,j;
 38     bool f;
 39     while(1){
 40         //先检测是否符合正确答案
 41         f=true;
 42         for(i=0;i<3;i++){
 43             for(j=0;j<3;j++)
 44                 if(a[i][j]!=i*3+j+1){
 45                     f=false;
 46                     break;
 47                 }
 48             if(f==false)
 49                 break;
 50         }
 51         if(f==true){
 52             getimage(&img,"end1.bmp");    //通关界面
 53             putimage(0,0,&img);
 54             getch();
 55             PlayGame2();        //进入第二关
 56             break;
 57         }
 58         //如果不符合正确答案,继续执行
 59         switch(getch()){
 60         case 'w':
 61             //检测9拼图的位置
 62             for(i=0;i<3;i++){
 63                 for(j=0;j<3;j++)
 64                     if(a[i][j]==9)
 65                         break;
 66                 if(j==3) continue;
 67                 if(a[i][j]==9)
 68                     break;
 69             }
 70             if(i+1>2) break;
 71             else{
 72                 int t;
 73                 t=a[i+1][j];
 74                 a[i+1][j]=a[i][j];
 75                 a[i][j]=t;
 76             }
 77             cleardevice();
 78             ShowPicture();
 79             break;
 80         case 's':
 81             //检测9拼图的位置
 82             for(i=0;i<3;i++){
 83                 for(j=0;j<3;j++)
 84                     if(a[i][j]==9)
 85                         break;
 86                 if(j==3) continue;
 87                 if(a[i][j]==9)
 88                     break;
 89             }
 90             if(i-1<0) break;
 91             else{
 92                 int t;
 93                 t=a[i-1][j];
 94                 a[i-1][j]=a[i][j];
 95                 a[i][j]=t;
 96             }
 97             cleardevice();
 98             ShowPicture();
 99             break;
100         case 'a':
101             //检测9拼图的位置
102             for(i=0;i<3;i++){
103                 for(j=0;j<3;j++)
104                     if(a[i][j]==9)
105                         break;
106                 if(j==3) continue;
107                 if(a[i][j]==9)
108                     break;
109             }
110             if(j+1>2) break;
111             else{
112                 int t;
113                 t=a[i][j+1];
114                 a[i][j+1]=a[i][j];
115                 a[i][j]=t;
116             }
117             cleardevice();
118             ShowPicture();
119             break;
120         case 'd':
121             //检测9拼图的位置
122             for(i=0;i<3;i++){
123                 for(j=0;j<3;j++)
124                     if(a[i][j]==9)
125                         break;
126                 if(j==3) continue;
127                 if(a[i][j]==9)
128                     break;
129             }
130             if(j-1<0) break;
131             else{
132                 int t;
133                 t=a[i][j-1];
134                 a[i][j-1]=a[i][j];
135                 a[i][j]=t;
136             }
137             cleardevice();
138             ShowPicture();
139             break;
140         }
141     }
142 }
143 
144 void PlayGame2()
145 {
146     int i,j;
147     bool f;
148     while(1){
149         //先检测是否符合正确答案
150         f=true;
151         for(i=0;i<3;i++){
152             for(j=0;j<3;j++)
153                 if(b[i][j]!=i*3+j+1){
154                     f=false;
155                     break;
156                 }
157             if(f==false)
158                 break;
159         }
160         if(f==true){
161             getimage(&img,"end2.bmp");    //通关界面
162             putimage(0,0,&img);
163             break;
164         }
165         //如果不符合正确答案,继续执行
166         switch(getch()){
167         case 'w':
168             //检测9拼图的位置
169             for(i=0;i<3;i++){
170                 for(j=0;j<3;j++)
171                     if(b[i][j]==9)
172                         break;
173                 if(j==3) continue;
174                 if(b[i][j]==9)
175                     break;
176             }
177             if(i+1>2) break;
178             else{
179                 int t;
180                 t=b[i+1][j];
181                 b[i+1][j]=b[i][j];
182                 b[i][j]=t;
183             }
184             cleardevice();
185             ShowPicture2();
186             break;
187         case 's':
188             //检测9拼图的位置
189             for(i=0;i<3;i++){
190                 for(j=0;j<3;j++)
191                     if(b[i][j]==9)
192                         break;
193                 if(j==3) continue;
194                 if(b[i][j]==9)
195                     break;
196             }
197             if(i-1<0) break;
198             else{
199                 int t;
200                 t=b[i-1][j];
201                 b[i-1][j]=b[i][j];
202                 b[i][j]=t;
203             }
204             cleardevice();
205             ShowPicture2();
206             break;
207         case 'a':
208             //检测9拼图的位置
209             for(i=0;i<3;i++){
210                 for(j=0;j<3;j++)
211                     if(b[i][j]==9)
212                         break;
213                 if(j==3) continue;
214                 if(b[i][j]==9)
215                     break;
216             }
217             if(j+1>2) break;
218             else{
219                 int t;
220                 t=b[i][j+1];
221                 b[i][j+1]=b[i][j];
222                 b[i][j]=t;
223             }
224             cleardevice();
225             ShowPicture2();
226             break;
227         case 'd':
228             //检测9拼图的位置
229             for(i=0;i<3;i++){
230                 for(j=0;j<3;j++)
231                     if(b[i][j]==9)
232                         break;
233                 if(j==3) continue;
234                 if(b[i][j]==9)
235                     break;
236             }
237             if(j-1<0) break;
238             else{
239                 int t;
240                 t=b[i][j-1];
241                 b[i][j-1]=b[i][j];
242                 b[i][j]=t;
243             }
244             cleardevice();
245             ShowPicture2();
246             break;
247         }
248     }
249 }
250 void main()
251 {
252     initgraph(300,300);
253     ShowPicture();
254     PlayGame();
255     getch();
256 }

资源:

http://pan.baidu.com/share/link?shareid=668630&uk=1779322541 

 

##原创声明 **转载请注明:[呓语](http://www.yangyingming.com) » [第二个小项目 - 拼图](http://www.yangyingming.com/article/344)**