Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Probestudium / 2011 / WS I: 3D-Programmierung / Arbeitsgruppen / Bogenschießen / Ballschießen komplett (nur a bisserl komisch)


Inhaltsbereich

Ballschießen komplett (nur a bisserl komisch)

bogenschiesen2.py — text/python-source, 8 KB (8752 bytes)

Dateiinhalt

# -*- coding: utf-8 -*-
from visual import *        # das 3D-Modul
from random import *
from sys    import *
#from visual.text import *
from time import sleep

scene.title = "Bogenschiessen!"
#-- Panamorama-Auskleidung einer Kugel ---------------------
import Image
name = "pano_olympia_aussen"
#name = "pano_solarberg"
#name = "pano_siegburg"
#name = "pano_waldeck"
#name = "siegwehr"
#name = "pano_notting-hill"

width  = 2048                   # Breite und Hoehe an Original anpassen
height = 1024 
im = Image.open(name+".tga")    # Oeffnen des Bildes
materials.saveTGA(name,im)      # Speichern des Bildes intern
pano = materials.texture(data=im, mapping="spherical")  # Darstellungsart

#-- Neutrale Umleuchtung mit 8 Lichtern --------------------
scene.lights = [distant_light(direction=( 10, 10, 10), color=color.gray(0.5)),\
                distant_light(direction=(-10, 10, 10), color=color.gray(0.5)),\
                distant_light(direction=( 10,-10, 10), color=color.gray(0.5)),\
                distant_light(direction=( 10, 10,-10), color=color.gray(0.5)),\
                distant_light(direction=(-10,-10, 10), color=color.gray(0.5)),\
                distant_light(direction=( 10,-10,-10), color=color.gray(0.5)),\
                distant_light(direction=(-10, 10,-10), color=color.gray(0.5)),\
                distant_light(direction=(-10,-10,-10), color=color.gray(0.5))]

#-- Kameraposition im Zentrum ------------------------------
scene.fov=pi/2                  # Blickwinkel 90° (statt 60°)
scene.range=0.001                # Entfernung zum Blickzentrum



zufallszahlX = random()*10+3
zufallszahlZ = random()*10+3
zufallszahlY = random()*10+3
scene.center=(0,3.5,0)
scene.range=(3.5,3.5,3.5)
scene.forward=(0,-0.5,-1)
#scene.width=700
#scene.hight=320
#scene.userzoom=False
#scene.userspin=False

drehung = 0

#for i in range(1):
 #   rate(50)
  #  kugel.rotate(angle=radians(260), axis=(0,1,0), origin=(0,0,0))


kugel = sphere(radius=90, material=pano)
#kugel2 = sphere (radius=19.99, opacity=0.3)

ZielrohrundMensch=frame()
Zielrohr = frame(frame=ZielrohrundMensch)
pfeil=frame(frame=Zielrohr)
Mensch = frame(frame=ZielrohrundMensch)


Kopf = sphere(frame=Mensch, pos=(0,3,0),radius = 0.5, color=(.9,.8,.2))
Hals = ellipsoid(frame=Mensch, pos=(0,2.5,0), height=1.3, length=0.5, width=0.5)
Oberkoerper = ellipsoid(frame=Mensch, pos=(0,0.8,0), height=3, length=1.5, width=1, color=(.3,.2,.1))
rechtesBein = cylinder(frame=Mensch, axis=(0,-2,0), pos=(0.2,0,0), radius=0.25, color=color.green)
linkesBein = cylinder(frame=Mensch, axis=(0,-2,0), pos=(-0.2,0,0), radius=0.25, color=color.green)
rechterFuss = ellipsoid(frame=Mensch, pos=(-0.25,-2.1,-0.15), height=0.5, length=0.5, width=1, color=color.blue)
linkerFuss = ellipsoid(frame=Mensch, pos=(0.25,-2.1,-0.15), height=0.5, length=0.5, width=1, color=color.blue)
linkerArm = ellipsoid(frame=Mensch, pos=(-0.75,1.3,-0.1), height=2, length=0.5, width=0.5, axis=(-1,1,-0.3), color=(.3,.2,.1))
linkerArm = ellipsoid(frame=Mensch, pos=(0.75,1.3,-0.1), height=2, length=0.5, width=0.5, axis=(1,1,-0.3), color=(.3,.2,.1))
#pfeilschaft=cylinder(frame=pfeil,pos=(0,2.95,-0.7),material=materials.wood,color=(0.3157,.2029,.1008),length=2.01,radius=0.025,axis=(scene.forward))
#pfeilspitze=cone(frame=pfeil,pos=(0,2.05,-2.5),length=0.1,radius=0.0275,color=(.4196,.4,.38823),axis=(scene.forward))
#feder1=cylinder(frame=pfeil,pos=(0.123,2.95,-0.7),length=0.1,axis=(-5,-2,5),radius=0.01)
#feder2=cylinder(frame=pfeil,pos=(0.25,2.95,-0.7),length=0.1,axis=(-1,1,0),radius=0.01)
#feder3=cylinder(frame=pfeil,pos=(0.35,2.95,-0.7),length=0.1,axis=(-1,1,0),radius=0.01)
#feder4=cylinder(frame=pfeil,pos=(0.45,2.95,-0.7),length=0.1,axis=(-1,1,0),radius=0.01)
#feder5=cylinder(frame=pfeil,pos=(0.15,2.95,-0.7),length=0.1,axis=(-1,-1,0),radius=0.01)
#feder6=cylinder(frame=pfeil,pos=(0.25,2.95,-0.7),length=0.1,axis=(-1,-1,0),radius=0.01)
#feder7=cylinder(frame=pfeil,pos=(0.35,2.95,-0.7),length=0.1,axis=(-1,-1,0),radius=0.01)
#feder8=cylinder(frame=pfeil,pos=(0.45,2.95,-0.7),length=0.1,axis=(-1,-1,0),radius=0.01)
#feder9=cylinder(frame=pfeil,pos=(0.15,2.95,-0.7),length=0.1,axis=(-80,0,50),radius=0.01)
#feder10=cylinder(frame=pfeil,pos=(0.25,2.95,-0.7),length=0.1,axis=(-80,0,50),radius=0.01)
#feder11=cylinder(frame=pfeil,pos=(0.35,2.95,-0.7),length=0.1,axis=(-80,0,50),radius=0.01)
#feder12=cylinder(frame=pfeil,pos=(0.45,2.95,-0.7),length=0.1,axis=(-80,0,50),radius=0.01)
#feder13=cylinder(frame=pfeil,pos=(0.15,2.95,-0.7),length=0.1,axis=(-80,0,50),radius=0.01)
#feder14=cylinder(frame=pfeil,pos=(0.25,2.95,-0.7),length=0.1,axis=(-80,0,-50),radius=0.01)
#feder15=cylinder(frame=pfeil,pos=(0.35,2.95,-0.7),length=0.1,axis=(-80,0,-50),radius=0.01)
#feder16=cylinder(frame=pfeil,pos=(0.45,2.95,-0.7),length=0.1,axis=(-80,0,-50),radius=0.01)
#Untergrund=box(material=materials.rough, pos=(0,-2.4,0), length=100, height=0.0005, width=100)
ball = sphere(frame=Zielrohr, pos=(0,2.95,-2.7), radius=0.05,color=color.blue)


ausseresZielrohr = cylinder(frame=Zielrohr, pos=(0,2.95,-0.7), axis=(0,0,-1), radius=0.07, length=2, material=materials.wood)
inneresZielrohr = cylinder(frame=Zielrohr, pos=(0,2.95,-0.7), axis=(0,0,-1), radius=0.06, length=2, color=color.black)

Zielscheibe = frame()
nutzlosesDing = sphere(opacity=0, radius=2, pos=(zufallszahlX-0.01, 0, zufallszahlZ-0.01))




