Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active April 30, 2024 15:21
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/ded3720363b58c5c4e3ef406e372ebb3 to your computer and use it in GitHub Desktop.
Save horstjens/ded3720363b58c5c4e3ef406e372ebb3 to your computer and use it in GitHub Desktop.
linus
import vpython as vp
# z ziel
# $ stacheln für schalter 4
# 4 schalter für stacheln $
# % stacheln für schalter 5
# 5 schalter für stacheln %
# & stacheln für schalter 6
# 6 schalter für stachelen &
# / versenkbare Türe für Schalter 7
# 7 schalter für Türe /
# ö Kugel
# . Boden
# # Wand
# 1 spieler 1, blau, kann kugeln schieben, kann kugeln blocken, kann nicht durch stacheln gehen
# 2 spieler 2, rot, kann nicht kugeln schieben, kann kugeln blocken, kann durch stacheln gehen
level1 = """
#################################
#1..ö..........#................#
#...ö....#######................#
#.$$............................#
#...............................#
#..............######...........#
#..............#................#
#..............#................#
#..............................2#
#################################
"""
level2= """
####
#####
"""
class Game:
fps=30
dt=1/fps
kugeln = []
zacken = []
zacken6 = []
zacken7 = []
scene = vp.canvas(width=1400,
height=750,
background=vp.color.white)
spielfeld = [list(line) for line in level1.splitlines() if len(line.strip()) > 0]
def zacken_runter():
for z in Game.zacken:
z.target.y = -1.5
z.dy = -1
def zacken_rauf():
for z in Game.zacken:
z.target.y = -0.5
z.dy = 1
def move_player(player, dx=0, dz=0):
target1 = Game.spielfeld[int(player.pos.z)+dz][int(player.pos.x)+dx]
target2 = Game.spielfeld[int(player.pos.z)+dz*2][int(player.pos.x)+dx*2]
if target1 not in "#12":
#if Game.spielfeld[int(player.pos.z)][int(player.pos.x)+dx] != "#":
#moving = True
# kugel schieben ?
#if Game.spielfeld[int(player.pos.z)][int(player.pos.x)+1] == "ö":
if target1 == "ö":
# kugel blockt ?
#if Game.spielfeld[int(player.pos.z)][int(player.pos.x)+2] == "#":
if target2 in "#12ö":
return
moving = False
#else:
for k in Game.kugeln:
if k.pos.x == player.pos.x + dx:
if k.pos.z == player.pos.z + dz:
# kugel verschieben
k.pos.x += dx
k.pos.z += dz
Game.spielfeld[int(player.pos.z)+dz][int(player.pos.x)+dx] = "."
Game.spielfeld[int(player.pos.z)+dz*2][int(player.pos.x)+dx*2] = "ö"
break
# player verschieben
player.target = player.pos + vp.vector(dx,0,dz)
player.delta = vp.vector(dx,0,dz)
player.ready = False
Game.spielfeld[int(player.pos.z)][int(player.pos.x)] = "."
Game.spielfeld[int(player.pos.z)+dz][int(player.pos.x)+dx] = "1" if player == player1 else "2"
player1=vp.cylinder(pos=vp.vector(1,-0.5,1,),
axis=vp.vector(0,1,0,),
radius=0.4,
color=vp.color.blue)
player1.speed = 1.12
player1.target = None
player1.ready=True
player2=vp.cylinder(pos=vp.vector(2,-0.5,2,),
axis=vp.vector(0,1,0,),
radius=0.4,
color=vp.color.red)
player2.speed = 1.12
player2.target = None
player2.ready=True
#print(Game.spielfeld)
for z, line in enumerate(Game.spielfeld):
for x, char in enumerate(line):
if char == "#":
vp.box(pos=vp.vector(x,0,z),
size=vp.vector(0.9,0.9,0.9),
color=vp.color.yellow,
)
else: # char == ".":
vp.box(pos=vp.vector(x,-0.5,z),
size=vp.vector(0.9,0.1,0.9),
color=vp.color.white)
if char == "1":
player1.pos = vp.vector(x, -0.5, z)
if char == "2":
player2.pos = vp.vector(x, -0.5, z)
if char == "$":
Game.zacken.append(
vp.cone(pos=vp.vector(x,-0.5,z),
axis=vp.vector(0,1,0),
radius=0.5,
color=vp.color.red)
)
if char == "ö":
Game.kugeln.append(
vp.sphere(pos=vp.vector(x, 0, z),
radius = 0.5,
color=vp.color.blue)
)
#vp.scene.camera.pos = vp.vector(len(Game.spielfeld[0])//2,
# 5,
# len(Game.spielfeld)//2+1)
#vp.scene.camera.axis = vp.vector(0,-1,0)
# zacken
for z in Game.zacken:
z.dy = 0
z.target = vp.vector(z.pos.x, z.pos.y, z.pos.z)
while True:
vp.rate(30)
#vp.scene.bind("keydown",key_pressed)
pressed = vp.keysdown()
if "v" in pressed:
zacken_runter()
if "c" in pressed:
zacken_rauf()
#print(pressed)
if player1.ready:
if "d" in pressed:
move_player(player1, 1, 0)
if "a" in pressed:
move_player(player1, -1,0)
if "w" in pressed:
move_player(player1, 0, -1)
if "s" in pressed:
move_player(player1, 0,1)
if player2.ready:
if "right" in pressed:
move_player(player2, 1,0)
if "left" in pressed:
move_player(player2, -1, 0)
if "up" in pressed:
move_player(player2, 0, -1)
if "down" in pressed:
move_player(player2, 0, 1)
for z in Game.zacken:
if z.dy != 0:
z.pos.y += z.dy * Game.dt * player.speed
if vp.mag(z.target - z.pos) < 0.1:
z.pos = vp.vector(z.target.x, z.target.y, z.target.z)
z.dy = 0
for player in (player1, player2):
if not player.ready:
player.pos += vp.norm(player.delta) * Game.dt * player.speed
if vp.mag(player.target - player.pos) < 0.1:
player.pos = vp.vector(player.target.x,
player.target.y,
player.target.z)
player.ready = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment