程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 用C#開發智能手機軟件:推箱子(六)

用C#開發智能手機軟件:推箱子(六)

編輯:關於C#

在上篇文章“使用 C# 開發智能手機軟件:推箱子(五)”中,我對經過改進後的 Common/FindPath.cs 源程序文件進行了介紹。在這篇文章中,介紹 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 ///
10 /// 公共的字段和方法
11 ///
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 ///
34 /// 本程序的全路徑名
35 ///
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 ///
48 /// 給出指定尺寸的顯示字符串,格式為: 寬x高
49 ///
50 /// 指定的尺寸
51 /// 指定尺寸的顯示字符串
52 public static string ToString(Size size)
53 {
54 return size.Width + "x" + size.Height;
55 }
56
57 ///
58 /// 將走法步驟轉換為字符串
59 ///
60 /// 走法步驟
61 /// 轉換後的字符串
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 ///
72 /// 給出指定版本的信息,格式為: x.x (build: yyyy-MM-dd)
73 ///
74 /// 指定的版本
75 /// 指定版本的信息
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 ///
83 /// 給出指定異常的信息,包含其內含異常的信息
84 ///
85 /// 指定的異常
86 /// 是否給出詳細信息
87 /// 指定異常的信息
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 文檔上說是隨機的,但我發現至少目前來說,是從午夜起的秒數除以二。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved