门(槛)是个很有特点的事物,只要它没有上锁,你一推就进。如上了锁,你就要先开了锁才能进。如果很不幸的这个门有多把锁,就要把上面所有的锁都打开才行。
下面我们就来用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,有时间再写一个吧....
时间: 2024-10-11 04:40:28