1、地图.平面的地图,人 : 符号-->图片 箱子 : 符号-->图片目的地: 符号-->图片空地 : 符号-->图片墙壁 : 符号-->图片利用二维数组元素对应不同的地图元素。
2、控制.字符变量:char input;intput=getch();通过改变二维数组的元素,重新绘制地图,得到改变后的地图。
3、游戏的规则.(逻辑代码)确定人的下标(注意map[i][j]==8的情况)。能动的情况:1.人前是空地。map[row-1][col]==0;2.人前是目的地。map[row幻腾寂埒-1][col]==3;3.人前是箱子,箱子前是空地。map[row-1][col]==4|| map[row-1][col]==7;map[row-2][col]==0;4人前是箱子,箱子前是目的地。map[row-1][col]==4|| map[row-1][col]==7;map[row-2][col]==3;
4、下面是源码/******涯箨唁峦***************************************** 第一个小工程:推箱子 编译工具: VS VC 最后修改: <稆糨孝汶;2016年11月16日> <创建工程> <九夏老师>************************************************/#include <stdio.h>#include <conio.h>/************************************************************* 程序:处理什么? 事件----->本质是什么? 值.百度搜索 图片数据存放的. 程序的本质是什么:处理数据 整型 实行的*************************************************************/int map[7][10] = { { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 0, 0, 0, 1, 0 }, { 1, 1, 3, 0, 4, 1, 1, 0, 1, 1 }, { 1, 3, 3, 4, 0, 4, 0, 0, 0, 1 }, { 1, 3, 3, 0, 4, 0, 4, 0, 1, 1 }, { 1, 1, 1, 1, 1, 1, 0, 5, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 } };//墙为1 空地为0 箱子为4 人为5 目的地为3void DrawMap(){ //用for循环遍历数组 for (int i = 0; i < 7; i++) { for (int j = 0; j < 10; j++) { switch (map[i][j]) { case 0: printf(" "); break; case 1: printf("■"); break; case 3: printf("☆"); break; case 4: printf("□"); break; case 5: printf("▲"); break; case 7: //4+3 箱子+目的地 printf("★"); break; case 8: //5+3 人+目的地 printf("▲"); break; } } printf("\n"); }}void PlayGame(){ //获取到当前人的下标 时刻都能够确定人的下标 int row, col; //人的行 和 列 for (int i = 0; i < 7; i++) //控制变量 0-6 { for (int j = 0; j < 10; j++) //控制变量 0-9 { if (map[i][j] == 5||map[i][j] == 8) { row = i; //i 0-6 col = j; //j 0-9 } } } printf("(%d,%d)\n", row, col); //键盘来控制图形对应的数据. //wasd 字符 char char input; //定义一个字符变量 input = getch(); //变量接受键盘的输入 //getchar()显示回文 按下enter键接收完成 getch()不现实回文,按下马上接收 switch (input) { /************************************* 人能走的情况: 1.人的前面是空地. 2.人的前面是目的地. 3.人的前面是箱子,箱子的前面是空地. 4.人的前面是箱子,箱子的前面是目的地. ***************************************/ case 'w': //上 if (map[row - 1][col] == 0||map[row-1][col]==3) //如果人的前面是空地或者目的地 { map[row][col] -= 5; //人的ID有可能是5 也有可能是8 map[row - 1][col] += 5; } else if (map[row - 1][col] == 4 || map[row - 1][col] == 7)//人的前面是箱子 { if (map[row - 2][col] == 0 || map[row - 2][col] == 3)//箱子的前面是空地 { map[row - 2][col] += 4; map[row - 1][col] += 1; map[row][col] -= 5; } } break; case 's': //下 if (map[row + 1][col] == 0 || map[row + 1][col] == 3) //如果人的前面是空地或者目的地 { map[row][col] -= 5; //人的ID有可能是5 也有可能是8 map[row + 1][col] += 5; } else if (map[row + 1][col] == 4 || map[row + 1][col] == 7)//人的前面是箱子 { if (map[row + 2][col] == 0 || map[row + 2][col] == 3)//箱子的前面是空地 { map[row + 2][col] += 4; map[row + 1][col] += 1; map[row][col] -= 5; } } break; case 'a': //左 if (map[row][col - 1] == 0 || map[row][col - 1] == 3) //如果人的前面是空地或者目的地 { map[row][col] -= 5; //人的ID有可能是5 也有可能是8 map[row][col - 1] += 5; } else if (map[row][col - 1] == 4 || map[row][col - 1] == 7)//人的前面是箱子 { if (map[row][col - 2] == 0 || map[row][col - 2] == 3)//箱子的前面是空地 { map[row][col - 2] += 4; map[row][col - 1] += 1; map[row][col] -= 5; } } break; case 'd': //右 if (map[row][col + 1] == 0 || map[row][col + 1] == 3) //如果人的前面是空地或者目的地 { map[row][col] -= 5; //人的ID有可能是5 也有可能是8 map[row][col + 1] += 5; } else if (map[row][col + 1] == 4 || map[row][col + 1] == 7)//人的前面是箱子 { if (map[row][col + 2] == 0 || map[row][col + 2] == 3)//箱子的前面是空地 { map[row][col + 2] += 4; map[row][col + 1] += 1; map[row][col] -= 5; } } break; break; }}int main(){ while (1) { system("cls"); DrawMap(); PlayGame(); } return 0;}/******************************** 1.完成控制台推箱子. 2.尝试去使用图形库来写推箱子. 定义保存图片的变量: IMAGE box; 加载图片: loadimage(&box,L"E:\images/box.jpg",width,height); 输出图片到界面: putimage(x,y,&box); 连连看 拼图 按照套路.*********************************/
5、按ctrl+F5运行试试,自己玩一下