Habe mal versucht ein Wuerfelspiel zu schreiben - es funktioniert mal soweit, doch ein Computergegner wäre nett und eine Funktion zum Auswerten der Gesamtspielzüge. Was ist alles nicht so pythonisch und was soll ich ändern ?
Code: Alles auswählen
############################################################
# Wuerfelspiel #
# Der Sinn des Spieles ist es die 4 und die 2 zu bekommen #
# Alle weiteren Wuerfelaugen werden gezaehlt #
# Gewinner ist der mit den meisten Augen #
############################################################
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-
import random
def erzeuge_wurf(anzahl_wuerfel):
wurf = list()
for wuerfel in range (anzahl_wuerfel):
wurf.append(random.randint(1,6))
return wurf
def werfen(name, spieler_zug):
anzahl_wuerfel = 5
wurf = 1
while anzahl_wuerfel > 0:
test = 0
prompt = name + ' mache den ' + str(wurf) + ' Wurf'
print '=' * 30
raw_input(prompt)
spieler_wurf = erzeuge_wurf(anzahl_wuerfel)
print '=' * 30
print wurf, ' Wurf ', '|'.join(str(i) for i in spieler_wurf)
print '=' * 30
while test == 0:
prompt = 'uebernehmen? ' + '|'.join(str(i) for i in spieler_zug) + '| '
auswahl = raw_input(prompt)
if auswahl != '':
wahl = auswahl.split('.')
for wuerfel in wahl:
try:
if int(wuerfel) in spieler_wurf:
spieler_zug.append(wuerfel)
anzahl_wuerfel -= 1
test += 1
elif int(wuerfel) not in spieler_zug:
print 'Wuerfel', wuerfel, 'nicht vorhanden'
except ValueError:
continue
wurf += 1
def auswertung(spieler, spiel_zuege):
for zug, name in zip(spiel_zuege, spieler):
ergebnis = ''
if '4' in zug and '2' in zug:
zug.remove('2')
zug.remove('4')
for augen in zug:
ergebnis += '+' + augen
print name, 'hat', eval(ergebnis), 'Punkte'
if len(zug) > 3:
print name, 'hat 0 Punkte'
def spielen():
spieler = list()
spiel_zuege = list()
spieler_zug = list()
while True:
try:
anzahl = int( raw_input('Wieviele Spieler ?'))
break
except ValueError:
continue
for zaehler in range(anzahl):
prompt = 'Name des ' + str(zaehler + 1) + ' Spielers:'
name = raw_input(prompt)
spieler.append(name)
while True:
for name in spieler:
werfen(name, spieler_zug)
spiel_zuege.append(spieler_zug)
spieler_zug = list()
auswertung(spieler, spiel_zuege)
spiel_zuege = list()
spieler.reverse()
auswahl = raw_input('Noch eine Runde ? (b)eenden').upper()
if auswahl == 'B':
break
def main():
while True:
print
print '____(S)tart von 42 + 18______'
print '____(B)eenden des Spieles____'
print
auswahl = raw_input('Auswahl:').upper()
if auswahl == 'S':
spielen()
if auswahl == 'B':
break
if __name__ == '__main__':
main()