roboter2.py
roboter2.py — text/python-source, 14 KB (14538 bytes)
Dateiinhalt
# -*- coding: cp1252 -*-
from visual import*
from math import*
from random import *
#import Image
scene.userzoom = False
scene.range = (8,8,8)
scene.title="Guenther"
"""name = "sky2"
width, height = 512, 512
im = Image.open(name+".tga")
materials.saveTGA(name,im)
skytex = materials.texture(data=im, mapping="spherical")"""
class Umgebung(object):
def __init__ (self):
scene.background = (0.1,0.4,0.8)
self.boden=box(size=(40,1,22),pos=(0,-6.5,0), color=(0,1,0))
self.wand1=box(size=(1,20,22),pos=(20,4,0), color=(1,1,0))
self.wand2=box(size=(1,20,22),pos=(-20,4,0), color=(1,1,0))
self.schwarz=box(size=(40,10,22),pos=(0,-12,0), color=(0,1,0))
#self.skybox=sphere(radius=200,material=skytex,pos=(0,-8,0))
#self.skybox=box(size=(50,25,22),pos=(0,4,0), material=skytex)
class Roboter(object):
def __init__ (self):
self.x=0
self.y=0.01
self.gruppebein1=frame()
self.gruppefuss1=frame()
self.gruppebein2=frame()
self.gruppefuss2=frame()
self.gruppearm1=frame()
self.gruppearm2=frame()
self.gruppehand1=frame()
self.gruppehand2=frame()
self.gruppekopf=frame()
self.kopf=sphere (radius=1, pos=(0,1.25,0), frame=self.gruppekopf, color=(1,0.8,0.6))
self.auge1=sphere(radius=0.2, pos=(0.8,1.5,0.4), frame=self.gruppekopf, color=(1,0,0), material=materials.emissive)
self.auge2=sphere(radius=0.2, pos=(0.8,1.5,-0.4), frame=self.gruppekopf, color=(1,0,0), material=materials.emissive)
self.haare=sphere(radius=1.1,pos=(-0.2,1.35,0), frame=self.gruppekopf, color=(0.5,0.3,0.1))
self.oberkoerper=cylinder (pos=(0,0.25,0), axis=(0,-2.75,0), radius=1, color=(0.8,0,0))
self.hals=cylinder(pos=(0,1.25,0), axis=(0,-3,0), radius=0.5, color=(0.8,0,0))
self.schulter1=sphere(radius=0.5, pos=(0,-0.25,1), color=(0.8,0,0), frame=self.gruppearm1)
self.oberarm1=cylinder(pos=(0,-0.25,1), axis=(0,-1.5,0), radius=0.5, color=(0.8,0,0), frame=self.gruppearm1)
self.armgelenk1=sphere (pos=(0,-1.75,1), radius=0.5, color=(0.8,0,0), frame=self.gruppehand1)
self.unterarm1=cylinder(pos=(0,-1.75,1), axis=(0,-1.5,0), radius=0.5, color=(0.8,0,0), frame=self.gruppehand1)
self.hand1=sphere(radius=0.5, pos=(0,-3.4,1), color=(1,0.8,0.6), frame=self.gruppehand1)
self.schulter2=sphere(radius=0.5, pos=(0,-0.25,-1), color=(0.8,0,0), frame=self.gruppearm2)
self.oberarm2=cylinder(pos=(0,-0.25,-1), axis=(0,-1.5,0), radius=0.5, color=(0.8,0,0), frame=self.gruppearm2)
self.armgelenk2=sphere (pos=(0,-1.75,-1), radius=0.5, color=(0.8,0,0), frame=self.gruppehand2)
self.unterarm2=c6=cylinder(pos=(0,-1.75,-1), axis=(0,-1.5,0), radius=0.5, color=(0.8,0,0), frame=self.gruppehand2)
self.hand2=sphere(radius=0.5, pos=(0,-3.4,-1), color=(1,0.8,0.6), frame=self.gruppehand2)
self.oberschenkelgelenk1=sphere(radius=0.5, pos=(0,-2.5,0.5), color=color.blue, frame=self.gruppebein1)
self.oberschenkel1=cylinder(pos=(0,-2.5,0.5), axis=(0,-1.5,0), radius=0.5, color=color.blue, frame=self.gruppebein1)
self.kniegelenk1=sphere(radius=0.5, pos=(0,-4,0.5), color=color.blue, frame=self.gruppefuss1)
self.unterschenkel1=cylinder(pos=(0,-4,0.5), axis=(0,-1.5,0), radius=0.5, color=color.blue, frame=self.gruppefuss1)
self.schuh1=box(size=(1.5,0.5,1), pos=(0.3,-5.5,0.5), color=(0,0,0), frame=self.gruppefuss1)
self.oberschenkelgelenk2=sphere(radius=0.5, pos=(0,-2.5,-0.5), color=color.blue, frame=self.gruppebein2)
self.oberschenkel2=cylinder(pos=(0,-2.5,-0.5), axis=(0,-1.5,0), radius=0.5, color=color.blue, frame=self.gruppebein2)
self.kniegelenk2=sphere(radius=0.5, color=color.blue, pos=(0,-4,-0.5), frame=self.gruppefuss2)
self.unterschenkel2=cylinder(pos=(0,-4,-0.5), axis=(0,-1.5,0), radius=0.5, color=color.blue, frame=self.gruppefuss2)
self.schuh2=box(size=(1.5,0.5,1), pos=(0.3,-5.5,-0.5), color=(0,0,0), frame=self.gruppefuss2)
self.gruppefuss1.frame=self.gruppebein1
self.gruppefuss2.frame=self.gruppebein2
self.gruppehand1.frame=self.gruppearm1
self.gruppehand2.frame=self.gruppearm2
def move(self):
"Bewegt den Roboter"
#Die einzelnen Zyklen:
self.x+=self.y
if 0 < self.x <= pi/4.:
#Beine bewegen
self.gruppebein1.rotate(angle=self.y, axis=(0,0,1),origin=(0,-2.5,0.5))
self.gruppebein2.rotate(angle=0, axis=(0,0,1),origin=(0,-2.5,-0.5))
self.gruppefuss1.rotate(angle=-1.5*self.y, axis=(0,0,1),origin=(0,-4,0.5))
self.gruppefuss2.rotate(angle=-0.5*self.y, axis=(0,0,1),origin=(0,-4,-0.5))
#Arme bewegen
self.gruppearm1.rotate(angle=-0.5*self.y, axis=(0,0,1), origin=(0,0,1))
self.gruppearm2.rotate(angle=0.25*self.y, axis=(0,0,1), origin=(0,0,-1))
self.gruppehand1.rotate(angle=0, axis=(0,0,1), origin=(0,-1.75,1))
self.gruppehand2.rotate(angle=1.5*self.y, axis=(0,0,1), origin=(0,-1.75,-1))
#Kopf bewegen
self.gruppekopf.rotate(angle=-self.y, axis=(0,1,0), origin=(0,1.25,0))
elif self.x > pi/4. or self.x < -pi/4.:
self.y*=-1
elif -pi/4. <= self.x < 0:
#Beine bewegen
self.gruppebein1.rotate(angle=0, axis=(0,0,1),origin=(0,-2.5,0.5))
self.gruppebein2.rotate(angle=-self.y, axis=(0,0,1),origin=(0,-2.5,-0.5))
self.gruppefuss1.rotate(angle=0.5*self.y, axis=(0,0,1),origin=(0,-4,0.5))
self.gruppefuss2.rotate(angle=1.5*self.y, axis=(0,0,1),origin=(0,-4,-0.5))
#Arme bewegen
self.gruppearm1.rotate(angle=-0.25*self.y, axis=(0,0,1), origin=(0,0,1))
self.gruppearm2.rotate(angle=0.5*self.y, axis=(0,0,1), origin=(0,0,-1))
self.gruppehand1.rotate(angle=-1.5*self.y, axis=(0,0,1), origin=(0,-1.75,1))
self.gruppehand2.rotate(angle=0, axis=(0,0,1), origin=(0,-1.75,-1))
#Kopf bewegen
self.gruppekopf.rotate(angle=-self.y, axis=(0,1,0), origin=(0,1.25,0))
class Tanne (object):
def __init__ (self, b):
self.f=frame()
self.stamm=cylinder(radius=0.5, pos=(0, -6, -5), axis=(0,3.5,0), color=(0.5,0.25,0.1), frame=self.f)
self.blatt1=cone(radius=2, pos=(0,-2.5,-5), axis=(0,6,0), color=(0.1,0.5,0.1), frame=self.f)
self.blatt2=cone(radius=2, pos=(0,-0.5,-5), axis=(0,6,0), color=(0.1,0.5,0.1), frame=self.f)
self.blatt3=cone(radius=2, pos=(0,1.5,-5), axis=(0,6,0), color=(0.1,0.5,0.1), frame=self.f)
self.f.x=22
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
class Baum (object):
def __init__ (self, b):
self.f=frame()
self.stamm=cylinder(radius=0.5, pos=(0, -6, -5), axis=(0,6.5,0), color=(0.5,0.25,0.1), frame=self.f)
self.laub=sphere(radius=3, pos=(0,3,-5), color=(0.1,0.5,0.1), frame=self.f)
self.f.x=22
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
class Grab (object):
def __init__ (self, b):
self.f=frame()
self.erde=cylinder(radius=4, pos=(0, -9, -10), axis=(0,0,8), color=(0.5,0.25,0.1), frame=self.f)
self.kreuz1=box(size=(0.3,5,0.3), pos=(0,-3.5,-10), color=(0.9,0.9,0.9), frame=self.f)
self.kreuz2=box(size=(3,0.3,0.3), pos=(0,-3,-10), color=(0.9,0.9,0.9), frame=self.f)
self.f.x=22
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
class Eimer (object):
def __init__ (self, b):
self.f=frame()
self.eimer1=ring(radius=1,thicknes=0.1,pos=(0,-6,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer2=ring(radius=1,thicknes=0.1,pos=(0,-5.8,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer3=ring(radius=1,thicknes=0.1,pos=(0,-5.6,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer4=ring(radius=1,thicknes=0.1,pos=(0,-5.4,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer5=ring(radius=1,thicknes=0.1,pos=(0,-5.2,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer6=ring(radius=1,thicknes=0.1,pos=(0,-5.0,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer7=ring(radius=1,thicknes=0.1,pos=(0,-4.8,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer8=ring(radius=1,thicknes=0.1,pos=(0,-4.6,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer9=ring(radius=1,thicknes=0.1,pos=(0,-4.4,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer10=ring(radius=1,thicknes=0.1,pos=(0,-4.2,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer11=ring(radius=1,thicknes=0.1,pos=(0,-4.0,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer12=ring(radius=1,thicknes=0.1,pos=(0,-3.8,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer13=ring(radius=1,thicknes=0.1,pos=(0,-3.6,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer14=ring(radius=1,thicknes=0.1,pos=(0,-3.4,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer15=ring(radius=1,thicknes=0.1,pos=(0,-3.2,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.eimer16=ring(radius=1,thicknes=0.1,pos=(0,-3.0,-5),color=(0.7,0.7,0.7),axis=(0,10,0),frame=self.f)
self.boden=cylinder(radius=1, pos=(0,-6,-5), axis=(0,1,0), color=(0.7,0.7,0.7),frame=self.f)
self.muell=sphere(radius=0.9, pos=(0,-3.6,-5), color=(0.5,0.5,0),frame=self.f)
self.rand=ring(radius=1.05,thicknes=0.1,pos=(0,-3,-5),color=(0,0,0),axis=(0,10,0),frame=self.f)
self.f.x=22
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
class Lampe (object):
def __init__ (self, b):
self.f=frame()
self.stange=cylinder(radius=0.25, pos=(0, -6, -5), axis=(0,9,0), color=(0.3,0.3,0.3), frame=self.f)
self.lampe=sphere(radius=1.5,pos=(0,4.5,-5),opacity=0.2,frame=self.f)
self.ring=ring(radius=0.25,thickness=0.1,axis=(0,1,0),pos=(0,0,-5),color=(0.3,0.3,0.3), frame=self.f)
self.basis=cone(radius=0.4, pos=(0,-6,-5), axis=(0,3,0), color=(0.3,0.3,0.3), frame=self.f)
self.f.x=22
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
class Bank (object):
def __init__ (self, b):
self.f=frame()
self.sitz=box(pos=(0,-4.5,-5), size=(9,0.75,3),color=(0.8,0.8,0.8), frame=self.f)
self.bein1=box(pos=(-3,-6,-5), size=(0.75,3,3), color=(0.8,0.8,0.8), frame=self.f)
self.bein2=box(pos=(3,-6,-5), size=(0.75,3,3), color=(0.8,0.8,0.8), frame=self.f)
self.lehne=box(pos=(0,-3,-6.4), size=(9,2.25,0.2), color=(0.8,0.8,0.8), frame=self.f)
self.f.x=23
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
class Wegweiser (object):
def __init__ (self, b):
self.f=frame()
self.stange=cylinder(radius=0.2,pos=(0,-6,-5), axis=(0,7,0), color=(0.45,0.2,0.05), frame=self.f)
self.schilder=box(size=(4,1,0.25),pos=(0,0.5,-5), color=(0.45,0.2,0.05), frame=self.f)
self.spitze1=pyramid(axis=(1,0,0),size=(1,1,0.25), pos=(2,0.5,-5), color=(0.45,0.2,0.05), frame=self.f)
self.spitze2=pyramid(axis=(-1,0,0),size=(1,1,0.25), pos=(-2,0.5,-5), color=(0.45,0.2,0.05), frame=self.f)
self.f.x=22
if b==True:
self.f.z=0
self.f.axis=(-1,0,0)
def move(self):
self.f.x-=0.01
#Hauptprogramm startet
#Umgebung+G�nther erzeugen und ein paar Variablen f�r sie Objekte definieren
u=Umgebung()
ro=Roboter()
listelinks=[]
listerechts=[]
abstandrechts=0.1
abstandlinks=0.1
#Endlosschleife der Bewegung:
while(1):
rate(150) #kein Sprint
r=1000 #beliebige, gro�e Zahl
l=1000
#Bei Bedarf neue Objekte erzeugen:
if abstandrechts>0.0:
if int(random()*200)==22: #kommt �berhaupt ein neues? Dient zur Variierung des Abstandes
r=int(random()*100+1) #Und wenn ja, welches denn?
if abstandlinks>0.0:
if int(random()*200)==22:
l=int(random()*100+1)
#entsprechend der Zahl nun jetzt ein Objekt erzeugen (Die unterschiedlichen Bereiche dienen einer Variation der Auftrittswahrscheinlichkeiten
if r<25:
temp=Tanne(False)
listerechts.append(temp)
abstandrechts=-6.0
elif r<50:
temp=Baum(False)
listerechts.append(temp)
abstandrechts=-6.0
elif r<55:
temp=Grab(False)
listerechts.append(temp)
abstandrechts=-7.0
elif r<70:
temp=Eimer(False)
listerechts.append(temp)
abstandrechts=-4.0
elif r<87:
temp=Lampe(False)
listerechts.append(temp)
abstandrechts=-4.0
elif r<97:
temp=Bank(False)
listerechts.append(temp)
abstandrechts=-10.0
elif r<101:
temp=Wegweiser(False)
listerechts.append(temp)
abstandrechts=-6.0
if l<25:
temp=Tanne(True)
listelinks.append(temp)
abstandlinks=-6.0
elif l<50:
temp=Baum(True)
listelinks.append(temp)
abstandlinks=-6.0
elif l<55:
temp=Grab(True)
listelinks.append(temp)
abstandlinks=-7.0
elif l<70:
temp=Eimer(True)
listelinks.append(temp)
abstandlinks=-4.0
elif l<87:
temp=Lampe(True)
listelinks.append(temp)
abstandlinks=-4.0
elif l<98:
temp=Bank(True)
listelinks.append(temp)
abstandlinks=-10.0
elif l<101:
temp=Wegweiser(True)
listelinks.append(temp)
abstandlinks=-6.0
#Alles bewegen
abstandrechts+=0.01
abstandlinks+=0.01
ro.move()
for i in listerechts:
i.move()
if listerechts[0].f.x < -23:
i.f.visible=False
del i
listerechts.remove(listerechts[0])
for i in listelinks:
i.move()
if listelinks[0].f.x < -23:
i.f.visible=False
del i
listelinks.remove(listelinks[0])