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

2024-08-29 23:32

本文主要是介绍使用 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 文档上说是随机的,但我发现至少目前来说,是从午夜起的秒数除以二。


这篇关于使用 C# 开发智能手机软件:推箱子(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119161

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学