-
Notifications
You must be signed in to change notification settings - Fork 27
Description
from wasabi2d import *
scene = Scene(800,600)
def lfsr(seed):
"""
8-bit LFSR with taps at bits 8, 6, 5, 4 (x^8 + x^6 + x^5 + x^4 + 1)
Returns the next state from the given seed.
"""
feedback = ((seed >> 7) ^ (seed >> 5) ^ (seed >> 4) ^ (seed >> 3)) & 1
return ((seed << 1) | feedback) & 0xFF
def generate_screen(seed):
"""
Generate the contents of one screen based on LFSR seed.
This simulates how Pitfall might determine screen features.
"""
rng = seed
for _ in range(seed):
rng = lfsr(rng)
# Use bits of the final RNG value to decide features
features = {
"pit": bool(rng & 0b00000001),
"rolling_log": bool(rng & 0b00000010),
"crocodiles": bool(rng & 0b00000100),
"ladder": bool(rng & 0b00001000),
"vine": bool(rng & 0b00010000),
"treasure": bool(rng & 0b00100000)
}
return features
pit = scene.layers[1].add_rect(200, 40, fill=True, color="white")
pit.pos = (scene.width / 2, 500)
pit.visible = True
back = scene.layers[0].add_sprite(
'back',
pos=(scene.width / 2, scene.height / 2)
)
player = scene.layers[0].add_sprite(
'player',
pos=(10, scene.height / 2)
)
player.vel=[0,0]
levelnum=0
level=generate_screen(0)
@event
def update(keyboard):
global levelnum,level
player.pos=(player.pos[0]+player.vel[0],player.pos[1]+player.vel[1])
player.vel[1]+=1
if player.pos[1]>490:
player.pos[1]=490
player.vel[1]=0
if keyboard.space:
player.vel[1]=-15
sounds.jump.play()
if keyboard.left:
player.vel[0]=-10
if player.pos[0]<0:
player.pos[0]=scene.width
levelnum-=1
elif keyboard.right:
player.vel[0]=10
if player.pos[0]>scene.width:
player.pos[0]=0
levelnum+=1
else:
player.vel[0]=0
levelnum&=255
level = generate_screen(levelnum)
# Show/hide pit based on current level
if level["pit"]:
pit.visible = True
else:
pit.visible = False
print(generate_screen(levelnum))
The rest of your code goes here.
run() # keep this at the end of the file
i have tried everything to get pit to show, nothing.