Untitled

 avatar
unknown
plain_text
a month ago
3.8 kB
4
Indexable
from ursina import *
import random

class SpaceSurvivalGame(Ursina):
    def __init__(self):
        super().__init__()
        self.player = Entity(model='cube', color=color.orange, scale=(1,2,1), position=(0,1,0))
        self.ground = Entity(model='plane', texture='white_cube', scale=100, collider='box')
        self.resources = []
        self.enemies = []
        self.inventory = []
        self.inventory_visible = False
        self.velocity_y = 0
        self.is_jumping = False
        self.speed = 5
        self.sensitivity = 100
        self.mouse_locked = True
        
        camera.parent = self.player
        camera.position = (0, 2, -5)
        camera.look_at(self.player)
        
        window.fullscreen = False
        mouse.locked = True
        
        self.setup_ui()
        self.spawn_resources()
        self.spawn_enemies()
        
    def setup_ui(self):
        self.inventory_text = Text(text='Inventory: ', position=(-0.5, 0.4), scale=2, color=color.white, visible=False)
        
    def spawn_resources(self):
        for _ in range(10):
            res = Entity(model='sphere', color=color.green, scale=0.5,
                         position=(random.randint(-10,10), 0.5, random.randint(-10,10)), collider='box')
            self.resources.append(res)
        
    def spawn_enemies(self):
        for _ in range(5):
            enemy = Entity(model='cube', color=color.red, scale=1.5,
                           position=(random.randint(-10,10), 1, random.randint(-10,10)), collider='box')
            self.enemies.append(enemy)
        
    def update(self):
        self.player_movement()
        self.apply_gravity()
        self.check_collisions()
        self.mouse_look()
        self.toggle_inventory()
        
    def player_movement(self):
        speed = self.speed * time.dt
        if held_keys['shift']:
            speed *= 2  # Sprinting when Shift is held
        if held_keys['w']:
            self.player.z -= speed
        if held_keys['s']:
            self.player.z += speed
        if held_keys['a']:
            self.player.x -= speed
        if held_keys['d']:
            self.player.x += speed
        if held_keys['space'] and not self.is_jumping:
            self.velocity_y = 0.2
            self.is_jumping = True
        
    def apply_gravity(self):
        self.player.y += self.velocity_y
        self.velocity_y -= 0.01
        if self.player.y <= 1:
            self.player.y = 1
            self.is_jumping = False
            self.velocity_y = 0
        
    def check_collisions(self):
        for res in self.resources[:]:
            if self.player.intersects(res).hit:
                self.inventory.append('Resource')
                self.inventory_text.text = f'Inventory: {len(self.inventory)} items'
                destroy(res)
                self.resources.remove(res)
        
        for enemy in self.enemies:
            if self.player.intersects(enemy).hit:
                print('You were attacked by an alien!')
        
    def mouse_look(self):
        if mouse.locked:
            self.player.rotation_y += mouse.velocity[0] * self.sensitivity
            camera.rotation_x -= mouse.velocity[1] * self.sensitivity
            camera.rotation_x = clamp(camera.rotation_x, -90, 90)
        
    def toggle_inventory(self):
        if held_keys['e'] and not self.inventory_visible:
            self.inventory_visible = True
            self.inventory_text.visible = True
        elif held_keys['e'] and self.inventory_visible:
            self.inventory_visible = False
            self.inventory_text.visible = False

if __name__ == '__main__':
    game = SpaceSurvivalGame()
    game.run()
Editor is loading...
Leave a Comment