该项目使用的是 graphics.h 图形库,跟openGL等图形库相比要简单的多。
另外程序还不是非常完善,只是最简陋的版本,先发出来,后面会优化。
废话不多说,直接上代码。
1 //拼图 2 3 #include4 #include 5 #include 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 #include4 #include 5 #include 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