Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active December 9, 2023 10:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save horstjens/5ce14c19fa0a63d39753a49f93844935 to your computer and use it in GitHub Desktop.
Save horstjens/5ce14c19fa0a63d39753a49f93844935 to your computer and use it in GitHub Desktop.
space battle (vpython)
import vpython as vp
# xyz
#vp.arrow(axis=vp.vector(1,0,0), color=vp.color.red)
vp.text(pos=vp.vector(1.5,0,0), text="x",
color=vp.color.red, height=0.1)
#vp.arrow(axis=vp.vector(0,1,0), color=vp.color.green)
vp.text(pos=vp.vector(0,1.5,0), text="y",
color=vp.color.green, height=0.1)
#vp.arrow(axis=vp.vector(0,0,1), color=vp.color.blue)
vp.text(pos=vp.vector(0,0,1.5), text="z",
color=vp.color.blue, height=0.1)
dussel20 = vp.cone(color=vp.color.blue,
radius=0.2,
pos=vp.vector(1,1,1))
#body = vp.cylinder(color=vp.color.red,
# radius=0.1,
# axis=vp.vector(0.5,0,0),
# pos=vp.vector(0,0,0))
body2 = vp.cone(color=vp.color.red,
radius=0.1,
axis=vp.vector(1,0,0),
pos=vp.vector(0,0,0))
wing1 = vp.box(color=vp.vector(0.7,0.7,0.7),
pos=vp.vector(0.25,0,0),
axis=vp.vector(0,0,1),
size=vp.vector(1.5,0.01,0.25))
#vp.arrow(color=vp.color.yellow, axis=wing1.up)
wing1.up=vp.vector(0,1,0.1)
wing2 = vp.box(color=vp.vector(0.7,0.7,0.7),
pos=vp.vector(0.25,0,0),
axis=vp.vector(0,0,1),
size=vp.vector(1.5,0.01,0.25))
wing2.up=vp.vector(0,1,-0.1)
engine1 = vp.cylinder(color=vp.color.white,
pos=vp.vector(0,0.05,0.15),
axis=vp.vector(0.5,0,0),
radius=0.04)
engine2 = vp.cylinder(color=vp.color.white,
pos=vp.vector(0,0.05,-0.15),
axis=vp.vector(0.5,0,0),
radius=0.04)
engine3 = vp.cylinder(color=vp.color.white,
pos=vp.vector(0,-0.05,0.15),
axis=vp.vector(0.5,0,0),
radius=0.04)
engine4 = vp.cylinder(color=vp.color.white,
pos=vp.vector(0,-0.05,-0.15),
axis=vp.vector(0.5,0,0),
radius=0.04)
player=vp.compound([body2, wing1, wing2, engine1, engine2,
engine3, engine4])
class Game:
beams = []
class Laser(vp.cylinder):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.pos = vp.vector(player.pos.x, player.pos.y, player.pos.z)
self.axis = vp.vector(player.axis.x, player.axis.y, player.axis.z)
self.color = vp.color.green
self.radius = 0.01
self.speed = 3.3
self.age = 0
self.max_age = 2.0
Game.beams.append(self)
while True:
vp.rate(60)
keys=vp.keysdown()
if "w" in keys:
player.rotate(angle=0.1,
axis=vp.cross(player.up,
player.axis))
if "s" in keys:
player.rotate(angle=-0.1,
axis=vp.cross(player.up,
player.axis))
if "a" in keys:
player.rotate(angle=0.1,
axis=player.up)
if "d" in keys:
player.rotate(angle=-0.1,
axis=player.up)
if "x" in keys:
Laser()
for beam in Game.beams:
beam.pos += vp.norm(beam.axis) * beam.speed * 1/60
beam.age += 1/60
if beam.age > beam.max_age:
beam.visible = False
Game.beams = [beam for beam in Game.beams if
beam.age <= beam.max_age]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment