From 485863c9568a4c0a5dc2bb7a40f2ee79a5034c40 Mon Sep 17 00:00:00 2001 From: emkael Date: Mon, 23 May 2016 16:48:04 +0200 Subject: * par score/car contract structures --- ParContract.cs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 ParContract.cs (limited to 'ParContract.cs') diff --git a/ParContract.cs b/ParContract.cs new file mode 100644 index 0000000..fe08284 --- /dev/null +++ b/ParContract.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BCDD +{ + class ParContract + { + public int Level = 0; + public char Denomination; + public char Declarer; + public bool Doubled = false; + public int Score = 0; + + public ParContract() { } + + public ParContract(int level, char denom, char declarer, bool doubled, int score) + { + this.Level = level; + this.Denomination = denom; + this.Declarer = declarer; + this.Doubled = doubled; + this.Score = score; + } + + public ParContract Validate() + { + if (this.Score == 0) + { + return this; + } + if (this.Level < 1 || this.Level > 7) + { + throw new ParScoreInvalidException("Invalid par contract level: " + this.Level.ToString()); + } + if (!"CDHSN".Contains(this.Denomination)) + { + throw new ParScoreInvalidException("Invalid par contract denomination: " + this.Denomination); + } + if (!"NESW".Contains(this.Declarer)) + { + throw new ParScoreInvalidException("Invalid par contract declarer: " + this.Declarer); + } + return this; + } + + override public String ToString() + { + if (this.Score == 0) + { + return "PASS"; + } + String contract = this.Level.ToString() + this.Denomination; + String risk = this.Doubled ? "x" : ""; + String declarer = " " + this.Declarer; + String result = " " + this.Score.ToString("+#;-#;0"); + return contract + risk + declarer + result; + } + + public override bool Equals(object other) + { + ParContract obj = (ParContract)(other); + return this.Level == obj.Level && this.Denomination == obj.Denomination && this.Score == obj.Score; + } + + public override int GetHashCode() + { + return this.Score + this.Level + 10000 * this.Denomination; + } + + } +} -- cgit v1.2.3