Last active
May 13, 2024 15:45
-
-
Save horstjens/ded3720363b58c5c4e3ef406e372ebb3 to your computer and use it in GitHub Desktop.
linus
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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= r""" | |
################################# | |
#.1.2.#...ö......#.....öö.......# | |
#.###.#...ö......#.....öö...#ööö# | |
#.....#ööö###%%%%#.....öö...#...# | |
#$$$$$#.&#....#.....öö...#...# | |
#.....#...#.#....#.....öö..6#...# | |
#&&.&&#&&.#.####.#öö#########&&&############## | |
#.....ö...#....../..........&...ö..........zz# | |
#4....ö...#7...../..........&...ö..........zz# | |
############################################## | |
""" | |
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] | |
zacken4_up = True | |
def zacken_runter(): | |
for z in Game.zacken.values(): | |
z.target.y = -1.5 | |
z.dy = -1 | |
Game.zacken4_up = False | |
Game.zlabel.text=f"zacken sind unten {Game.zacken4_up}" | |
def zacken_rauf(): | |
for z in Game.zacken.values(): | |
z.target.y = -0.5 | |
z.dy = 1 | |
Game.zacken4_up = True | |
Game.zlabel.text=f"zacken sind oben {Game.zacken4_up}" | |
# zacken ins spielfeld schreiben | |
for (x,z), cone in Game.zacken.items(): | |
Game.spielfeld[z][x] = "$" | |
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 (not player.can_push_kugel) and (target1 == "ö"): | |
return | |
if (player.can_pass_spike == False) and (target1 in "$%&/"): | |
# spikes are up? | |
print(target1, Game.zacken4_up) | |
if (target1 == "$") and (Game.zacken4_up == True): | |
return | |
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: | |
if player.can_push_kugel: | |
# 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 | |
player1.can_push_kugel = True | |
player1.can_pass_spike = False | |
player1.can_block_kugel = 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 | |
player2.can_push_kugel = False | |
player2.can_pass_spike = True | |
player2.can_block_kugel = 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.vector(0.69,0.7,0.52), | |
) | |
elif char == "4": | |
vp.box(pos=vp.vector(x,-0.5,z), | |
size=vp.vector(0.9,0.1,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[(x,z)] = vp.cone( | |
pos=vp.vector(x,-0.5,z), | |
axis=vp.vector(0,1,0), | |
radius=0.5, | |
color=vp.color.yellow) | |
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.values(): | |
z.dy = 0 | |
z.target = vp.vector(z.pos.x, z.pos.y, z.pos.z) | |
Game.zlabel = vp.label(pixel_pos = True, pos=vp.vector(20,10,0), | |
text="zacken sind ....", align="left") | |
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.values(): | |
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 | |
char1, char2 = None, None | |
if player1.ready: | |
char1 = Game.spielfeld[int(player1.pos.z)][int(player1.pos.x)] | |
if player2.ready: | |
char2 = Game.spielfeld[int(player2.pos.z)][int(player2.pos.x)] | |
#print(char1, char2, player1.pos, player2.pos) | |
#if (char1 == "4") or (char2 == "4"): | |
# zacken_runter() | |
#else: | |
# zacken_rauf() | |
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