Spielfeld.py
Spielfeld.py
—
Python Source,
7 KB (7917 bytes)
Dateiinhalt
from visual import *
scene.range = 15 # fixed size, no autoscaling
'''scene.stereo="redcyan"'''
class spielfeld():
def __init__(self):
feld=box(pos=(0,0,0),length=22,height=0.05,width=22,color=(1.5,1.5,1.5),material=materials.wood)
#Ringe
self.ringliste=[]
for i in range(-20,0):
self.s1= feldinhalt()
self.s2= feldinhalt()
self.s3= feldinhalt()
self.s4= feldinhalt()
self.s1.pos=(10+i,0.1,-10)
self.s2.pos=(10,0.1,10+i)
self.s3.pos=(10+i,0.1,10)
self.s4.pos=(-10,0.1,10+i)
self.ringliste.append(self.s1)
self.ringliste.append(self.s2)
self.ringliste.append(self.s3)
self.ringliste.append(self.s4)
for i in range(0,2):
self.s5=feldinhalt(farbe=color.black)
self.s5.pos=(7+i,0.1,7)
self.s6=feldinhalt(farbe=color.black)
self.s6.pos=(7+i,0.1,8)
self.s7=feldinhalt(farbe=color.green)
self.s7.pos=(-8+i,0.1,-7)
self.s8=feldinhalt(farbe=color.green)
self.s8.pos=(-8+i,0.1,-8)
self.s9=feldinhalt(farbe=color.blue)
self.s9.pos=(-8+i,0.1,7)
self.s10=feldinhalt(farbe=color.blue)
self.s10.pos=(-8+i,0.1,8)
self.s11=feldinhalt(farbe=color.orange)
self.s11.pos=(7+i,0.1,-7)
self.s12=feldinhalt(farbe=color.orange)
self.s12.pos=(7+i,0.1,-8)
self.ringliste.append(self.s5)
self.ringliste.append(self.s6)
self.ringliste.append(self.s7)
self.ringliste.append(self.s8)
self.ringliste.append(self.s9)
self.ringliste.append(self.s10)
self.ringliste.append(self.s11)
self.ringliste.append(self.s12)
for i in range(-9,-5):
self.d1=feldinhalt(farbe=color.blue)
self.d1.pos=(i,0.1,0)
self.d2=feldinhalt(farbe=color.green)
self.d2.pos=(0,0.1,i)
self.ringliste.append(self.d1)
self.ringliste.append(self.d2)
for i in range(6,10):
self.d3=feldinhalt(farbe=color.orange)
self.d3.pos=(i,0.1,0)
self.d4=feldinhalt(farbe=color.black)
self.d4.pos=(0,0.1,i)
self.ringliste.append(self.d3)
self.ringliste.append(self.d4)
for i in range(0,1):
self.w1= feldinhalt(farbe=color.orange)
self.w2= feldinhalt(farbe=color.green)
self.w3= feldinhalt(farbe=color.black)
self.w4= feldinhalt(farbe=color.blue)
self.w1.pos=(10+i,0.1,-10)
self.w2.pos=(-10,0.1,-10+i)
self.w3.pos=(10+i,0.1,10)
self.w4.pos=(-10,0.1,10+i)
self.ringliste.append(self.w1)
self.ringliste.append(self.w2)
self.ringliste.append(self.w3)
self.ringliste.append(self.w4)
###Figuren
for i in range(0,1):
self.r1 = spielfigur(0)
self.r2 = spielfigur(1)
self.r3 = spielfigur(2)
self.r4 = spielfigur(3)
self.r1.pos=(-8+i,0.05,-7)
self.r2.pos=(-8+i,0.05,-8)
self.r3.pos=(-7+i,0.05,-7)
self.r4.pos=(-7+i,0.05,-8)
self.r5 = spielfigur(4,farbe=color.black)
self.r6 = spielfigur(5,farbe=color.black)
self.r7 = spielfigur(6,farbe=color.black)
self.r8 = spielfigur(7,farbe=color.black)
self.r5.pos=(7+i,0.05,7)
self.r6.pos=(7+i,0.05,8)
self.r7.pos=(8+i,0.05,7)
self.r8.pos=(8+i,0.05,8)
self.r9 = spielfigur(8,farbe=color.blue)
self.r10 = spielfigur(9,farbe=color.blue)
self.r11 = spielfigur(10,farbe=color.blue)
self.r12 = spielfigur(11,farbe=color.blue)
self.r9.pos=(-8+i,0.05,7)
self.r10.pos=(-8+i,0.05,8)
self.r11.pos=(-7+i,0.05,7)
self.r12.pos=(-7+i,0.05,8)
self.r13 = spielfigur(12,farbe=color.orange)
self.r14 = spielfigur(13,farbe=color.orange)
self.r15 = spielfigur(14,farbe=color.orange)
self.r16 = spielfigur(15,farbe=color.orange)
self.r13.pos=(7+i,0.05,-7)
self.r14.pos=(7+i,0.05,-8)
self.r15.pos=(8+i,0.05,-7)
self.r16.pos=(8+i,0.05,-8)
self.figurenliste=[self.r1,self.r2,self.r3,self.r4,self.r5,self.r6,self.r7,self.r8,self.r9,self.r10,self.r11,self.r12,self.r13,self.r14,self.r15,self.r16]
def run(self):
pick = None # no object picked out of the scene yet
while True:
rate(30)
if scene.mouse.events:
m1 = scene.mouse.getevent() # get event
if m1.drag and m1.pick:
for f in self.figurenliste:
if m1.pick in f.objects:
altpos=m1.pickpos-(m1.pickpos-f.pos)
break
else:
f = None
drag_pos =m1.pickpos
drag_pos.y = 0
pick = f
elif m1.drop and pick: # released at end of drag
for ring in self.ringliste:
ringmitte = ring.pos
if mag(ringmitte-pick.pos) < .5:
f.pos = ringmitte
pick=None
zufall=int(random.random()*6+1)
augen=label(text=str(zufall),pos=(0,0,0),depth=-0.3,color=color.cyan)
break
if not f.pos in [ring.pos for ring in self.ringliste]:
f.pos=altpos
pick=None
pick = None
if pick:
# project onto xy plane, even if scene rotated:
new_pos = scene.mouse.project(normal=(0,1,0))
if new_pos != drag_pos :# if mouse has moved
pick.pos += new_pos - drag_pos
drag_pos = new_pos # update drag position+
pick.pos = new_pos + pick.pos - drag_pos
drag_pos = new_pos # update drag position
# offset for where the ball was clicked:
class feldinhalt(frame):
def __init__(self,farbe=color.red):
frame.__init__(self)
self.feldinhalt=ring(frame=self,pos=(0,0,0),radius=0.5,color=farbe,axis=(0,1,0),material=materials.diffuse)
zufall=int(random.random()*6+1)
augen=label(text=str(zufall),pos=(0,0,0),depth=-0.3,color=color.cyan)
class spielfigur(frame):
def __init__(self,nummer=0,farbe=color.green,):
frame.__init__(self)
self.koerper=cylinder(frame=self,pos=(0,0,0),radius=0.45,color=farbe,axis=(0,1.5,0),material=materials.chrome)
self.Kopf=cone(frame=self,pos=(0,1.5,0),axis=(0,1,0),radius=0.45,color=farbe,material=materials.chrome)
self.nummer=nummer
x = spielfeld()
x.run()