万恶的中介
2016-01-08 14:01
127 查看
/// <summary>
/// 中介者模式 斗地主
/// </summary>
using System.Collections.Generic;
#region 主程序
public class 斗地主
{
ParterA pa = new ParterA();
ParterB pb = new ParterB();
ParterC pc = new ParterC();
ParterD pd = new ParterD();
ParterE pe = new ParterE();
ParterF pf = new ParterF();
public void Main()
{
//创建牌局
var mediator = new Mediator();
//加入玩家
mediator.Register(pa);
mediator.Register(pb);
mediator.Register(pc);
//开始游戏(发牌)
mediator.Start();
//抢地主
mediator.GrabLandowner(pa);
mediator.GrabLandowner(pc);
mediator.Win();
//结束
mediator.UnRegister(pb);
mediator.Register(pd);
mediator.Start();
mediator.GrabLandowner(pc);
mediator.Fall();
mediator.Register(pe);
mediator.Start();
mediator.GrabLandowner(pa);
mediator.Win();
mediator.UnRegister(pa);
mediator.Register(pf);
mediator.Start();
mediator.GrabLandowner(pf);
mediator.Win();
mediator.Start();
mediator.GrabLandowner(pf);
mediator.Win();
}
}
#endregion
/// <summary>
/// 一个牌局 (中介者)
/// </summary>
public class Mediator
{
private decimal count = 0;
/// <summary>
/// 份子钱
/// </summary>
private decimal persend = 100;
private List<Parter> parters = new List<Parter>();
private bool statu = false;
private Parter 地主 = null;
private int baseCount = 1000;
private int multiple = 1;
//参与人数
private int LimitParters = 3;
/// <summary>
/// 是否可以开始
/// </summary>
public bool CanStart
{
get { return this.parters.Count == this.LimitParters; }
}
/// <summary>
/// 倍率
/// </summary>
public int Multiple
{
get { return this.multiple; }
}
/// <summary>
/// 加入
/// </summary>
/// <param name="part"></param>
public bool Register(Parter part)
{
//已开始 不能进
if (this.statu) return false;
//人够了 不能进
if (this.CanStart) return false;
//没钱了 不能进
if (part.Count <= 0) return false;
this.parters.Add(part);
return true;
}
/// <summary>
/// 退出
/// </summary>
/// <param name="part"></param>
public bool UnRegister(Parter part)
{
//已开始 不能退
if (this.statu) return false;
this.parters.Remove(part);
return true;
}
/// <summary>
/// 地主赢
/// </summary>
public bool Win()
{
//未开始 不能操作
if (!statu) return false;
foreach (var parter in parters)
{
if (this.地主 == parter)
{
parter.Win(baseCount * (parters.Count - 1) * multiple);
}
else
{
parter.Fall(baseCount * multiple);
}
}
this.End();
return true;
}
/// <summary>
/// 地主输
/// </summary>
public bool Fall()
{
//未开始 不能操作
if (!this.statu) return false;
foreach (var parter in parters)
{
if (this.地主 == parter)
{
parter.Fall(this.baseCount * this.multiple * (parters.Count - 1));
}
else
{
parter.Win(this.baseCount * this.multiple);
}
}
this.End();
return true;
}
/// <summary>
/// 抢地主 每抢一次倍率翻倍
/// </summary>
/// <param name="part"></param>
public bool GrabLandowner(Parter part)
{
if (!this.statu) return false;
multiple = this.地主 == null ? 1 : multiple * 2;
this.地主 = part;
return true;
}
/// <summary>
/// 开始牌局
/// </summary>
public bool Start()
{
//不满足开始条件 不能开始
if (!this.CanStart) return false;
this.multiple = 1;
this.statu = true;
this.地主 = null;
foreach (var part in parters) {
part.Place(persend);
count += persend;
}
return true;
}
/// <summary>
/// 结束牌局
/// </summary>
public void End()
{
this.statu = false;
//检查用户状态
for (var i = 0; i < parters.Count; i++)
{
if (parters[i].Count <= 0)
{
//没钱了 踢出游戏
this.UnRegister(parters[i]);
i--;
}
}
}
}
/// <summary>
/// 玩家
/// </summary>
public class Parter
{
/// <summary>
/// 玩家初始金额
/// </summary>
private decimal count = 5000;
public decimal Count { get { return count; } }
/// <summary>
/// 游戏局数
/// </summary>
private int times = 0;
public void Win(decimal count)
{
this.count += count;
}
public void Fall(decimal count)
{
this.count -= count;
}
/// <summary>
/// 场地费
/// </summary>
/// <param name="count"></param>
public void Place(decimal count)
{
times++;
this.count -= count;
}
}
#region 用户们
public class ParterA : Parter
{
}
public class ParterB : Parter
{
}
public class ParterC : Parter
{
}
public class ParterD : Parter
{
}
public class ParterE : Parter
{
}
public class ParterF : Parter
{
}
#endregion
/// 中介者模式 斗地主
/// </summary>
using System.Collections.Generic;
#region 主程序
public class 斗地主
{
ParterA pa = new ParterA();
ParterB pb = new ParterB();
ParterC pc = new ParterC();
ParterD pd = new ParterD();
ParterE pe = new ParterE();
ParterF pf = new ParterF();
public void Main()
{
//创建牌局
var mediator = new Mediator();
//加入玩家
mediator.Register(pa);
mediator.Register(pb);
mediator.Register(pc);
//开始游戏(发牌)
mediator.Start();
//抢地主
mediator.GrabLandowner(pa);
mediator.GrabLandowner(pc);
mediator.Win();
//结束
mediator.UnRegister(pb);
mediator.Register(pd);
mediator.Start();
mediator.GrabLandowner(pc);
mediator.Fall();
mediator.Register(pe);
mediator.Start();
mediator.GrabLandowner(pa);
mediator.Win();
mediator.UnRegister(pa);
mediator.Register(pf);
mediator.Start();
mediator.GrabLandowner(pf);
mediator.Win();
mediator.Start();
mediator.GrabLandowner(pf);
mediator.Win();
}
}
#endregion
/// <summary>
/// 一个牌局 (中介者)
/// </summary>
public class Mediator
{
private decimal count = 0;
/// <summary>
/// 份子钱
/// </summary>
private decimal persend = 100;
private List<Parter> parters = new List<Parter>();
private bool statu = false;
private Parter 地主 = null;
private int baseCount = 1000;
private int multiple = 1;
//参与人数
private int LimitParters = 3;
/// <summary>
/// 是否可以开始
/// </summary>
public bool CanStart
{
get { return this.parters.Count == this.LimitParters; }
}
/// <summary>
/// 倍率
/// </summary>
public int Multiple
{
get { return this.multiple; }
}
/// <summary>
/// 加入
/// </summary>
/// <param name="part"></param>
public bool Register(Parter part)
{
//已开始 不能进
if (this.statu) return false;
//人够了 不能进
if (this.CanStart) return false;
//没钱了 不能进
if (part.Count <= 0) return false;
this.parters.Add(part);
return true;
}
/// <summary>
/// 退出
/// </summary>
/// <param name="part"></param>
public bool UnRegister(Parter part)
{
//已开始 不能退
if (this.statu) return false;
this.parters.Remove(part);
return true;
}
/// <summary>
/// 地主赢
/// </summary>
public bool Win()
{
//未开始 不能操作
if (!statu) return false;
foreach (var parter in parters)
{
if (this.地主 == parter)
{
parter.Win(baseCount * (parters.Count - 1) * multiple);
}
else
{
parter.Fall(baseCount * multiple);
}
}
this.End();
return true;
}
/// <summary>
/// 地主输
/// </summary>
public bool Fall()
{
//未开始 不能操作
if (!this.statu) return false;
foreach (var parter in parters)
{
if (this.地主 == parter)
{
parter.Fall(this.baseCount * this.multiple * (parters.Count - 1));
}
else
{
parter.Win(this.baseCount * this.multiple);
}
}
this.End();
return true;
}
/// <summary>
/// 抢地主 每抢一次倍率翻倍
/// </summary>
/// <param name="part"></param>
public bool GrabLandowner(Parter part)
{
if (!this.statu) return false;
multiple = this.地主 == null ? 1 : multiple * 2;
this.地主 = part;
return true;
}
/// <summary>
/// 开始牌局
/// </summary>
public bool Start()
{
//不满足开始条件 不能开始
if (!this.CanStart) return false;
this.multiple = 1;
this.statu = true;
this.地主 = null;
foreach (var part in parters) {
part.Place(persend);
count += persend;
}
return true;
}
/// <summary>
/// 结束牌局
/// </summary>
public void End()
{
this.statu = false;
//检查用户状态
for (var i = 0; i < parters.Count; i++)
{
if (parters[i].Count <= 0)
{
//没钱了 踢出游戏
this.UnRegister(parters[i]);
i--;
}
}
}
}
/// <summary>
/// 玩家
/// </summary>
public class Parter
{
/// <summary>
/// 玩家初始金额
/// </summary>
private decimal count = 5000;
public decimal Count { get { return count; } }
/// <summary>
/// 游戏局数
/// </summary>
private int times = 0;
public void Win(decimal count)
{
this.count += count;
}
public void Fall(decimal count)
{
this.count -= count;
}
/// <summary>
/// 场地费
/// </summary>
/// <param name="count"></param>
public void Place(decimal count)
{
times++;
this.count -= count;
}
}
#region 用户们
public class ParterA : Parter
{
}
public class ParterB : Parter
{
}
public class ParterC : Parter
{
}
public class ParterD : Parter
{
}
public class ParterE : Parter
{
}
public class ParterF : Parter
{
}
#endregion
相关文章推荐
- Linux环境下apache性能测试工具ab使用详解
- bootstrap进行网页配色过程
- Objective-C的动态特性
- iPhone图形开发绘图小结
- Xcode-程序开发设计-02九宫格
- 关于异常“严重: IOException while loading persisted sessions: java.io.EOFException”的处理
- ios手势识别代理
- linux获取daemon进程的控制台数据
- css 常用技巧
- iOS: 如何在工程中设置 DEBUG 模式?
- kafka安装与使用
- 观察者模式(Observer)—水泥厂发通知
- 数组字典结合删除排序 描述器
- 读书计划
- MAC 苹果电脑如果安装brew
- 面向对象程序设计学习
- Linux查看某目录下各个文件夹的大小
- 01-08 自定义view的隐藏
- L14 puppet基础与常用模块使用
- window下Tomcat Permgen设置,亲验有效