8-推箱子小游戏

分析思路

数组:连续的内存,存放定义的数组类型(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  i0开始   条件是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 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <math.h>
  4 #include <time.h>
  5 #include <conio.h>
  6 #include <Windows.h>
  7 #include <mmsystem.h>
  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 }

 

转载于:https://www.cnblogs.com/tiantiancode/p/11126676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值