class Brikke: def __init__(self, sym): self._symbol = sym def hentSymbol(self): return self._symbol def hentFelt(self, brett): # brett er et sjakkbrett med feltobjekter for rad in brett: for felt in rad: brikke = felt.hentBrikke() if brikke == self: return felt.hentFelt() return None class Felt: def __init__(self, rad, kolonne, brikke): sjakkoordinater = [[ 'a8', 'b8', 'c8', 'd8', 'e8', 'f8', 'g8', 'h8'], [ 'a7', 'b7', 'c7', 'd7', 'e7', 'f7', 'g7', 'h7'], [ 'a6', 'b6', 'c6', 'd6', 'e6', 'f6', 'g6', 'h6'], [ 'a5', 'b5', 'c5', 'd5', 'e5', 'f5', 'g5', 'h5'], [ 'a4', 'b4', 'c4', 'd4', 'e4', 'f4', 'g4', 'h4'], [ 'a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3', 'h3'], [ 'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2'], [ 'a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']] self._rad = rad # 0 ... 7 self._kolonne = kolonne # 0 ... 7 self._felt = sjakkoordinater[rad][kolonne] mod = (rad + kolonne) % 2 if mod == 0: self._farge = 'hvit' else: self._farge = 'svart' self._brikke = brikke # referanse til brikkeobjekt hvis # brikke p? feltet; None hvis tomt def hentFelt(self): return self._felt def hentBrikke(self): return self._brikke def nyBrikke(self, ny): self._brikke = ny def koordinater(self): return '['+str(self._rad)+']'+'['+str(self._kolonne)+']' def __str__(self): if self._brikke == None: if self._farge == 'hvit': tegn = '.' else: tegn = ':' else: tegn = self._brikke.hentSymbol() return tegn stilling = {'a2':'b', 'c2':'l', 'd2':'k', 'f2':'b', 'g2':'b', 'c3':'b', 'e3':'l', 'c4':'b', 'g4':'t', 'a5':'B', 'c5':'B', 'e5':'b', 'h5':'t', 'b6':'B', 'c6':'L', 'e6':'B', 'g6':'S', 'h6':'B', 'b7':'K', 'f7':'B', 'g8':'T', 'h8':'T' } def itererNedoverFra(fom, tom): # fra og med, til og med liste = [] while (fom >= tom): liste.append(fom) fom = fom - 1 return liste def lagBrettFra(brikkeordbok): hvit = True brett = [] r = 0 for rad in itererNedoverFra(8,1): brett.append([]) k = 0 for kol in ['a','b','c','d','e','f','g','h']: felt = kol + str(rad) if hvit: farge = 'hvit' else : farge = 'svart' if felt in brikkeordbok: brikke = Brikke(brikkeordbok[felt]) else: brikke = None brett[r].append(Felt(r,k,brikke)) if kol != 'h': hvit = not hvit k = k+1 r = r+1 return brett def skrivBrettTilFil(brett, utfil): fil = open(utfil, 'w') for rad in brett: linje = '' for kol in rad: linje = linje + str(kol) fil.write(linje+'\n') fil.close() def lesBrettFraFil(innfil): r = 0 felter = [] for rad in itererNedoverFra(8,1): felter.append([]) # k = 0 for kol in ['a','b','c','d','e','f','g','h']: felter[r].append(kol+str(rad)) r = r+1 fil = open(innfil) brett = [] r = 0 for linje in fil: brett.append([]) for tegn in linje.strip(): brett[r].append(tegn) r = r+1 ordbok = {} for i in range(8): for j in range(8): tegn = brett[i][j] if tegn not in ['.',':']: ordbok[felter[i][j]] = tegn return lagBrettFra(ordbok) #sjakkbrett = lagBrettFra(stilling) sjakkbrett = lesBrettFraFil("startstilling.txt") for rad in sjakkbrett: linje = '' for kol in rad: linje = linje + ' ' + kol.koordinater() print(linje) for rad in sjakkbrett: linje = ' ' for kol in rad: linje = linje + str(kol) + ' ' print(linje) for rad in sjakkbrett: linje = ' ' for kol in rad: linje = linje + kol.hentFelt() + ' ' print(linje) for rad in sjakkbrett: linje1 = '' linje2 = ' ' linje3 = ' ' for kol in rad: linje1 = linje1 + ' ' + kol.koordinater() linje2 = linje2 + str(kol) + ' ' linje3 = linje3 + kol.hentFelt() + ' ' print('\n'+linje1) print(linje2) print(linje3) print(sjakkbrett[0][4].hentBrikke().hentFelt(sjakkbrett)) def flytt(fra, til): til.nyBrikke(fra.hentBrikke()) fra.nyBrikke(None) sjakkbrettNr7 = lagBrettFra(sjakkstilling) flytt(sjakkbrettNr7, "f2", "f3") flytt(sjakkbrett[0][6], sjakkbrett[2][5]) #skrivBrettTilFil(sjakkbrett, "stillingA.txt") # print(sjakkbrett)