Untitled
Anonymous
plain_text
02/20/2026 6:55 PM
2.8 KB
9
Indexable
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
import random
app = Ursina()
# --- Environment Setup ---
# Simple white slope
slope = Entity(model='plane', texture='white_cube', scale=(20, 1, 100),
position=(0,0,50), collider='mesh', color=color.white)
# Add some fog for atmosphere
scene.fog_color = color.white
scene.fog_density = 0.02
# --- Player Setup ---
player = FirstPersonController(model='cube', color=color.azure,
position=(0, 2, 0), speed=10,
jump_height=2, gravity=0.5)
player.cursor.visible = False
# Add a "board" underneath the player
board = Entity(parent=player, model='cube', color=color.black,
scale=(1, 0.1, 2), position=(0, -0.8, 0))
# --- Obstacles ---
obstacles = []
def spawn_obstacle():
x_pos = random.uniform(-8, 8)
z_pos = player.z + 50
# Randomly choose between tree or rock
model_type = random.choice(['cone', 'sphere'])
col = color.brown if model_type == 'cone' else color.gray
obstacle = Entity(model=model_type, color=col, collider='box',
position=(x_pos, 1, z_pos), scale=2)
obstacles.append(obstacle)
# Remove old obstacles to save memory
if len(obstacles) > 20:
old = obstacles.pop(0)
destroy(old)
# Spawn obstacles periodically
sky = Sky()
for i in range(10):
spawn_obstacle()
# --- Game Logic ---
def update():
# Constant forward movement (sliding down)
player.position += player.forward * time.dt * 15
# Spawn new obstacles as we move
if frame_count % 30 == 0:
spawn_obstacle()
# Collision detection
hit_info = player.intersects()
if hit_info.hit:
if hit_info.entity in obstacles:
print("Game Over!")
player.disable()
quit()
# Simple jumping
if held_keys['space']:
player.y += 10 * time.dt
# Game over if player falls off the side
if player.y < -5:
print("Fell off!")
player.disable()
quit()
app.run()
Editor is loading...
Leave a Comment