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()