Jedna sa o hru, ovladanie cez sipky ide ale ked som to skusal prerobit na tahanie mysou tak my to nefungovalo. Ak by sa nasiel niekto kto by to vedel bol by som vdacny.
Kód:
import tkinter
class Hrac:
def __init__(self, r, s):
self.r = r
self.s = s
def kresli(self, g, vel, farba):
self.g = g
self.vel = vel
x,y = self.s*vel, self.r*vel
self.id = g.create_oval(x+4,y+4,x+vel-4,y+vel-4,fill=farba)
def posun(self, dr, ds):
self.r += dr
self.s += ds
self.g.move(self.id, ds*self.vel, dr*self.vel)
class Box:
def __init__(self, r, s):
self.r = r
self.s = s
def kresli(self, g, vel, farba):
self.g = g
self.vel = vel
x,y = self.s*vel, self.r*vel
self.id = g.create_rectangle(x+4,y+4,x+vel-4,y+vel-4,fill=farba)
def posun(self, dr, ds):
self.r += dr
self.s += ds
self.g.move(self.id, ds*self.vel, dr*self.vel)
class Program:
def __init__(self, meno_suboru):
t = open(meno_suboru)
self.vyska = int(t.readline().strip())
self.pole = [None] * self.vyska
self.box = []
for i in range(self.vyska):
self.pole[i] = list(t.readline().strip())
for j in range(len(self.pole[i])):
if self.pole[i][j] == '#':
self.hrac = Hrac(i,j)
self.pole[i][j] = '.'
if self.pole[i][j] == 'a':
self.box.append(Box(i,j))
self.pole[i][j] = '.'
self.vel = int(t.readline().strip())
self.farba = t.readline().split()
t.close()
self.sirka = len(self.pole[0])
self.g = tkinter.Canvas(bg='white',width=self.sirka*self.vel,
height=self.vyska*self.vel)
self.g.pack()
self.kresli()
self.g.bind_all('<Up>', self.hore)
self.g.bind_all('<Left>', self.vlavo)
self.g.bind_all('<Right>', self.vpravo)
self.g.bind_all('<Down>', self.dole)
def kresli(self):
for i in range(self.vyska):
for j in range(self.sirka):
x,y = j*self.vel, i*self.vel
f = self.farba['*.+'.index(self.pole[i][j])+2]
self.g.create_rectangle(x,y,x+self.vel,y+self.vel,fill=f)
self.hrac.kresli(self.g, self.vel, self.farba[0])
for box in self.box:
box.kresli(self.g, self.vel, self.farba[1])
def hore(self, e):
self.posun(-1, 0)
def vlavo(self, e):
self.posun(0, -1)
def vpravo(self, e):
self.posun(0, 1)
def dole(self, e):
self.posun(1, 0)
def daj_box(self, r, s):
for i in range(len(self.box)):
if self.box[i].r==r and self.box[i].s==s:
return i
return -1
def posun(self, dr, ds):
r = self.hrac.r + dr
s = self.hrac.s + ds
if r<0 or r>=self.vyska or s<0 or s>=self.sirka or self.pole[r][s]=='*':
return
b = self.daj_box(r,s)
if b >= 0:
rr = r + dr
ss = s + ds
if rr<0 or rr>=self.vyska or ss<0 or ss>=self.sirka or self.pole[rr][ss]=='*':
return
if self.daj_box(rr,ss) >= 0:
return
self.box[b].posun(dr,ds)
self.hrac.posun(dr,ds)
for b in self.box:
if self.pole[b.r][b.s] != '+':
return
Program('mapa1.txt')
a .txt
Kód:
8
*****************
*.#.*...***.a..+*
*...*...*+*..*.**
*...*..a.....*..*
*.........****..*
***********.....*
******+....a....*
*****************
30
red blue gray white yellow