首页 > 代码库 > 一个很有用的辅助类 -- 门槛类实现

一个很有用的辅助类 -- 门槛类实现

门(槛)是个很有特点的事物,只要它没有上锁,你一推就进。如上了锁,你就要先开了锁才能进。如果很不幸的这个门有多把锁,就要把上面所有的锁都打开才行。
下面我们就来用c#实现门(槛)类:

一、分析

门类:它有个状态--开着/关闭,有人会说那用一个bool变量不就行了。 NO No,我这个门是可以上锁的,而且上锁的数量是不限的。第把锁都只有用对应的key的才能打开。 所以我这个是只要上一把锁就是关上了;要打开的话,却要解开所有已加在这个门上的锁。当然有时候你也可破门而入。这是不是和bool变量不一样呢。门这样的特性是很有用的,尤其是在游戏编辑逻辑中会常常被用到。

二、代码

/*
 * 描术:
 * 
 * 作者:AnYuanLzh
 * 时间:2014-xx-xx
 */
using System;
using System.Collections.Generic;

/// <summary>
/// 门类:
/// 它有个状态--开着/关闭,有人会说那用一个bool变量不就行了。
/// NO No,我这个门是可以上锁的,而且上锁的数量是不限的。第把锁都只有用对应的key的才能打开。
/// 所以我这个是只要上一把锁就是关上了;要打开的话,却要解开所有已加在这个门上的锁。
/// 这是不是和bool变量不一样呢。门这样的特性是很有用的,尤其是在游戏编辑逻辑中会常常被用到。
/// </summary>
public class Lzh_Door
{
	List<string> keys;

	/// <summary>
	/// 构造一扇门
	/// </summary>
	public Lzh_Door()
	{
		keys = new List<string> ();
	}

	/// <summary>
	/// 判断这个门是不是开的
	/// </summary>
	/// <value><c>true</c> if this instance is open; otherwise, <c>false</c>.</value>
	public bool IsOpen
	{
		get
		{
			if(keys==null || keys.Count==0)
			{
				return true;
			}
			return false;
		}
	}

	/// <summary>
	/// 这个门上有多少把锁
	/// </summary>
	/// <value>The lock count.</value>
	public int LockCount
	{
		get
		{
			if(keys == null)
				return 0;
			return keys.Count;
		}
	}

	/// <summary>
	/// 给这个门上一把锁
	/// 并返回一个key,用这个key可以解除你的这把锁
	/// </summary>
	public string AddLock()
	{
		string key = System.Guid.NewGuid().ToString();
		if(keys==null)	keys = new List<string>();
		keys.Add (key);
		return key;
	}

	/// <summary>
	/// 开锁
	/// 用你上锁时反回给的key,才能打开你之前上的锁
	/// </summary>
	/// <param name="key">Key.</param>
	public void OpenLock(string key)
	{
		if(keys!=null && keys.Contains(key))
		{
			keys.Remove(key);
		}
	}

	/// <summary>
	/// 强制开门
	/// 这是一种暴力手段,它会毁掉还门上所有的锁
	/// </summary>
	public void FoceOpenDoor()
	{
		keys.Clear ();
	}
}

三、测试Demo

大家看了上面的代码,是觉得很简单呢,一目了然,简单实用。demo,有时间再写一个吧....


一个很有用的辅助类 -- 门槛类实现