使用 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   /// 公共的字段和方法

11   /// </summary>

12   static class Pub

13   {

14     public const int OverY = 4; // 允许在屏幕(Y)方向超过的像素数

15     public const int DefaultMaxLevelSize = 32; // 缺省的最大关尺寸(宽度和高度)

16     public const int DefaultStepDelay = 100;   // 缺省移动时间间隔(毫秒)

17     public const int DefaultReplayDelay = 300; // 缺省回放时间间隔(毫秒)

18     public const int MaxDelay = 1000;          // 允许的最大时间间隔(毫秒)

19     public readonly static string ConfigFileName = Path.Combine(baseDirectory, "PushBox.cfg"); // 配置文件全路径名

20     public readonly static Encoding Encode = Encoding.GetEncoding("GB2312"); // Windows Mobile 6.0 不支持 GB18030

21     static string baseDirectory { get { return Path.GetDirectoryName(Pub.CodeBases); } } // 本程序所在的目录

22

23     static Assembly Assembly { get { return Assembly.GetExecutingAssembly(); } }

24     static AssemblyName AssemblyName { get { return Pub.Assembly.GetName(); } }

25     public static Version Version { get { return Pub.AssemblyName.Version; } } // 本程序的版本

26     public static string TextDirectory { get { return Path.Combine(baseDirectory, "text"); } }

27     public static string DataDirectory { get { return Path.Combine(baseDirectory, "data"); } }

28     public static string StepsDirectory { get { return Path.Combine(baseDirectory, "steps"); } }

29     public const string TextExtName = ".bxa"; // 文本文件扩展名

30     public const string DataExtName = ".bxb"; // 数据文件扩展名

31     public const string StepsExtName = ".bxs"; // 通关步骤文件扩展名

32

33     /// <summary>

34     /// 本程序的全路径名

35     /// </summary>

36     public static string CodeBases

37     {

38       get

39       {

40         string codeBase = Pub.AssemblyName.CodeBase;

41         string uri = "file:///";

42         if (codeBase.StartsWith(uri)) codeBase = codeBase.Substring(uri.Length);

43         return codeBase;

44       }

45     }

46

47     /// <summary>

48     /// 给出指定尺寸的显示字符串,格式为: 宽x高

49     /// </summary>

50     /// <param name="size">指定的尺寸</param>

51     /// <returns>指定尺寸的显示字符串</returns>

52     public static string ToString(Size size)

53     {

54       return size.Width + "x" + size.Height;

55     }

56

57     /// <summary>

58     /// 将走法步骤转换为字符串

59     /// </summary>

60     /// <param name="steps">走法步骤</param>

61     /// <returns>转换后的字符串</returns>

62     public static string ToString(Step[] steps)

63     {

64       StringBuilder sb = new StringBuilder();

65       foreach (Step step in steps) sb.Append((char)step);

66       char[] array = sb.ToString().ToCharArray();

67       Array.Reverse(array);

68       return new string(array);

69     }

70

71     /// <summary>

72     /// 给出指定版本的信息,格式为: x.x (build: yyyy-MM-dd)

73     /// </summary>

74     /// <param name="version">指定的版本</param>

75     /// <returns>指定版本的信息</returns>

76     public static string GetVersionBuildString(Version version)

77     {

78       double days = version.Build + 2 * version.Revision / ((double)TimeSpan.TicksPerDay / TimeSpan.TicksPerSecond);

79       return string.Format("{0} (Build: {1})", version.ToString(2), (new DateTime(2000, 1, 1)).AddDays(days).ToString("yyyy-MM-dd HH:mm:ss"));

80     }

81

82     /// <summary>

83     /// 给出指定异常的信息,包含其内含异常的信息

84     /// </summary>

85     /// <param name="ex">指定的异常</param>

86     /// <param name="isDebug">是否给出详细信息</param>

87     /// <returns>指定异常的信息</returns>

88     public static string GetMessage(Exception ex, bool isDebug)

89     {

90       StringBuilder sb = new StringBuilder();

91       for (Exception e = ex; e != null; e = e.InnerException)

92       {

93         sb.Append(isDebug ? e.ToString() : e.Message);

94         sb.Append(Fcl.NewLine);

95       }

96       return sb.ToString();

97     }

98   }

99 }

100

静态类 Pub 定义了一些全局的常量、只读字段、只读属性和一些静态方法,介绍如下:

baseDirectory 只读属性返回本程序(PushBox.exe)所在的绝对路径。

ConfigFileName 只读字段返回配置文件(PushBox.cfg)的全路径名。

TextDirectory 只读属性返回文本文件(*.bxa)所在目录(text)的绝对路径。

DataDirectory 只读属性返回数据文件(*.bxb)所在目录(data)的绝对路径。

StepsDirectory 只读属性返回通关步骤文件(*.bxs)所在目录(steps)的绝对路径。

