Domino is een legspel dat met speciale dominostenen gespeeld wordt. De stenen zijn tegenwoordig vaak van plastic of hout gemaakt, maar vroeger werden ze ook vervaardigd van echte steen of ivoor. Ze hebben een rechthoekige vorm en zijn verdeeld in 2 vierkante veldhelften, ieder gemerkt met nul tot zes ogen. In de standaardset komen alle 28 combinaties van stenen met 0 tot 6 ogen juist eenmaal voor.

dominostenen
Dominostenen.

De ontstaansgeschiedenis van het spel is onduidelijk. Mogelijk vindt het dominospel zijn oorsprong in China en zijn de stenen door Marco Polo daarvandaan meegenomen, maar dit valt niet met zekerheid vast te stellen.

Opgave

Definieer een klasse Domino waarmee dominostenen kunnen voorgesteld worden in Python. We kiezen voor een ontwerp waarbij dominostenen onveranderlijke (immutable) objecten zijn. Daardoor mag geen enkele methode de interne toestand van een object aanpassen nadat het werd geïnitialiseerd. De objecten van deze klasse moeten minstens de volgende methoden hebben:

Voorbeeld

>>> steen1 = Domino(3, 4)
>>> Domino(-1, 7)
Traceback (most recent call last):
AssertionError: ongeldig aantal ogen

>>> steen1
Domino(3, 4)
>>> print(steen1)
+---+---+
|o  |o o|
| o |   |
|  o|o o|
+---+---+
>>> print(steen1.draai())
+---+---+
|o o|o  |
|   | o |
|o o|  o|
+---+---+
>>> print(steen1)
+---+---+
|o  |o o|
| o |   |
|  o|o o|
+---+---+

>>> steen2 = Domino(1, 3)
>>> steen1 + steen2
Traceback (most recent call last):
AssertionError: dominostenen passen niet
>>> print(steen2 + steen1)
+---+---+
|   |o o|
| o |   |
|   |o o|
+---+---+
>>> steen3 = steen1.draai() + steen2.draai()
>>> steen3
Domino(4, 1)
>>> print(steen3)
+---+---+
|o o|   |
|   | o |
|o o|   |
+---+---+