diff options
author | emkael <emkael@tlen.pl> | 2016-05-23 16:48:04 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-05-23 16:48:04 +0200 |
commit | 485863c9568a4c0a5dc2bb7a40f2ee79a5034c40 (patch) | |
tree | d500818df8a686610a8601b859e690dbcbab15d7 /ParContract.cs | |
parent | 0f96a08cbdb101d676ddb80c27ac4d97fedfd8ac (diff) |
* par score/car contract structures
Diffstat (limited to 'ParContract.cs')
-rw-r--r-- | ParContract.cs | 73 |
1 files changed, 73 insertions, 0 deletions
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;
+ }
+
+ }
+}
|