码迷,mamicode.com
首页 > 其他好文 > 详细

推箱子

时间:2016-05-29 08:33:25      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

 

 

            

              //有一张地图
              //地图里有箱子、小人、和目标点
              //用户可以操纵这小人移动
              //小人推着箱子走,遇到墙就不能走了
              //小人把箱子推到目标点就胜利了,然后进入下一关


//画地图(墙:1,箱子:4,小人:5,目标点:3) //1.1画地图 #region int[, ,] dt = new int[2, 20, 20] { {//0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//0 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//1 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//2 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//3 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//4 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//5 {0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},//6 {0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,0,0,0,0},//7 {0,0,0,0,0,0,0,0,1,2,1,1,1,1,0,0,0,0,0,0},//8 {0,0,0,0,0,0,1,1,1,4,2,4,3,1,0,0,0,0,0,0},//9 {0,0,0,0,0,0,1,3,2,4,5,1,1,1,0,0,0,0,0,0},//10 {0,0,0,0,0,0,1,1,1,1,4,1,0,0,0,0,0,0,0,0},//11 {0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,0,0,0},//12 {0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0},//13 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//14 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//15 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//16 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//17 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//18 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} //19 }, { //0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//0 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//1 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//2 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//3 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//4 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//5 {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0},//6 {0,0,0,0,0,0,1,5,2,2,1,0,0,0,0,0,0,0,0,0},//7 {0,0,0,0,0,0,1,2,4,4,1,0,1,1,1,0,0,0,0,0},//8 {0,0,0,0,0,0,1,2,4,2,1,0,1,3,1,0,0,0,0,0},//9 {0,0,0,0,0,0,1,1,1,2,1,1,1,3,1,0,0,0,0,0},//10 {0,0,0,0,0,0,0,1,1,2,2,2,2,3,1,0,0,0,0,0},//11 {0,0,0,0,0,0,0,1,2,2,2,1,2,2,1,0,0,0,0,0},//12 {0,0,0,0,0,0,0,1,2,2,2,1,1,1,1,0,0,0,0,0},//13 {0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0},//14 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//15 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//16 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//17 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//18 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} //19 } }; #endregion int x = 10, y = 10; for (int ii = 0; ii < 2; ii++) { while (true) { Console.Clear(); //1.2打印地图 #region for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { if (dt[ii, i, j] == 0) { Console.Write(" ");//空余地图 } else if (dt[ii, i, j] == 1) { Console.Write("");// } else if (dt[ii, i, j] == 2) { Console.Write(" ");//墙中空地 } else if (dt[ii, i, j] == 3) { Console.Write("");//目标点 } else if (dt[ii, i, j] == 4) { Console.Write("");//箱子 } else if (dt[ii, i, j] == 5) { Console.Write("");//小人 } else if (dt[ii, i, j] == 6) { Console.Write("");//胜利 } } Console.WriteLine(); } #endregion if (ii == 0) { if (dt[ii, 7, 9] == 6 && dt[ii, 10, 7] == 6 && dt[ii, 12, 10] == 6 && dt[ii, 9, 12] == 6) { Console.WriteLine("恭喜过关!请按任意键继续下一关。"); Console.ReadKey(); x = 7;//初始化小人的位置 y = 7; break; } } else if (ii == 1) { if (dt[ii, 9, 13] == 6 && dt[ii, 10, 13] == 6 && dt[ii, 11, 13] == 6) { Console.WriteLine("恭喜过关!请按任意键继续下一关。"); Console.ReadKey(); break; } } ConsoleKeyInfo info = Console.ReadKey(); //2.1记录小人的初始位置 if (info.Key.ToString() == "UpArrow") { if (dt[ii, y - 1, x] == 1 || dt[ii, y - 1, x] == 3)//小人的下一步是墙或者是目标点,不能动 { } else if (dt[ii, y - 1, x] == 4)//小人的下一步是箱子 { if (dt[ii, y - 2, x] == 1 && dt[ii, y - 1, x] == 4)//小人的下两步是墙,就不能动了 { } else if (dt[ii, y - 2, x] == 3) { //小人箱子换位置,箱子到小人后面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y - 1, x]; dt[ii, y - 1, x] = z; y--; dt[ii, y + 1, x] = 2;//小人当前的上一个位置变成空地 dt[ii, y - 1, x] = 6;//小人当前的下一个位置(即目标点)变成胜利形状 } else { //小人箱子换位置,箱子到小人后面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y - 1, x]; dt[ii, y - 1, x] = z; y--; //小人当前位置与上一步的箱子位置互换 z = dt[ii, y - 1, x]; dt[ii, y - 1, x] = dt[ii, y + 1, x]; dt[ii, y + 1, x] = z; } } else if (dt[ii, y - 1, x] == 2) { int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y - 1, x]; dt[ii, y - 1, x] = z; y--; } } else if (info.Key.ToString() == "DownArrow") { if (dt[ii, y + 1, x] == 1 || dt[ii, y + 1, x] == 3) { } else if (dt[ii, y + 1, x] == 4) { if (dt[ii, y + 2, x] == 1 && dt[ii, y + 1, x] == 4)//小人的下两步是墙,就不能动了 { } else if (dt[ii, y + 2, x] == 3) { //小人箱子换位置,箱子到小人上面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y + 1, x]; dt[ii, y + 1, x] = z; y++; dt[ii, y - 1, x] = 0; dt[ii, y + 1, x] = 6; } else { //小人箱子换位置,箱子到小人后面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y + 1, x]; dt[ii, y + 1, x] = z; y++; //小人当前位置与上一步的箱子位置互换 z = dt[ii, y - 1, x]; dt[ii, y - 1, x] = dt[ii, y - 1, x]; dt[ii, y - 1, x] = z; } } else if (dt[ii, y + 1, x] == 2) { int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y + 1, x]; dt[ii, y + 1, x] = z; y++; } } else if (info.Key.ToString() == "LeftArrow") { if (dt[ii, y, x - 1] == 1 || dt[ii, y, x - 1] == 3) { } else if (dt[ii, y, x - 1] == 4) { if (dt[ii, y, x - 2] == 1 && dt[ii, y, x - 1] == 4)//小人的下两步是墙,就不能动了 { } else if (dt[ii, y, x - 2] == 3) { //小人箱子换位置,箱子到小人左面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y, x - 1]; dt[ii, y, x - 1] = z; x--; dt[ii, y, x + 1] = 2; dt[ii, y, x - 1] = 6; } else { //小人箱子换位置,箱子到小人左面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y, x - 1]; dt[ii, y, x - 1] = z; x--; //小人当前位置与上一步的箱子位置互换 z = dt[ii, y, x - 1]; dt[ii, y, x - 1] = dt[ii, y, x + 1]; dt[ii, y, x + 1] = z; } } else if (dt[ii, y, x - 1] == 2) { int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y, x - 1]; dt[ii, y, x - 1] = z; x--; } } else if (info.Key.ToString() == "RightArrow") { if (dt[ii, y, x + 1] == 1 || dt[ii, y, x + 1] == 3) { } else if (dt[ii, y, x + 1] == 4) { if (dt[ii, y, x + 2] == 1 && dt[ii, y, x + 1] == 4)//小人的下两步是墙,就不能动了 { } else if (dt[ii, y, x + 2] == 3) { //小人箱子换位置,箱子到小人左面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y, x + 1]; dt[ii, y, x + 1] = z; x++; dt[ii, y, x - 1] = 2; dt[ii, y, x + 1] = 6; } else { //小人箱子换位置,箱子到小人右面 int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y, x + 1]; dt[ii, y, x + 1] = z; x++; //小人当前位置与上一步的箱子位置互换 z = dt[ii, y, x + 1]; dt[ii, y, x + 1] = dt[ii, y, x - 1]; dt[ii, y, x - 1] = z; } } else if (dt[ii, y, x + 1] == 2) { int z = dt[ii, y, x]; dt[ii, y, x] = dt[ii, y, x + 1]; dt[ii, y, x + 1] = z; x++; } } } } Console.ReadKey();

技术分享技术分享

推箱子

标签:

原文地址:http://www.cnblogs.com/123lucy/p/5538853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!