Schach in Python - kleines Problem
Verfasst: Dienstag 1. Mai 2012, 08:24
Moin,
Python programmiere ich noch nicht so lange, habe aber schon erfahrungen mit Java und PHP. (also auch OOP)
Jetzt programmiere ich gerade ein Schach-Spiel.
Es besitzt die Klassen "gameField" (komplettes Spielfeld), das als Attribut eine zweidimensionale liste mit dann insgesamt 64 "Feldern" besitzt.
Hier mal der Code (nur teilweise):
Der Konstruktor von gameField soll mit der doppelten while-Schleife die Felder automatisch generieren und errechnet die Hintergrundfarbe (schwarz/weiß) anhand der Koordinaten. Wenn ich zum Test im Konstruktor ausgeben lasse Welche Figur nun generiert wurde (im Konstruktor von "field"), wird mir auch das richtige ausgeben, Bsp auf D1 steht die weiße Dame, auf C7 ein schwarzer Bauer. Außerhalb der Klassen wird eine Instanz von gameField erzeugt und in der globalen Variable F gespeichert. Wenn ich aber im Rahmenprogramm auch testen will, ob die Figuren richtig generiert wurden, wird mir immer ausgegeben dass das komplette Feld leer ist.
Rahmenprogramm:
Python programmiere ich noch nicht so lange, habe aber schon erfahrungen mit Java und PHP. (also auch OOP)
Jetzt programmiere ich gerade ein Schach-Spiel.
Es besitzt die Klassen "gameField" (komplettes Spielfeld), das als Attribut eine zweidimensionale liste mit dann insgesamt 64 "Feldern" besitzt.
Hier mal der Code (nur teilweise):
Code: Alles auswählen
class gameField:
Main = [[]]
isReady = False
def __init__(self):
F1 = self.Main
I = 0
while I < 8:
I1 = chr(I+65)
J = 0
self.Main.append([])
while J < 8:
color = (I + J - 1)/2 == (I + J - 1.0)/2
f = field(color, I, J)
self.Main[I].append(f)
# hier wird das richtige ausgegeben, aber anscheinend nicht richtig in der Liste gespeichert...
print 'Das Feld',I1,J,'hat die Farbe',f.color,'und die Figur',f.figureColor,'/',f.figure
J += 1
I += 1
print 'Spielfeld wurde generiert'
isReady = True
def getField(self, i, j):
if not(self.isReady):
f = field(False, 0, 0)
f.deleteFigure()
return f
return self.Main[i][j]
def getFigure(self, i, j):
f = self.getField(i, j)
return f.getFigure()
def setFigure(self, i, j, color, figure):
self.getField(i, j).setFigure(color, figure)
def deleteFigure(self, i, j):
self.getField(i, j).deleteFigure()
class field:
I = 0
J = 0
color = False
figureColor = False
figure = 0
def __init__(self, inpColor, I, J):
color = inpColor
# Feld aufbauen
###############
# Weiß
if (J == 1):
self.figure = 1; self.figureColor = True; return
if (I == 1 or I == 6) and J == 0:
self.figure = 2; self.figureColor = True; return
if (I == 2 or I == 5) and J == 0:
self.figure = 3; self.figureColor = True; return
if (I == 0 or I == 7) and J == 0:
self.figure = 4; self.figureColor = True; return
if I == 3 and J == 0:
self.figure = 5; self.figureColor = True; return
if I == 4 and J == 0:
self.figure = 6; self.figureColor = True; return
# Schwarz
if (J == 6):
self.figure = 1; self.figureColor = False; return
if (I == 1 or I == 6) and J == 7:
self.figure = 2; self.figureColor = False; return
if (I == 2 or I == 5) and J == 7:
self.figure = 3; self.figureColor = False; return
if (I == 0 or I == 7) and J == 7:
self.figure = 4; self.figureColor = False; return
if I == 3 and J == 7:
self.figure = 5; self.figureColor = False; return
if I == 4 and J == 7:
self.figure = 6; self.figureColor = False; return
# Leer
self.figure = 0; self.figureColor = False
def setFigure(self, inpColor, inpFigureID):
self.figureColor = inpColor
self.figure = inpFigureID
def deleteFigure(self):
self.figure = 0
self.figureColor = False
def getFigure(self):
return [self.figureColor, self.figure]
Rahmenprogramm:
Code: Alles auswählen
# Rahmenprogramm
# Globals
global F
F = gameField()
# Bsp. A1 eingeben, Ausgabe sollte sein: "Das Feld A1 ( 0 / 0 ) hat die Farbe Weiß und die Figur 4" (0/0 sind koordinaten, 4 steht für Turm
inp = raw_input('Feld testen: ')
X = ord(inp[0])-65
Y = int(inp[1])-1
[col, fig] = F.getFigure(X, Y)
if col:
color = 'Weiß'
else:
color = 'Schwarz'
print 'Das Feld',inp,'(',X,'/',Y,'hat die Farbe',color,'und die Figur',fig
# Spielschleife