vieleicht will ja nhemand kurz reinschauen:
edit{
bitte beachte, dass die meisten variablen namen nichtssagend sind
}
nochmal edit:
beim thread muss noch irgendwie lock hin, show wird manchmal gleichzeitig ausgeführt
Code: Alles auswählen
import time
import threading
from string import count
objekte = """
rl
X00
X00
XX0
XXX
X00
000
XX0
0X0
0X0
00X
XXX
000
quadrat
XX
XX
XX
XX
XX
XX
XX
XX
ll
00X
00X
0XX
X00
XXX
XX
X0
X0
XXX
00X
gerade
XXXX
X
X
X
X
XXXX
X
X
X
X
dre
0X0
XXX
X0
XX
X0
XXX
0X0
0X
XX
0X
zl
XX0
0XX
0X
XX
X0
XX0
0XX
0X
XX
X0
zr
0XX
XX0
X0
XX
0X
0XX
XX0
x0
XX
0X
"""
class Field:
def __init__(self, x, y):
self.x = x
self.y = y
self.spielfeld = eval(('[' + x * ('[' + (y-1) * ('" ",') + '" "' + ']' ) + ']').replace("][", "],["))#geht egentlich auch einfacher...
def set(self, x, y, char):
self.spielfeld[-1*y][x-1] = char
def show(self):
print (self.x + 2) * "#"
st = ""
for balken in self.spielfeld:
kastens = ""
for kasten in balken:
kastens += kasten
st += "#" + kastens + "#\n"
kasten = ""
st += (self.x + 2) * "#"
print st
def get(self, x, y):
return self.spielfeld[-1*y][x-1]
class Parse:
def __init__(self):
self.figur = None
retval = {}
for i in objekte.split("\n\n\n"):
retval3 = []
zuerst = True
for i2 in i.split("\n\n"):
retval2 = "["
if zuerst:
zuerst = False
key = i2
retval[key] = []
else:
c = 0
z = count(i2, "\n")+1
for teil in i2.replace("\n", ""): #in dieser for schleige muss der bug sein!!!
if teil == "X":
y = c/z
x = c%z
retval2 += "[" + str(x) + " + x, " + str(y) + " + y ],"
if teil == "X" or i == "0": #sicherheitshalber
c = c + 1
if retval2 != "[":
retval3.append(retval2 + "]")
retval[key] = retval3
self.teile = retval
print eval(retval["rl"][1])
def get(self, t, position, x, y):
return eval(self.teile[t][position])
def show(fieldObj, figurObj, char):
z = figurObj.get()
print "z:", z
new = z[1]
old = z[0]
if old:
for i in old:
fieldObj.set(i[0], i[1], " ")
print "new:", new
for i in new:
fieldObj.set(i[0], i[1], char)
fieldObj.show()
class Teil:
def __init__(self, teil, x, y):
self.x = x
self.y = y
self.figur = None
self.position = 0
self.teil = teil
self.p = Parse()
def down(self):
self.y -=1
def up(self):
self.y += 1
def right(self):
self.x +=1
def left(self):
self.x -= 1
def turn(self):
if self.position == 3:
self.position = 0
else:
self.position = self.position + 1
def get(self):
#self.figur = self._form()
self.figurAlt = self.figur
self.figur = self.p.get(self.teil, self.position, self.x, self.y)
return [self.figurAlt, self.figur]
f = Field(40,40)
d = Teil("dre", 20, 20)
show(f,d, "X")
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((64, 48))
def threadCode():
while 1:
time.sleep(0.3)
d.down()
show(f,d, "X")
t = threading.Thread(target = threadCode)
t.start()
while 1:
for event in pygame.event.get():
if (event.type == KEYDOWN):
if event.key == K_UP: #fuer tertis besonders hilfreich...
d.up()
elif event.key == K_RIGHT:
d.right()
elif event.key == K_LEFT:
d.left()
elif event.key == K_DOWN:
d.turn()
show(f,d, "X")