注意,Windows CE 操作系统不具有当前目录功能,Directory.GetCurrentDirectory 方法在 .NET Compact Framework 中可用,但是当前并不支持,调用该方法会抛出一个 NotSupportedException 异常。在 Windows CE 下编程,所有的文件名都是从智能手机的根目录算起的,所以在 Pub 静态类给出了以上全路径名。

我提供下载的 zip 文件中包括以下内容:

PushBox.exe   推箱子程序

PushBox.cfg   配置文件

data/*.bxb    数据文件

steps/*.bxs   通关步骤

其实只有 PushBox.exe 就完全可以玩推箱子游戏了,只不过所有的关卡都要自己设计。运行时如下所示:

然后,点击“菜单 -> 数据 -> 配置”:

再点击“菜单 -> 数据 -> 转换”:

程序就会自动生成所需的配置文件和数据文件,画面就正常了:

然后就可以点击“菜单 -> 数据 -> 设计”,随心所欲地设计关卡了。

GetVersionBuildString 方法给出指定版本的信息,格式为: x.x (build: yyyy-MM-dd),例如本程序目前的版本是 2.1 (Build: 2007-08-19 15:09:44)。这是在 Properties/AssemblyInfo.cs 源程序文件中指定了以下版本信息:

[assembly: AssemblyVersion("2.1.*")]

即:指定主版本为 2,次版本为 1,并接受默认的内部版本号和修订号。默认的内部版本号从2000年1月1日起每日增加,默认修订号据 MSDN 文档上说是随机的,但我发现至少目前来说,是从午夜起的秒数除以二。

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-08-01 17:22:24

使用 C# 开发智能手机软件:推箱子(六)的相关文章

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

这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第十六篇.在这篇文章中,介绍 Window/ConfigDlg.cs 源程序文件.这个源程序文件包含 ConfigDlg 类,该类继承自 System.Windows.Forms.Form 类,表示推箱子的"配置"对话框.如下图所示: 下面是 Window/ConfigDlg.Designer.cs 的源程序的部分代码: namespace Skyiv.Ben.PushBox.Window { partial 

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

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第四篇. 在这篇文章中,介绍 Common/FindPath.cs 源程序文件. using System; using System.Drawing; using System.Collections.Generic; namespace Skyiv.Ben.PushBox.Common { /// <summary> /// 寻找最短路线 /// </summary> static class FindP

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

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第七篇.在这篇文章中,介绍 Common/Step.cs 源程序文件. 1namespace Skyiv.Ben.PushBox.Common 2{ 3  enum Direction { None, East, South, West, North } // 方向: 无 东 南 西 北 4  public enum Action { None, Create, Edit, Delete } // 设计: 无 创建 编辑 删除 5

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

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十二篇.在这篇文章中,介绍 Window/AboutDlg.cs 源程序文件. 这个源程序文件包括 AboutDlg 类,该类继承自 System.Windows.Forms.Form 类.表示推箱子的"关于"对话框.例如以下图所看到的:     以下是 Window/AboutDlg.Designer.cs 源程序的部分代码: namespace Skyiv.Ben.PushBox.Window { part

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

这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第十八篇.在这篇文章中.介绍 Window/SelectLevelDlg.cs 源程序文件. 这个源程序文件包括 SelectLevelDlg 类,该类继承自 System.Windows.Forms.Form 类.表示推箱子的"选关"对话框.例如以下图所看到的: 以下是 Window/SelectLevelDlg.Designer.cs 的源程序的部分代码: namespace Skyiv.Ben.PushB

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

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第三篇.在这篇文章中,介绍 Common/Block.cs 源程序文件. 1 namespace Skyiv.Ben.PushBox.Common 2 { 3   /// <summary> 4   /// 基本单元格: 地 槽 墙 砖 箱子 工人 5   /// </summary> 6   static class Block 7   { 8     public const byte Land = 0;

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

在上篇文章"使用 C# 开发智能手机软件:推箱子(一)"中.我对推箱子程序作了整体介绍.这次,我先介绍 Common/Fcl.cs 源程序文件. 1 using System; 2 using System.IO; 3 using System.Drawing; 4 5 namespace Skyiv.Ben.PushBox.Common 6 { 7   /// <summary> 8   /// 这里是 .NET Framework 支持.而 .NET Compact F

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

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十四篇.在这篇文章中,介绍 Window/ErrorMsgDlg.cs 源程序文件.这个源程序文件包括 ErrorMsgDlg 类.该类继承自 System.Windows.Forms.Form 类,表示推箱子的"错误信息"对话框.例如以下图所看到的:   以下是 Window/ErrorMsgDlg.Designer.cs 源程序的部分代码: namespace Skyiv.Ben.PushBox.Windo

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

这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第十七篇.在这篇文章中,介绍 Window/SelectGroupDlg.cs 源程序文件.这个源程序文件包含 SelectGroupDlg 类,该类继承自 System.Windows.Forms.Form 类,表示推箱子的"选组"对话框.如下图所示: 下面是 Window/SelectGroupDlg.Designer.cs 的源程序的部分代码: namespace Skyiv.Ben.PushBox.Wi