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

2007年10月09日 11:33:00
这是" 使用 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 文档上说是随机的,但我发现至少目前来说,是从午夜起的秒数除以二。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1816548


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值