5月9日 推箱子

推箱子练习

//1、画地图

int[,] map = new int[10, 10]{

{1,1,1,1,1,1,1,1,1,1},

{1,4,0,0,0,0,0,0,4,1},

{1,0,3,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,3,0,1},

{1,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,1},

{1,0,0,0,0,0,0,0,0,1},

{1,0,0,3,0,0,0,3,0,1},

{1,2,4,0,0,0,0,0,4,1},

{1,1,1,1,1,1,1,1,1,1}

};

//记录小人开始的位置,在大循环外面规定,只记录一次,其他的根据改变进行加减

int renx = 1;

int reny = 8;

while (true)

{

Console.Clear();//清空控制台内容

//2、打印

//0:空位,1:墙,2:小人,3:箱子,4:目标点,5:完成点

for (int i = 0; i < 10; i++)//用两个循环嵌套,大循环打印有多少行

{

for (int j = 0; j < 10; j++)//小循环,打印每一行有多少内容

{

if (map[i, j] == 0)

{

Console.Write("  ");

}

else if (map[i, j] == 1)

{

Console.Write("■");

}

else if (map[i, j] == 2)

{

Console.Write("♀");

}

else if (map[i, j] == 3)

{

Console.Write("□");

}

else if (map[i, j] == 4)

{

Console.Write("☆");

}

else if (map[i, j] == 5)

{

Console.Write("★");

}

}

Console.WriteLine();

}

//1,1;1,8;8,2;8,8  完成坐标,判断是否过关,过关就break跳出循环

if (map[1, 1] == 5 && map[1, 8] == 5 && map[8, 2] == 5 && map[8, 8] == 5)

{

Console.WriteLine("恭喜过关!");

break;

}

//3、让小人动起来

ConsoleKeyInfo info = Console.ReadKey();//获取用户的操作

//判断用户的操作是哪个方向

if (info.Key.ToString() == "UpArrow")//向上

{

//向上一步如果是墙,向上一步是目标点,向上一步是完成的目标点,都不允许动

if (map[reny - 1, renx] == 1 || map[reny - 1, renx] == 4 || map[reny - 1, renx] == 5 )

{

}

else if (map[reny - 1, renx] == 3)//如果向上走一步是箱子

{

//箱子的下一步是墙,箱子的下一步是箱子,都不允许动

if (map[reny - 2, renx] == 1 || map[reny - 2, renx] == 3)

{

}

else if (map[reny - 2, renx] == 4)//箱子的右边是目标点

{

int zhong = 0;

zhong = map[reny - 1, renx];

map[reny - 1, renx] = map[reny, renx];

map[reny, renx] = zhong;

reny--;//及时更新小人当前位置的记录

map[reny - 1, renx] = 5;

map[reny + 1, renx] = 0;

}

else

{

int zhong = 0;

zhong = map[reny - 1, renx];

map[reny - 1, renx] = map[reny, renx];

map[reny, renx] = zhong;

reny--;//及时跟新小人当前的位置记录

zhong = map[reny - 1, renx];

map[reny - 1, renx] = map[reny + 1, renx];

map[reny + 1, renx] = zhong;

}

}

else

{

int zhong = 0;

zhong = map[reny - 1, renx];

map[reny - 1, renx] = map[reny, renx];

map[reny,renx] = zhong;

reny--;//及时更新小人当前的位置记录

}

}

else if (info.Key.ToString() == "DownArrow")//向下

{

if (map[reny + 1, renx] == 1 || map[reny + 1, renx] == 4 || map[reny + 1, renx] == 5)

{

}

else if (map[reny + 1, renx] == 3)//如果向下走一步是箱子

{

//箱子的下一步是墙,箱子的下一步是箱子,都不允许动

if (map[reny + 2, renx] == 1 || map[reny + 2, renx] == 3)

{

}

else if (map[reny + 2, renx] == 4)//箱子的下边是目标点

{

int zhong = 0;

zhong = map[reny + 1, renx];

map[reny + 1, renx] = map[reny, renx];

map[reny, renx] = zhong;

reny++;//及时更新小人当前位置的记录

map[reny + 1, renx] = 5;

map[reny - 1, renx] = 0;

}

else

{

int zhong = 0;

zhong = map[reny + 1, renx];

map[reny + 1, renx] = map[reny, renx];

map[reny, renx] = zhong;

reny++;//及时跟新小人当前的位置记录

zhong = map[reny + 1, renx];

map[reny + 1, renx] = map[reny - 1, renx];

map[reny - 1, renx] = zhong;

}

}

else

{

int zhong = 0;

zhong = map[reny + 1, renx];

map[reny + 1, renx] = map[reny, renx];

map[reny, renx] = zhong;

reny++;//及时更新小人当前的位置记录

}

}

else if (info.Key.ToString() == "LeftArrow")//向左

{

if (map[reny, renx - 1] == 1 || map[reny, renx - 1] == 4 || map[reny, renx - 1] == 5)

{

}

else if (map[reny, renx - 1] == 3)//如果向左走一步是箱子

{

//箱子的下一步是墙,箱子的下一步是箱子,都不允许动

if (map[reny, renx - 2] == 1 || map[reny, renx - 2] == 3)

{

}

else if (map[reny, renx - 2] == 4)//箱子的左边是目标点

{

int zhong = 0;

zhong = map[reny, renx - 1];

map[reny, renx - 1] = map[reny, renx];

map[reny, renx] = zhong;

renx--;//及时更新小人当前位置的记录

map[reny, renx - 1] = 5;

map[reny, renx + 1] = 0;

}

else

{

int zhong = 0;

zhong = map[reny, renx - 1];

map[reny, renx - 1] = map[reny, renx];

map[reny, renx] = zhong;

renx--;//及时跟新小人当前的位置记录

zhong = map[reny, renx - 1];

map[reny, renx - 1] = map[reny, renx + 1];

map[reny, renx + 1] = zhong;

}

}

else

{

int zhong = 0;

zhong = map[reny, renx - 1];

map[reny, renx - 1] = map[reny, renx];

map[reny, renx] = zhong;

renx--;//及时更新小人当前的位置记录

}

}

else if (info.Key.ToString() == "RightArrow")//向右

{

if (map[reny, renx + 1] == 1 || map[reny, renx + 1] == 4 || map[reny, renx + 1] == 5)

{

}

else if (map[reny, renx + 1] == 3)//如果向右走一步是箱子

{

//箱子的下一步是墙,箱子的下一步是箱子,都不允许动

if (map[reny, renx + 2] == 1 || map[reny, renx + 2] == 3)

{

}

else if (map[reny, renx + 2] == 4)//箱子的右边是目标点

{

int zhong = 0;

zhong = map[reny, renx + 1];

map[reny, renx + 1] = map[reny, renx];

map[reny, renx] = zhong;

renx++;//及时更新小人当前位置的记录

map[reny, renx + 1] = 5;

map[reny, renx - 1] = 0;

}

else

{

int zhong = 0;

zhong = map[reny, renx + 1];

map[reny, renx + 1] = map[reny, renx];

map[reny, renx] = zhong;

renx++;//及时跟新小人当前的位置记录

zhong = map[reny, renx + 1];

map[reny, renx + 1] = map[reny, renx - 1];

map[reny, renx - 1] = zhong;

}

}

else

{

int zhong = 0;

zhong = map[reny, renx + 1];

map[reny, renx + 1] = map[reny, renx];

map[reny, renx] = zhong;

renx++;//及时更新小人当前的位置记录

}

}

}

Console.ReadLine();

时间: 2024-10-29 22:30:33

5月9日 推箱子的相关文章

12月28日 二维数组的应用:第一个小游戏(推箱子)

小游戏:******推箱子******** static void Main(string[] args) { int i, j; int[,] a = new int[10, 10]                  //二维数组的定义           类型[,] 数组名 = new  类型 [行数, 列数] {赋值}:   或单个赋值 a[i,j]=1; { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,2,0,0,8,0,0,0,

2016年10月13日--二维数组、多维数组、推箱子

数组:相同数据类型的元素按照一定的顺序进行排列的 二维数组 int[,] array = new int[3, 2]; int[,] array = new int[3, 4] { { 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; int[,] array = new int[3, 4] {{ 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; [3, 2]   3表示有三个一维数组 [3, 2]   

使用 C# 开发智能手机软件:推箱子(六)

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第六篇.在这篇文章中,介绍 Common/Pub.cs 源程序文件. 1 using System; 2 using System.Drawing; 3 using System.Text; 4 using System.IO; 5 using System.Reflection; 6 7 namespace Skyiv.Ben.PushBox.Common 8 { 9   /// <summary> 10   /// 

从头到尾彻底理解KMP(2014年8月22日版)

从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进. 1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文. 然近期因在北京开了个算法班,专门讲解数据结构.面试.算法,才再次仔细回顾了这个KMP,在综合了一些网友的理解.以及跟我一起讲算法的两位讲师朋友曹博

2014年7月10日,我人生的最重要Upgrade

2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未来的模糊规划.在近11点,散伙回家,在酒精的刺激下,终于睡了个好觉. 在10号的六点半,起床,快速的洗漱后打车到国妇婴,要赶到早高峰之前到达,要知道,从浦东到浦西还是有很多红绿灯的,尽管只有15公里.到达了,陪着老婆做产前的各种检查.当确定了产后还是住六人间的小床后,觉得不可思议,怎么能让产妇和新生

5月14日 绿城育华NOIP巨石杯试卷解析

[题外话] 感谢UBUNTU为保存程序做出贡献:https://paste.ubuntu.com : 感谢洛谷OJ的私人题库保存题面:https://www.luogu.org : 现在我的题解的所有程序均保存在UBUNTU上,需要时单击超链接查看 : 由于题目的不确定性,现在所有测试数据的建立全部来自于参加本次巨石杯的选手 OYCY & LSH 下面的程序为本人程序,暂且未知评测状态,会有误差,会及时更正!!! 5月14日 绿城育华NOIP巨石杯试卷解析 T1 最大的最小 [地址]https:

6月21日 bc总结

6月21日 bc总结 最近bc由于急于提交,增加了WA的概率,今天1001数据没测完全就提交了,WA了一次,很不划算,在bc等于罚时10min,下次一定要确保数据正确且所有的情况都考虑到再提交. 1001 水题,5分钟WA了一次,6分钟过.手速还是慢了,重点是居然WA了一次. 1002 给定一个数组,多次询问L和R区间内的逆序数. 数组大小是小于1000. 暴力FST了. 思路:设dp(l,r)为区间 l 到 r 的逆序数.dp(l,r)=dp(l,r-1)+cnt(l,r),其中cnt(l,r

5月12日 函数复习及练习题

一.函数复习:namespace _5月12日_函数复习 { class Program { //请编写一个打印三角形的函数,要求根据输入的数打印多少行 //没有返回值,没有参数 public void san() { Console.Write("请输入行数:"); int a = int.Parse(Console.ReadLine()); for (int i = 1; i <= a; i++) { for (int j = 1; j <= i; j++) { Con

6月26日 cf总结

6月26日 cf总结 今天写到一半就去水群了..又浪费了一次冲紫的机会..今天的C题很简单的..可惜只顾着水群,题意没看清楚就写了...另外AB题的手速还是太慢,B题应该是傻逼一眼题却花了20min,C题题意没看清楚就去水群了,高中的排列组合送分题啊... A题:水题,不能在5分钟之内看完题目并AC就是慢,当然这次是受网速影响了. B题:水题,求翻转列使行的所有数为1的行数的最大值.不管怎么翻转,状态相同的行改变后的状态都是相同的,只要找出状态相同的行的最大个数就可以了,把状态相同的行全部翻转成