网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Visual C#2005中使用正则表达式.
..Net框架集WebClient类向WinCE平.
.RadioBox、CheckBox和Validating.
.c#中连接SqL2005数据库错误解决及.
.C#实现的根据年月日计算星期几的.
.两个获取http页面的c#函数.
.总结C#中得到程序当前工作目录和.
.用Visual C#来清空回收站(1).
.用C#代码生成一个简单的PDF文件.
.C#将文件保存到数据库中或者从数.
.C-Sharp调用标准动态库(记录).
.C# 中返回上一页问题代码.
.用Visual C#动态生成组件.
.利用C#进行AutoCAD的二次开发(一.
.c#获取真实IP和代理IP.
.C#中的非安全编程.
.js也可以有自定义事件 注入就是这.
.C# 文件操作(上传 下载 删除 文件.
..NET下对二进制文件进行加密解密.
.用C#截取指定长度的中英文混合字.

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

发表日期:2007-10-14


在这篇文章中,介绍 Common/Block.cs 源程序文件。

以下是引用片段:
  1 namespace Skyiv.Ben.PushBox.Common
  2 {
  3 /// 
  4 /// 基本单元格: 地 槽 墙 砖 箱子 工人
  5 /// 
  6 static class Block
  7 {
  8 public const byte Land = 0; // 地
  9 public const byte Slot = 1; // 槽
  10 public const byte Wall = 2; // 墙
  11 public const byte Brick = 3; // 砖: 等同于墙,一般放在墙的外围
  12 public const byte Box0 = 4; // 箱子放在地上
  13 public const byte Box1 = 5; // 箱子放在槽上
  14 public const byte Man0 = 6; // 工人站在地上
  15 public const byte Man1 = 7; // 工人站在槽上
  16
  17 const string mask = "-+#%xX()"; // (*.bxa)文件用,依次代表以上各项
  18
  19 public static string GetPenName(byte block)
  20 {
  21 return "地槽墙砖箱箱人人"[block & 0x07].ToString();
  22 }
  23
  24 public static char GetChar(ushort block)
  25 {
  26 return mask[block & 0x07];
  27 }
  28
  29 public static byte GetByte(char block)
  30 {
  31 return (byte)mask.IndexOf(block);
  32 }
  33
  34 public static bool IsOk(ushort block)
  35 {
  36 return block <= Man1;
  37 }
  38
  39 public static void CleanAllMark(ushort[,] bb)
  40 {
  41 for (int i = 0; i < bb.GetLength(0); i++)
  42 for (int j = 0; j < bb.GetLength(1); j++)
  43 bb[i, j] &= 0x07;
  44 }
  45
  46 public static void Mark(ref ushort block, int value)
  47 {
  48 block |= (ushort)(value << 3);
  49 }
  50
  51 public static int Value(ushort block)
  52 {
  53 return block >> 3;
  54 }
  55
  56 public static void Update(ref ushort block, byte pen)
  57 {
  58 if (IsSlot(block) && pen == Block.Man0) pen = Block.Man1;
  59 if (IsSlot(block) && pen == Block.Box0) pen = Block.Box1;
  60 block = pen;
  61 }
  62
  63 public static void ManIn(ref ushort block)
  64 {
  65 block += (Man0 - Land);
  66 }
  67
  68 public static void ManOut(ref ushort block)
  69 {
  70 block -= (Man0 - Land);
  71 }
  72
  73 public static void BoxIn(ref ushort block)
  74 {
  75 block += (Box0 - Land);
  76 }
  77
  78 public static void BoxOut(ref ushort block)
  79 {
  80 block -= (Box0 - Land);
  81 }
  82
  83 public static bool IsSlot(ushort block)
  84 {
  85 return block == Slot || block == Box1 || block == Man1;
  86 }
  87
  88 public static bool IsBlank(ushort block)
  89 {
  90 return block == Land || block == Slot;
  91 }
  92
  93 public static bool IsBox(ushort block)
  94 {
  95 return block == Box0 || block == Box1;
  96 }
  97
  98 public static bool IsMan(ushort block)
  99 {
  100 return block == Man0 || block == Man1;
  101 }
  102 }
  103 }


  静态类 Block 用来表示基本单元格: 空地、槽(箱子最终要存放的目的地)、墙、砖(在本程序中等同于“墙”,一般放在墙的外围,使图形看起来漂亮些)、箱子、工人。其中“箱子”和“工人”都可以位于“空地”或“槽”上,所以总共有八种状态,用 0 到 7 表示,总共只需要三个二进位,可以放入一个字节中。在数据文件(*.bxb)中,每个基本单元格就是用一个字节储存的,这在以后介绍的 Common/DataFile.cs 源程序文件中会看到。但是为什么静态类 Block 的大多数方法的参数都是 ushort 类型呢?这是为了寻找工人最短移动路线算法的需要,看了下一篇介绍 Common/FindPath.cs 源程序文件的文章就会明白了。

  这个类还是比较简单的,现简要说明如下:

  GetPenName 方法返回在设计关卡时所用画笔的名称。

  Update 方法用来在设计关卡时更新地图中的基本单元格。

  GetChar 方法返回将数据文件(data/*.bxb)导出为文本文件(text/*.bxa)所用的字符。

  GetByte 方法返回将文本文件(text/*.bxa)导入为数据文件(data/*.bxb)所用的字节。

  IsOk 方法判断表示基本单元格的字节是否合法,也用在数据导入时。

  Mark 方法在寻找工人最短移动路线算法中用来标记已经搜索过的基本单元格。

  CleanAllMark 方法在上述算法结束时用来清除地图中的所有基本单元格的标记。

  Value 方法返回上述算法搜索过程中所作的标记。

  ManIn、ManOut、BoxIn、BoxOut 方法用来更新推箱子过程中地图各基本单元格的状态。

  IsSlot、IsBlank、IsBox、IsMan 方法用来判断各基本单元格的类型。

  补充:寻找工人最短移动路线的算法已经作了改进,地图使用 byte 存储就行了,所以静态类 Block 中的所有“ushort”都要修改为“byte”。请参见“使用 C# 开发智能手机软件:推箱子(五)”中的说明。

上一篇:用C#开发智能手机软件:推箱子(二) 人气:9065
下一篇:用C#开发智能手机软件:推箱子(四) 人气:5258
浏览全部C#的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