problem with exam task for college

jeltedeproft at hotmail.com jeltedeproft at hotmail.com
Fri Jan 4 19:23:24 CET 2013


hy everyone, for my exam this year i had to write a computer game on vpython (visualpython).we had to make a lunar lander game where the ship drops by gravity and is able to manouver to safely land on the moon.<br>right now i am completely stuck on trying to make the visual of the ship rotate.<br>i'm new to this forum, i guess i'll just paste my code here. Everything works fine on the game, except the rotation of the ship. however the when you press "up" the after rotating the velocity actually changes direction , but the visual doesn't. i'm getting kinda nervous because due date is coming, any help is appreciated, here is the code:

from visual import *
import time
import math
import random
from datetime import datetime
import operator 


class lunar_lander(object):
    def __init__(self):
        scene.title = 'mini star wars'
        scene.width = 375
        scene.height = 550
        scene.center = (0,0)
        self.pos = (0,0)
        self.axis = 0
        self.brandstofmeter = brandstofmeter()
        self.ruimteschip = ruimteschip()
        self.view = game_view(self)
        
        

    def play(self):
        t=0
        dt=0.01
        while t<999999999:
            time.sleep(0.01)
            self.brandstofmeter.update
            self.ruimteschip.update(dt)
            t = t + dt

            
            
class game_view(object):
    def __init__(self,owner):
        autoscale=True
        box(pos=( 0, -375, 0), length=500, height=5, width=0, color = color.white)
        box(pos=(0,375, 0), length=500, height=5, width=0, color = color.white)
        box(pos=(-250,0, 0), length=5, height=750, width=0, color = color.white)
        box(pos=(250,0, 0), length=5, height=750, width=0, color = color.white)
    
        maan = curve(pos=[(-250,-353),(-240,-341),(-210,-354),(-199.5,-374)],color=color.red)
        maana = curve(pos=[(-199.5,-374),(-166,-374)],color=color.green)
        maanb = curve(pos=[(-166,-374),(-140,-357),(-80,-319),(-40,-361),(0,-321),(40,-329),(80,-347)],color=color.red)
        maanc = curve(pos=[(80,-347),(140,-347)],color=color.green)
        maand = curve(pos=[(140,-347),(162,-337),(189.5,-365),(210,-355),(240,-372),(250,-338)],color=color.red)

        for i in random.sample(range (-250,250),20):
            for j in random.sample(range (-375,375),20):
                sterren = points(pos = [i,j,0],size = 2, color=color.white)


class brandstofmeter(object):
        def __init__(self):
            self.size = (25,45)
            axis = 0
            self.pos = (220,345)
            self.view = brandstofmeter_view(self)
            
        def update(self):
            while True:
                if scene.kb.keys:
                    s = scene.kb.getkey()
                    if (s == 'up'):
                        self.view.update(self)
            
            
            
        
class brandstofmeter_view(object):
    def __init__(self,owner):
        self.owner = owner
        meter = box(pos = owner.pos,size = owner.size,color = color.green)
        
    def update (self,owner):
        self.size = self.size - (0,0.45)
        
                
                    
        
class ruimteschip(object):
    def __init__(self):
        self.pos = vector(0,330)
        self.acceleration = vector(0,-88,0)
        self.axis = (1,0,0)
        self.hoek = (90*math.pi)/180
        self.graden = math.degrees(self.hoek)
        self.gas = vector(10 * cos(self.hoek),10 * sin (self.hoek))
        self.velocity = vector(0,0,0)
        self.angle = (1,0,0)
        self.view = ruimteschip_view(self)
        self.vlam = self.view.vlam
        self.frame = self.view.frame
        
        
        
        

    def update(self,dt):
        self.velocity = self.velocity + (self.acceleration * dt)
        self.pos = self.pos + self.velocity * dt
        a = 0
        b = 0
        if scene.kb.keys:
            a = a + 0.001 
            s = scene.kb.getkey()
            if (s == "up"):
                self.velocity = self.velocity + self.gas
                self.vlam.visible = True
                b = b + 2
            if (s == "left"):
                self.gas = rotate(self.gas,angle = math.pi/10, axis = (0,0,1))
                c = list(self.frame.axis)
                c[2] -= 0.1
                c = tuple(c)
                c = self.frame.axis
            if (s == "right") :
                self.gas = rotate(self.gas,angle = -(math.pi/10), axis = (0,0,1))
                c = list(self.frame.axis)
                c[2] += 0.1
                c = tuple(c)
                c = self.frame.axis
        if (a == 0):
            self.vlam.visible = False
            
             
        if self.pos.x > 250:
            self.pos.x = -250
        if self.pos.x < -250:
            self.pos.x = 250
        self.view.update(self)
                    
class ruimteschip_view(object):
    def __init__(self,owner):
        self.owner = owner
        self.frame = frame(pos = owner.pos,axis = owner.axis)
        self.motor = curve(frame = self.frame,pos=[(0,24.0),(22.0,24.0),(22.0,39.0),(-22.0,39.0),(-22,24),(0,24)])
        self.capsule = curve(frame = self.frame,color = color.blue ,pos=[(0,39),(-3,39),(-9,44),(-12,46),(-18,48),(-22,50),(-18,52),(-12,54),(-9,56),(-3,61),(0,61),(3,59),(9,56),(12,54),(18,52),(22,50),(18,48),(12,46),(9,44),(3,39),(0,39)])
        self.poota = curve(frame = self.frame,pos = [(-18,24),(-20,24),(-20,0),(-18,0),(-18,24)])
        self.pootb = curve(frame = self.frame,pos = [(18,24),(20,24),(20,0),(18,0),(18,24)])
        self.vlam = curve(frame = self.frame,color = color.orange , visible=false,pos = [(0,24.0),(-9.0,14.0),(0,-5.0),(9,14.0),(0,24.0)])
        
    def update(self,owner):
        self.frame.axis = owner.axis  
        self.frame.pos = owner.pos
        

                          



More information about the Python-list mailing list