Massive update
This commit is contained in:
84
src/Card.py
84
src/Card.py
@@ -1,41 +1,39 @@
|
||||
import enum
|
||||
from typing import *
|
||||
from collections import namedtuple
|
||||
from Errors import SchafkopfError
|
||||
|
||||
|
||||
class Card:
|
||||
class Suit(enum.Enum):
|
||||
Eichel = 0
|
||||
Gras = 1
|
||||
Herz = 2
|
||||
Schellen = 3
|
||||
class OpError(SchafkopfError, TypeError):
|
||||
def __init__(self):
|
||||
self.message = "An '{}' object may only be operated on with others of the same type.".format(
|
||||
Card.__class__.__name__)
|
||||
|
||||
SUITS_STR: Dict[Suit, str] = {
|
||||
Suit.Eichel: "♣",
|
||||
Suit.Gras: "♠",
|
||||
Suit.Herz: "♥",
|
||||
Suit.Schellen: "♦",
|
||||
}
|
||||
class Suit(enum.Enum):
|
||||
Eichel = 3
|
||||
Gras = 2
|
||||
Herz = 1
|
||||
Schellen = 0
|
||||
|
||||
class Rank(enum.Enum):
|
||||
Ober = 0
|
||||
Unter = 1
|
||||
Ass = 2
|
||||
Koenig = 3
|
||||
Zehn = 4
|
||||
Neun = 5
|
||||
Acht = 6
|
||||
Sieben = 7
|
||||
Ass = 7
|
||||
Koenig = 6
|
||||
Ober = 5
|
||||
Unter = 4
|
||||
Zehn = 3
|
||||
Neun = 2
|
||||
Acht = 1
|
||||
Sieben = 0
|
||||
|
||||
RANKS_STR: Dict[Rank, str] = {
|
||||
Rank.Ober: "O",
|
||||
Rank.Unter: "U",
|
||||
Rank.Ass: "A",
|
||||
Rank.Koenig: "K",
|
||||
Rank.Zehn: "X",
|
||||
Rank.Neun: "9",
|
||||
Rank.Acht: "8",
|
||||
Rank.Sieben: "7",
|
||||
RANK_SCORE: Dict[Rank, int] = {
|
||||
Rank.Ass: 11,
|
||||
Rank.Koenig: 4,
|
||||
Rank.Ober: 3,
|
||||
Rank.Unter: 2,
|
||||
Rank.Zehn: 10,
|
||||
Rank.Neun: 0,
|
||||
Rank.Acht: 0,
|
||||
Rank.Sieben: 0,
|
||||
}
|
||||
|
||||
def __init__(self, suit: Suit, rank: Rank):
|
||||
@@ -43,11 +41,37 @@ class Card:
|
||||
self.rank: Card.Rank = rank
|
||||
|
||||
def __str__(self):
|
||||
return "\n".join(self.glyph())
|
||||
return self.suit.name + " " + self.rank.name
|
||||
|
||||
def __repr__(self):
|
||||
return "Card: <" + self.suit.name + ", " + self.rank.name + ">"
|
||||
|
||||
def __gt__(self, other):
|
||||
if type(other) != Card:
|
||||
raise Card.OpError()
|
||||
else:
|
||||
return self.suit.value > other.suit.value or self.rank.value > other.rank.value
|
||||
|
||||
def __lt__(self, other):
|
||||
if type(other) != Card:
|
||||
raise Card.OpError()
|
||||
else:
|
||||
return self.suit.value < other.suit.value or self.rank.value < other.rank.value
|
||||
|
||||
def __add__(self, other):
|
||||
if type(other) != Card:
|
||||
raise Card.OpError()
|
||||
else:
|
||||
return Card.RANK_SCORE[self.rank] + Card.RANK_SCORE[other.rank]
|
||||
|
||||
def __sub__(self, other):
|
||||
if type(other) != Card:
|
||||
raise Card.OpError()
|
||||
else:
|
||||
return Card.RANK_SCORE[self.rank] - Card.RANK_SCORE[other.rank]
|
||||
|
||||
def __int__(self):
|
||||
return Card.RANK_SCORE[self.rank]
|
||||
|
||||
def rep(self) -> Tuple[Suit, Rank]:
|
||||
return self.suit, self.rank
|
||||
|
||||
Reference in New Issue
Block a user