分析思路
数组:连续的内存,存放定义的数组类型(int char等等)
循环:while for
for (i = 0; i < 10; i++)
{
Printf(“1”); //打印完成后 i++ 0 1 2 3 4 5 6 7 8 9
}
第一步:初始化i=0 i从0开始 条件是i<10 i++
getchar() getch() 两个函数都是接受键盘的输入 getchar是在回车之后接受 getch按下键盘就接受
//map[i][j] = 0;
//人原来的位置有 人+空地 人+目的地
if (map[i][j] == 5)
{
map[i][j] = 0;
}
else
{
map[i][j] = 3;
}
map[i][j]=map[i][j] - 5;
map[i - 1][j] == 4 || map[i - 1][j] == 7 && map[i - 2][j] == 0 || map[i - 2][j] == 3
&& 两者为1才为1
|| 两者为0才为0
0绿地
1 墙
2 蓝空地
3 目的地
4箱子
5人物
7箱子到达目的地
8人物到达目的地
// 往上走 W 人前面的坐标是 map[i-1][j] map[i-2][j]
// 往下走 S 人前面的坐标是 map[i+1][j] map[i+2][j]
// 往左走 A 人前面的坐标是 map[i][j-1] map[i][j-2]
// 往左走 D 人前面的坐标是 map[i][j+1] map[i][j+2]
// 退出 定义一个变量,如果箱子在推的过程中进入目的地 ++ 退出目的地 -- 变量==目的地
问题
case'S':
if (map[i + 1][j] == 0)//人前面是空地0
{
map[i + 1][j] = 5;
map[i][j] -= 5;
}
=5 和==5 不同
//箱子前面是箱子或者墙
else if (map[i - 1][j] == 4 || map[i - 1][j] == 7 && map[i - 2][j] == 1 || map[i - 2][j] == 4)
{
map[i - 2][j] = 4; //1
map[i - 1][j] = 4;
map[i][j] = 5;
}
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #pragma comment(lib, "winmm.lib") 9 10 void DrawMap(int map[8][10]); 11 void SetColor(int color); 12 void GOGOGO(); 13 14 int i, j; 15 // 0通道,1墙,2空地,3目的地,4箱子,5人,7箱子到目的地,8人到目的地 16 int map[2][8][10] = { 17 { { 2, 2, 2, 2, 1, 1, 1, 1, 1, 2 }, 18 { 2, 1, 1, 1, 1, 0, 0, 0, 1, 2 }, 19 { 2, 1, 3, 1, 1, 3, 0, 4, 1, 2 }, 20 { 1, 1, 4, 1, 0, 0, 4, 0, 1, 2 }, 21 { 1, 0, 7, 0, 0, 3, 3, 0, 1, 1 }, 22 { 1, 0, 0, 0, 1, 7, 7, 4, 0, 1 }, 23 { 1, 1, 1, 1, 1, 5, 0, 0, 0, 1 }, 24 { 2, 2, 2, 2, 1, 1, 1, 1, 1, 1 } 25 }, 26 { 27 { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 }, 28 { 0, 0, 0, 1, 3, 1, 0, 0, 0, 0 }, 29 { 0, 0, 0, 1, 0, 1, 1, 1, 1, 0 }, 30 { 0, 1, 1, 1, 4, 0, 4, 3, 1, 0 }, 31 { 0, 1, 3, 0, 4, 5, 1, 1, 1, 0 }, 32 { 0, 1, 1, 1, 1, 4, 1, 0, 0, 0 }, 33 { 0, 0, 0, 0, 1, 3, 1, 0, 0, 0 }, 34 { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, 35 } 36 }; 37 38 39 int nCount; //分数 40 int g_nLevel = 0; //关卡 41 int g_boxNum[] = { 4, 4 }; //每一关卡的箱子数 42 int g_boxFull[] = { 0, 0 }; //每一关已经推好的箱子 43 44 45 int main() 46 { 47 while (1) 48 { 49 system("cls"); 50 DrawMap(map); 51 GOGOGO(); 52 53 if (nCount == g_boxNum[g_nLevel]) 54 { 55 system("cls"); 56 57 DrawMap(map); 58 59 if (g_nLevel < sizeof(g_boxNum) / sizeof(g_boxNum[0] - 1)) 60 { 61 g_nLevel++; 62 nCount = g_boxFull[g_nLevel]; 63 continue; 64 } 65 else 66 break; 67 } 68 } 69 70 71 return 0; 72 } 73 74 void DrawMap(int map[8][10]) 75 { 76 for (i = 0; i < 8; i++) 77 { 78 for (j = 0; j < 10; j++) 79 { 80 switch (map[i][j]) 81 { 82 case 0: 83 SetColor(11); 84 printf(" ");// 0通道,1墙,2空地,3目的地,4箱子,5人,7箱子到目的地,8人到目的地 85 break; 86 case 1: 87 SetColor(12); 88 printf("□"); 89 break; 90 91 case 2: 92 93 printf(" "); 94 break; 95 case 3: 96 SetColor(8); 97 printf("☆"); 98 break; 99 case 4: 100 SetColor(9); 101 printf("■"); 102 break; 103 case 5: 104 SetColor(10); 105 printf("♀"); 106 break; 107 case 7: 108 SetColor(13); 109 printf("★"); 110 break; 111 case 8: 112 SetColor(10); 113 printf("♀"); 114 break; 115 116 117 } 118 119 } 120 printf("\n"); 121 } 122 123 124 } 125 126 //颜色 //获取windows API设置背景字体颜色的函数 127 void SetColor(int color) 128 { 129 HANDLE hCorsole = GetStdHandle(STD_OUTPUT_HANDLE); 130 SetConsoleTextAttribute(hCorsole, color); 131 } 132 133 void GOGOGO() 134 { 135 char nInput; 136 137 for (i = 0; i < 8; i++) 138 { 139 for (j = 0; j < 10; j++) 140 { 141 if (map[g_nLevel][i][j] == 5 || map[g_nLevel][i][j] == 8) 142 break; 143 144 } 145 if (map[g_nLevel][i][j] == 5 || map[g_nLevel][i][j] == 8) 146 break; 147 } 148 printf("%d %d",i, j); 149 150 151 nInput = getch();// 0通道,1墙,2空地,3目的地,4箱子,5人,7箱子到目的地,8人到目的地 152 switch (nInput) 153 { 154 case'w'://向上走 155 case'W': 156 if (map[g_nLevel][i - 1][j] == 0 || map[g_nLevel][i - 1][j] == 3)//人前面是空地 人前面是目的地 157 { 158 map[g_nLevel][i - 1][j] += 5; 159 map[g_nLevel][i][j] -= 5; 160 } 161 else if ((map[g_nLevel][i - 1][j] == 4 || map[g_nLevel][i - 1][j] == 7) && (map[g_nLevel][i - 2][j] == 0 || map[g_nLevel][i - 2][j] == 3)) //人前面是箱子 162 { 163 map[g_nLevel][i - 2][j] += 4; 164 if (map[g_nLevel][i - 2][j] == 7) 165 nCount++; 166 167 map[g_nLevel][i - 1][j] += 1; 168 if (map[g_nLevel][i - 1][j] == 8) 169 nCount--; 170 map[g_nLevel][i][j] -= 5; 171 172 } 173 break; 174 case 's'://向下走 175 case 'S': 176 if (map[g_nLevel][i + 1][j] == 0 || map[g_nLevel][i + 1][j] == 3) 177 { 178 map[g_nLevel][i + 1][j] += 5; 179 map[g_nLevel][i][j] -= 5; 180 } 181 else if ((map[g_nLevel][i + 1][j] == 4 || map[g_nLevel][i + 1][j] == 7) && (map[g_nLevel][i + 2][j] == 0 || map[g_nLevel][i + 2][j] == 3)) 182 { 183 map[g_nLevel][i + 2][j] += 4; 184 if (map[g_nLevel][i - 2][j] == 7) 185 nCount++; 186 map[g_nLevel][i + 1][j] += 1; 187 if (map[g_nLevel][i - 1][j] == 8) 188 nCount--; 189 map[g_nLevel][i][j] -= 5; 190 } 191 break; 192 case 'a'://向左走 193 case 'A': 194 if (map[g_nLevel][i][j - 1] == 0 || map[g_nLevel][i][j - 1] == 3) 195 { 196 map[g_nLevel][i][j - 1] += 5; 197 map[g_nLevel][i][j] -= 5; 198 } 199 else if ((map[g_nLevel][i][j - 1] == 4 || map[g_nLevel][i][j - 1] == 7) && (map[g_nLevel][i][j - 2] == 0 || map[g_nLevel][i][j - 2] == 3)) 200 { 201 map[g_nLevel][i][j - 2] += 4; 202 if (map[g_nLevel][i - 2][j] == 7) 203 nCount++; 204 map[g_nLevel][i][j - 1] += 1; 205 if (map[g_nLevel][i - 1][j] == 8) 206 nCount--; 207 map[g_nLevel][i][j] -= 5; 208 } 209 break; 210 case 'd'://向右走 211 case 'D': 212 if (map[g_nLevel][i][j + 1] == 0 || map[g_nLevel][i][j + 1] == 3) 213 { 214 map[g_nLevel][i][j + 1] += 5; 215 map[g_nLevel][i][j] -= 5; 216 } 217 else if ((map[g_nLevel][i][j + 1] == 4 || map[g_nLevel][i][j + 1] == 7) && (map[g_nLevel][i][j + 2] == 0 || map[g_nLevel][i][j + 2] == 3)) 218 { 219 map[g_nLevel][i][j + 2] += 4; 220 221 map[g_nLevel][i][j + 1] += 1; 222 if (map[g_nLevel][i - 1][j] == 8) 223 nCount--; 224 map[g_nLevel][i][j] -= 5; 225 226 } 227 break; 228 default: 229 break; 230 } 231 232 }