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