Ring1 = cylinder(frame = Zielscheibe, pos=(zufallszahlX-0.04, 0, zufallszahlZ-0.04), length=0.17, radius=0.5, color=color.red)
Ring2 = cylinder(frame = Zielscheibe, pos=(zufallszahlX-0.03, 0, zufallszahlZ-0.03), length=0.15, radius=1)
Ring3 = cylinder(frame = Zielscheibe, pos=(zufallszahlX-0.02, 0, zufallszahlZ-0.02), length=0.13, radius=1.5, color=color.red)
Ring4 = cylinder(frame = Zielscheibe, pos=(zufallszahlX-0.01, 0, zufallszahlZ-0.01), length=0.11, radius=2)

ende=False
drehungpfeil = 0
drehungMensch = 0


dt = 0.01
vGesamt = 10
vY = sin(radians(drehungpfeil))*vGesamt

vEbene = cos(radians(drehungpfeil))*vGesamt

vX = sin(radians(drehungMensch))*vEbene
vZ = cos(radians(drehungMensch))*vEbene
schussAnzahl=2
trefferAnzahl=0






while ende==False:
    rate(50)
    if schussAnzahl<0:
        ende=True
        spielendetext = label(frame=ZielrohrundMensch,text='Game over!',pos=(0,3,-5))
        spielendetext2 = label(frame=ZielrohrundMensch,text='Sie haben '+str(trefferAnzahl)+'-mal getroffen!',pos=(0,3,Kopf.pos[2]-2.5))

    Zielscheibe.rotate(angle=radians(1), axis=(0,1,0), origin=(zufallszahlX, 0, zufallszahlZ))
    #Ring1.rotate(angle=radians(1), axis=(0,1,0))
    #Ring2.rotate(angle=radians(1), axis=(0,1,0))
    #Ring3.rotate(angle=radians(1), axis=(0,1,0))
    #Ring4.rotate(angle=radians(1), axis=(0,1,0))
    
    if scene.kb.keys:
        s = scene.kb.getkey()
        #print s
        
        if   s == 'left':     # links
            ZielrohrundMensch.rotate(angle=radians(3), axis=(0,1,0))
            newforward = rotate(scene.forward, axis=(0,1,0), angle=radians(3))
            scene.forward=newforward
            drehungMensch = drehungMensch -3
        elif s == 'right':
            ZielrohrundMensch.rotate(angle=radians(-3), axis=(0,1,0))
            newforward = rotate(scene.forward, axis=(0,1,0), angle=radians(-3))
            scene.forward=newforward
            drehungMensch = drehungMensch + 3
        elif s == 'up':
            if drehungpfeil<=44:
                Zielrohr.rotate(angle=radians(2), axis=(Hals.axis), origin=(ausseresZielrohr.pos))
                drehungpfeil = drehungpfeil + 2
                newforward = rotate(scene.forward, axis=(ZielrohrundMensch.axis), angle=radians(2))
                scene.forward=newforward
        elif s == 'down':
            if drehungpfeil>=0:
                Zielrohr.rotate(angle=radians(-2), axis=(Hals.axis), origin=(ausseresZielrohr.pos))
                drehungpfeil = drehungpfeil - 2
                newforward = rotate(scene.forward, axis=(ZielrohrundMensch.axis), angle=radians(-2))
                scene.forward=newforward
        elif s == ' ':
            schussAnzahl=schussAnzahl-1
            i =0
            while i<100: 
                print( mag(Zielscheibe.pos-ball.pos))
                vY = vY - 9.81*dt
                i= i+1
                sleep(0.025)
                ball.pos=(ball.pos[0] + vX*dt,  ball.pos[1]+vY*dt,   ball.pos[2] - vZ*dt)
                Zielscheibe.rotate(angle=radians(2), axis=(0,1,0), origin=(zufallszahlX, 0, zufallszahlZ))
                if mag(Zielscheibe.pos-ball.pos)<9:
                    print "getroffen"
                    trefferAnzahl=trefferAnzahl+1
                    schussAnzahl=schussAnzahl+1
                    i=100
            ball.pos=(0,2.95,-2.7)
            vY=sin(radians(drehungpfeil))*vGesamt
           
#fast fertig

Funktionsleiste