Hallo $unleserlichername,
[31 Zeilen Code]
du meine Güte, ist die Sprache furchtbar ausschweifend.
Nun ja, Du musst auch zugeben, dass viel überflüssiger Überbau dadurch kommt, dass Biesterfeld (für die Absicht des Spieles zurecht) objekt-orientiert programmiert hat. Vergleiche mal diese minimale Lösung in Python:
~~~python #!/usr/bin/env python
import sys
from random import choice
players = sys.argv[1:]
round = dict([(player, choice(range(1,7))) for player in players])
while len(round) > 1:
maximum = max(round.values())
round = dict([(player, choice(range(1, 7))) for player in round
if round[player] == maximum])
print round.keys()[0]
mit dieser längeren objekt-orientierten:
~~~python
#!/usr/bin/env python
import sys
from random import choice
class NoPlayerError(Exception):
pass
class Game(object):
def __init__(self, players):
if not players:
raise NoPlayerError
self.players = players
def calcbeginner(self):
round = dict([(p, p.rolldice()) for p in self.players])
while len(round) > 1:
maximum = max(round.values())
round = dict([(p, p.rolldice()) for p in round.keys()
if round[p] == maximum])
return round.keys()[0]
def start(self):
beginner = self.calcbeginner()
print "%s startet das Spiel" % beginner.name
# Tue irgendwas, was zum Spiel gehört
class Player(object):
def __init__(self, name):
self.name = name
def rolldice(self):
return choice(range(1, 7))
if __name__ == '__main__':
names = sys.argv[1:]
players = [Player(name) for name in names]
game = Game(players)
game.start()
Dadurch kommt schon was zusammen, hilft einem aber im größeren Konzept des Spieles. Der restliche Krempel ist natürlich Java-Syntax und das explizite Typing, ja.
Tim