您的位置:首页 > 其它

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

2007-10-27 11:59 274 查看
这是“使用 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 {

void miDesign_Click(object sender, EventArgs e)

{

using (DesignDlg dlg = new DesignDlg(TopMost))

{

dlg.MaxLevelSize = env.MaxLevelSize;

dlg.LevelSize = env.LevelSize;

dlg.Level = env.Level;

dlg.MaxLelvel = env.MaxLevel;

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

{

env.Active = dlg.Active;

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

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

}

}

}

/// <summary>

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

/// </summary>

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

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

void CreateOrEditLevel(bool isCopy, Size size)

{

if (env.Active == Action.Create)

{

env.NewLevel(isCopy, size);

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

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

ClientSizeChanged();

}

env.Pen = Block.Land;

UpdateStatus();

}

/// <summary>

/// 删除最后一关

/// </summary>

void DeleteLastLevel()

{

env.Active = Action.None;

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

env.DeleteLastLevel();

miPrevLevel2OrSlot_Click(null, null);

}

/// <summary>

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

/// </summary>

void Design()

{

Rectangle invalid;

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

Invalidate(invalid);

UpdateStatus();

}

}

}

几点说明:

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

DeleteLastLevel 方法用于删除最后一关,该方法实际上调用 Env 类的相应方法来进行工作。

CreateOrEditLevel 方法用于新建一关或者编辑当前关,该方法实际上也是调用 Env 类的相应方法来进行工作。这时,整个程序进入“设计”模式,等待用户的动作。

Design 方法处理在“设计”模式下, 鼠标点击时要采取的动作,该方法实际上还是调用 Env 类的相应方法来进行工作。

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

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

返回目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: