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

这是“使用 C# 开发智能手机软件:推箱子” 系列文章的第二十一篇。在这篇文章中,介绍 Window/MainForm.Design.cs 源程序文件。这个源程序文件是 MainForm 类的一部分,该类继承自 System.Windows.Forms.Form
类,表示推箱子的主窗体。而本篇文章讲述的是推箱子“设计”的实际工作,如下图所示:

我们先看看 MainForm.Designer.cs 源程序文件(该文件是由 Visual Studio 2005 IDE 自动生成的)中和“设计”工作相关的部分:

namespace Skyiv.Ben.PushBox.Window

{

partial class MainForm

{

// 注意:省略了很多代码,仅保留和 miDesign 相关的部分。

private void InitializeComponent()

{

this.miDesign = new System.Windows.Forms.MenuItem();

this.miData.MenuItems.Add(this.miDesign);

this.miDesign.Text = "设计";

this.miDesign.Click += new System.EventHandler(this.miDesign_Click);

}

private System.Windows.Forms.MenuItem miDesign;

}

}

上述代码片断展示了在推箱子游戏的主窗体上点击“菜单 -> 数据 -> 设计”时发生的事件:

this.miDesign.Click += new System.EventHandler(this.miDesign_Click);

也就是弹出一个“设计”对话框(在上篇文章“使用 C# 开发智能手机软件:推箱子(二十)”中已经介绍过了),让用户选择“新建”、“编辑”、“删除”推箱子游戏的关卡。当用户选择完毕点击“确定”按钮后,实际发生的动作是在主窗体中完成的,由下面的
MainForm.Design.cs 源程序代码来实现:

1 using System;

2 using System.Drawing;

3 using System.Windows.Forms;

4 using Skyiv.Ben.PushBox.Common;

5

6 namespace Skyiv.Ben.PushBox.Window

7 {

8   partial class MainForm

9   {

10     void miDesign_Click(object sender, EventArgs e)

11     {

12       using (DesignDlg dlg = new DesignDlg(TopMost))

13       {

14         dlg.MaxLevelSize = env.MaxLevelSize;

15         dlg.LevelSize = env.LevelSize;

16         dlg.Level = env.Level;

17         dlg.MaxLelvel = env.MaxLevel;

18         if (dlg.ShowDialog() == DialogResult.OK)

19         {

20           env.Active = dlg.Active;

21           if (env.Active == Action.Delete) DeleteLastLevel();

22           else CreateOrEditLevel(dlg.IsCopy, dlg.LevelSize);

23         }

24       }

25     }

26

27     /// <summary>

28     /// 新建一关或者编辑当前关

29     /// </summary>

30     /// <param name="isCopy">新建时是否复制当前关</param>

31     /// <param name="size">新建关的尺寸</param>

32     void CreateOrEditLevel(bool isCopy, Size size)

33     {

34       if (env.Active == Action.Create)

35       {

36         env.NewLevel(isCopy, size);

37         if (Environment.OSVersion.Platform != PlatformID.WinCE)

38           ClientSize = env.GetClientSize(sbrMain.Visible ? sbrMain.Height : 0);

39         ClientSizeChanged();

40       }

41       env.Pen = Block.Land;

42       UpdateStatus();

43     }

44

45     /// <summary>

46     /// 删除最后一关

47     /// </summary>

48     void DeleteLastLevel()

49     {

50       env.Active = Action.None;

51       if (env.Level != env.MaxLevel - 1 || env.MaxLevel <= 1) return;

52       env.DeleteLastLevel();

53       miPrevLevel2OrSlot_Click(null, null);

54     }

55

56     /// <summary>

57     /// “设计”模式下, 鼠标点击时要采取的动作

58     /// </summary>

59     void Design()

60     {

61       Rectangle invalid;

62       if (!env.Design(out invalid)) return;

63       Invalidate(invalid);

64       UpdateStatus();

65     }

66   }

67 }

68

几点说明:

  • miDesign_Click 方法就是用来处理当用户在程序的主窗体中点击“菜单 -> 数据 -> 设计”时要采取的动作,她首先构造一个 DesignDlg 类(该类表示“设计”对话框),通过初始化该类的一些属性,将必要的参数(从表示“工作环境”的 Env 类中获得,参见“使用
    C# 开发手机软件:推箱子(十一)
    ”)传递进去,然后调用 DesignDlg 类的 ShowDialog 方法显示“设计”对话框。最后,如果用户在“设计”对话框中点击了“确定”按钮的话,就根据用户的选择进行相应的动作(调用 DeleteLastLevel 或 CreateOrEditLevel 方法)。
  • DeleteLastLevel 方法用于删除最后一关,该方法实际上调用 Env 类的相应方法来进行工作。
  • CreateOrEditLevel 方法用于新建一关或者编辑当前关,该方法实际上也是调用 Env 类的相应方法来进行工作。这时,整个程序进入“设计”模式,等待用户的动作。
  • Design 方法处理在“设计”模式下, 鼠标点击时要采取的动作,该方法实际上还是调用 Env 类的相应方法来进行工作。

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

时间: 2024-10-15 03:34:10

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

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

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

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

这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第二十二篇.在这篇文章中,介绍 Window/MainForm.Replay.cs 源程序文件.这个源程序文件是 MainForm 类的一部分,该类继承自 System.Windows.Forms.Form 类,表示推箱子的主窗体.而本篇文章讲述的是推箱子"回放"过程,如下图所示: 我们先看看 MainForm.Designer.cs 源程序文件(该文件是由 Visual Studio 2005 IDE 自动生

使用 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# 开发智能手机软件:推箱子"系列文章的第六篇.在这篇文章中,介绍 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   /// 

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

使用 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