summaryrefslogtreecommitdiff
path: root/ParContract.cs
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2016-05-23 16:48:04 +0200
committeremkael <emkael@tlen.pl>2016-05-23 16:48:04 +0200
commit485863c9568a4c0a5dc2bb7a40f2ee79a5034c40 (patch)
treed500818df8a686610a8601b859e690dbcbab15d7 /ParContract.cs
parent0f96a08cbdb101d676ddb80c27ac4d97fedfd8ac (diff)
* par score/car contract structures
Diffstat (limited to 'ParContract.cs')
-rw-r--r--ParContract.cs73
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;
+ }
+
+ }
+}