So, da ich ab übermorgen weg bin und keine Ahnung hab, ob ich mein Spiel bis dahin fertig kriege, aber gesagt habe, dass selbst ein command line-Tic Tac Toe besser ist als nichts, poste ich einfach mal... ein command line-Tic Tac Toe. Sollte ich nichts mehr weiter einreichen, ist das hier meine Einsendung
Code:
#!/usr/bin/python
from itertools import chain
class Field (object ):
def __init__ (self ):
self . _data = [0 ] * 9
def set (self , player, n):
if not 1 <= n <= 9 or self . _data[n- 1 ] != 0 :
raise ValueError ('invalid field' )
else :
self . _data[n- 1 ] = player
def winner (self ):
return (set(s. pop() for s in chain(* [(set(self . _data[i:i+ 7 :3 ]), set(self . _data[i* 3 :i* 3 + 3 ])) for i in xrange (3 )] + [(set(self . _data[::4 ]), set(self . _data[2 :8 :2 ]))]) if len (s) == 1 and s != set([0 ])) or set([0 ])). pop()
def render (self ):
return ' \n -+-+- \n ' . join('|' . join([[' ' , 'x' , 'o' ][i] for i in self . _data][j:j+ 3 ]) for j in xrange (0 , 9 , 3 ))
def main ():
print 'Enter the number of a field to put your mark there \n\n\n 1|2|3 \n -+-+- \n 4|5|6 \n -+-+- \n 7|8|9 \n\n '
f = Field()
turn = 1
while turn < 10 and not f. winner():
print ' \n ' + f. render() + ' \n\n '
player = 2 - turn % 2
s = raw_input ("player %s 's turn: " % {1 :'x' , 2 :'o' }[player])
try :
f. set(player, int (s))
except ValueError :
print 'invalid turn, try again'
else :
turn += 1
print ' \n ' + f. render() + ' \n\n '
if f. winner():
print "player %s wins!" % {1 :'x' , 2 :'o' }[f. winner()]
else :
print 'draw!'
if __name__ == '__main__' :
main()
Ach ja, Lizenz ist die MIT-Lizenz .