[ PROGRAM W PYTHON 2 ]
Witam ,ma takie samo zadanie jak kolega ,który wstawiał post kilka tygodni temu :
Post kolegi
Starałem się zastosować do wskazówek ,zrobiłem program lecz nie działa on poprawnie ,próbowałem już kilku zmian i obecnie jestem w kropce , być może ktoś będzie w stanie mi pomóc:
#-------------------WYKORZYSTANE FUNKCJE:
def plansza_tworz():
tet=[]
bufor=[]
poziom=str()
for i in range(0,20):
poziom=raw_input()
bufor=list(poziom)
tet.append(bufor)
return tet
def klocki_podaj():
k=str()
k=raw_input()
return k
def usun_rzad(plansza,r):
k=0
nowy=[]
for i in range(10):
nowy.append('.')
for i in range(0,r):
for j in range(0,9,2):
if plansza[i][j]=='#'== plansza[i][j+1]:
k+=1
if k==5:
del plansza[i]
plansza.insert(0,nowy)
return 1+usun_rzad(plansza,r)
k=0
return 0
def dopasowanie(plansza,i,j,a1,b1,a2,b2,a3,b3,war1,war2):
if plansza[a1][b1] == '.' == plansza[a2][b2] == plansza[a3][b3]:
for x in range(i-1,-1,-1):
for y in range(war1,war2):
if plansza[x][y]=='#':return 0
plansza[i][j] = '#'
plansza[a1][b1] = '#'
plansza[a2][b2] = '#'
plansza[a3][b3] = '#'
return 1
return 0
def kolejny_klocek(plansza,klocki,us_g):
if len(klocki)>=1:
if klocki[0]=='Z': return z(plansza,us_g,klocki[1:])
elif klocki[0]=='S':return s(plansza,us_g,klocki[1:])
elif klocki[0]=='O':return o(plansza,us_g,klocki[1:])
elif klocki[0]=='I':return i(plansza,us_g,klocki[1:])
elif klocki[0]=='J':return j(plansza,us_g,klocki[1:])
elif klocki[0]=='L':return l(plansza,us_g,klocki[1:])
elif klocki[0]=='T':return t(plansza,us_g,klocki[1:])
else :
return 0
#____________PRZYKLADOWA FUNKCJA DLA DANEGO KLOCKA:
def z(plansza,us_global,n_litery):
pom=list(plansza)
us_pom=0
ug=us_global
for i in range(19,-1,-1):
for j in range(10):
if pom[i][j]=='.':
if (i>=1) and (1<=j<9):
if dopasowanie(pom,i,j, i, j+1, i-1, j, i-1, j-1,j,j+2): #sposob2
us_pom = usun_rzad(pom,20)
print us_pom
if ug<= us_pom+us_global:
ug+=us_pom
ug += kolejny_klocek(pom,n_litery,ug)
us_pom=0
pom=list(plansza)
ug=us_global
pom=list(plansza)
for i in range(19,-1,-1):
for j in range(10):
if pom[i][j]=='.':
if(j<9) and (i>=2):
if dopasowanie(pom,i,j, i-1, j, i-1, j+1, i-2, j+1, j, j+2): #sposob1
us_pom += usun_rzad(pom,20)
print us_pom
if ug<= us_pom+us_global:
ug+=us_pom
ug += kolejny_klocek(pom,n_litery,ug)
us_pom=0
pom=list(plansza)
ug=us_global
return ug-us_global
#---------------------------------------URUCHAMIANIE FUNKCJI:
globalna=0
tet = plansza_tworz()
klocki=klocki_podaj()
print kolejny_klocek(list(tet),klocki,globalna)
for x in tet:print x
Wykonałem kilka testów przy pomocy wstawionych printów oraz wypisaniu każdej linii tabeli podanej na początku ,powinny być one puste ponieważ jej oryginał nie miał być wykorzystywany ale niestety nie działa to poprawnie (użycie pom=plansza[:] nie zmienia wyników - nadal zmieniany jest oryginał),myślę że to jest problemem ale nie mam pojęcia jak to rozwiązać ,może ktoś będzie w stanie mi pomóc :(
ps: nie wstawiłem wszystkich funkcji bo program ma łącznie ok 370 linijek a zasada tworzenia klocka jest taka sama