Skip to content
View prince123-ally's full-sized avatar

Block or report prince123-ally

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
prince123-ally/README.md

from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController import random

app = Ursina()

------------------- Game State -------------------

game_over = False player = FirstPersonController() player.gravity = 0.5 player.cursor.visible = True player.speed = 5 player.position = (0, 2, 0) player.health = 100 player.sprint_speed = 10 # Sprint speed multiplier player.dash_distance = 5 # Dash distance player.dash_cooldown = 0 # Dash cooldown timer

------------------- Sound -------------------

shoot_sound = Audio('shoot.wav', autoplay=False) reload_sound = Audio('reload.wav', autoplay=False) pickup_sound = Audio('pickup.wav', autoplay=False) hit_sound = Audio('hit.wav', autoplay=False) sprint_sound = Audio('sprint.wav', autoplay=False) dash_sound = Audio('dash.wav', autoplay=False) grenade_sound = Audio('grenade.wav', autoplay=False)

------------------- Island Terrain -------------------

ground = Entity(model='plane', texture='grass', scale=(200, 1, 200), collider='box') sky = Entity(model='sphere', texture='sky_sphere', scale=500, color=color.white, shader=lit_with_shadows_shader)

------------------- Houses -------------------

houses = [] for _ in range(150): position = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) house = Entity(model='cube', color=color.brown, scale=(random.randint(5, 15), 10, random.randint(5, 15)), position=position, collider='box') houses.append(house)

------------------- Trees -------------------

trees = [] for _ in range(100): position = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) tree = Entity(model='sphere', color=color.green, scale=1, position=position, collider='box') trees.append(tree)

------------------- Roads -------------------

road_material = Material(color=color.gray) roads = [] for _ in range(5): start_pos = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) road = Entity(model='cube', color=color.gray, scale=(random.randint(30, 100), 0.1, random.randint(3, 5)), position=start_pos, collider='box') roads.append(road)

------------------- Loot Drops -------------------

loot_drops = [] loot_weapons = ['smg', 'rifle', 'sniper', 'shotgun'] weapon_stats = { 'smg': {'damage': 1, 'ammo': 30, 'reload': 1.5}, 'rifle': {'damage': 2, 'ammo': 25, 'reload': 2}, 'sniper': {'damage': 3, 'ammo': 10, 'reload': 3}, 'shotgun': {'damage': 5, 'ammo': 8, 'reload': 2.5} }

class LootDrop(Entity): def init(self, position): weapon = random.choice(loot_weapons) super().init(model='cube', color=color.orange, scale=2, position=position, collider='box') self.weapon = weapon self.material = Material(color=color.yellow) self.weapon_text = Text(text=weapon, parent=self, position=(0, 0.5), color=color.white)

def pickup(self):
    pickup_sound.play()
    player.weapon = self.weapon
    destroy(self)

def spawn_loot_drop(): position = Vec3(random.randint(-100, 100), 1, random.randint(-100, 100)) loot = LootDrop(position) loot_drops.append(loot) invoke(spawn_loot_drop, delay=30)

------------------- Enemies -------------------

class Enemy(Entity): def init(self, position, strength=1): super().init(model='cube', color=color.red, position=position, scale=(2,2,2), collider='box') self.health = 3 * strength self.speed = 1 + 0.5 * strength self.damage = 1 * strength self.attack_cooldown = 0 self.strength = strength self.health_bar = Entity(parent=self, model='cube', color=color.green, scale=(1, 0.1, 0.1), position=(0, 1.5, 0))

def update(self):
    if distance(self, player) < 20:
        self.look_at(player)
        if distance(self, player) > 2:
            self.position += self.forward * time.dt * self.speed
        else:
            self.attack()
            
def attack(self):
    if self.attack_cooldown <= 0:
        damage_player(self.damage)
        self.attack_cooldown = 1
    else:
        self.attack_cooldown -= time.dt

def take_damage(self, amount):
    self.health -= amount
    hit_sound.play()
    self.health_bar.scale_x = self.health / (3 * self.strength)
    if self.health <= 0:
        self.die()

def die(self):
    explosion(self.position)
    destroy(self)
    if self in enemies:
        enemies.remove(self)

def spawn_enemy(): strength = random.randint(1, 5) position = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) enemy = Enemy(position, strength) enemies.append(enemy) invoke(spawn_enemy, delay=random.randint(5, 10)) # Spawn new enemy every 5-10 seconds

------------------- Player Actions -------------------

def damage_player(amount): if game_over: return player.health -= amount if player.health <= 0: end_game()

def end_game(): global game_over game_over = True Text(text="Game Over", origin=(0, 0), scale=5, color=color.red) application.pause()

def input(key): if key == 'left mouse down': shoot() if key == 'r': reload_weapon() if key == 'shift': # Sprint start_sprint() if key == 'space': # Dash dash()

def shoot(): if hasattr(player, 'weapon'): shoot_sound.play() print(f"Shooting with {player.weapon}")

def reload_weapon(): reload_sound.play() print(f"Reloading {player.weapon}")

def start_sprint(): sprint_sound.play() player.speed = player.sprint_speed invoke(stop_sprint, delay=5) # Sprint lasts for 5 seconds

def stop_sprint(): player.speed = 5

def dash(): if player.dash_cooldown <= 0: dash_sound.play() player.position += player.forward * player.dash_distance player.dash_cooldown = 3 else: player.dash_cooldown -= time.dt

------------------- UI -------------------

ammo_text = Text(text='', position=(-0.85, 0.45), origin=(0, 0), scale=2) weapon_text = Text(text="Weapon: None", position=(-0.85, 0.4), origin=(0, 0), scale=2) health_bar_bg = Entity(parent=camera.ui, model='quad', color=color.black, scale=(0.5, 0.03), position=(-0.6, 0.4)) health_bar = Entity(parent=health_bar_bg, model='quad', color=color.green, scale=(1, 1), position=(-0.25, 0))

------------------- Multiplayer -------------------

You can use networking libraries like socket for full multiplayer support, but Ursina doesn't have built-in multiplayer

This feature would require complex changes for synchronization between players and network code.

------------------- Main Update Loop -------------------

def update(): if game_over: return

ammo_text.text = f'Ammo: {weapon_stats.get(player.weapon, {}).get("ammo", 0)}' if hasattr(player, 'weapon') else "Ammo: 0"
health_bar.scale_x = max(player.health / 100, 0)

# Update loot drops
for loot in loot_drops[:]:
    if player.intersects(loot).hit:
        loot.pickup()
        loot_drops.remove(loot)

# Update enemies
for enemy in enemies[:]:
    enemy.update()

# Cooldowns
if player.dash_cooldown > 0:
    player.dash_cooldown -= time.dt

------------------- Start Loot Drop and Enemy Spawn Timers -------------------

invoke(spawn_loot_drop, delay=30) invoke(spawn_enemy, delay=5)

------------------- Start Game -------------------

enemies = [] app.run()from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController import random

app = Ursina()

------------------- Game State -------------------

game_over = False player = FirstPersonController() player.gravity = 0.5 player.cursor.visible = True player.speed = 5 player.position = (0, 2, 0) player.health = 100 player.sprint_speed = 10 # Sprint speed multiplier player.dash_distance = 5 # Dash distance player.dash_cooldown = 0 # Dash cooldown timer

------------------- Sound -------------------

shoot_sound = Audio('shoot.wav', autoplay=False) reload_sound = Audio('reload.wav', autoplay=False) pickup_sound = Audio('pickup.wav', autoplay=False) hit_sound = Audio('hit.wav', autoplay=False) sprint_sound = Audio('sprint.wav', autoplay=False) dash_sound = Audio('dash.wav', autoplay=False) grenade_sound = Audio('grenade.wav', autoplay=False)

------------------- Island Terrain -------------------

ground = Entity(model='plane', texture='grass', scale=(200, 1, 200), collider='box') sky = Entity(model='sphere', texture='sky_sphere', scale=500, color=color.white, shader=lit_with_shadows_shader)

------------------- Houses -------------------

houses = [] for _ in range(150): position = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) house = Entity(model='cube', color=color.brown, scale=(random.randint(5, 15), 10, random.randint(5, 15)), position=position, collider='box') houses.append(house)

------------------- Trees -------------------

trees = [] for _ in range(100): position = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) tree = Entity(model='sphere', color=color.green, scale=1, position=position, collider='box') trees.append(tree)

------------------- Roads -------------------

road_material = Material(color=color.gray) roads = [] for _ in range(5): start_pos = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) road = Entity(model='cube', color=color.gray, scale=(random.randint(30, 100), 0.1, random.randint(3, 5)), position=start_pos, collider='box') roads.append(road)

------------------- Loot Drops -------------------

loot_drops = [] loot_weapons = ['smg', 'rifle', 'sniper', 'shotgun'] weapon_stats = { 'smg': {'damage': 1, 'ammo': 30, 'reload': 1.5}, 'rifle': {'damage': 2, 'ammo': 25, 'reload': 2}, 'sniper': {'damage': 3, 'ammo': 10, 'reload': 3}, 'shotgun': {'damage': 5, 'ammo': 8, 'reload': 2.5} }

class LootDrop(Entity): def init(self, position): weapon = random.choice(loot_weapons) super().init(model='cube', color=color.orange, scale=2, position=position, collider='box') self.weapon = weapon self.material = Material(color=color.yellow) self.weapon_text = Text(text=weapon, parent=self, position=(0, 0.5), color=color.white)

def pickup(self):
    pickup_sound.play()
    player.weapon = self.weapon
    destroy(self)

def spawn_loot_drop(): position = Vec3(random.randint(-100, 100), 1, random.randint(-100, 100)) loot = LootDrop(position) loot_drops.append(loot) invoke(spawn_loot_drop, delay=30)

------------------- Enemies -------------------

class Enemy(Entity): def init(self, position, strength=1): super().init(model='cube', color=color.red, position=position, scale=(2,2,2), collider='box') self.health = 3 * strength self.speed = 1 + 0.5 * strength self.damage = 1 * strength self.attack_cooldown = 0 self.strength = strength self.health_bar = Entity(parent=self, model='cube', color=color.green, scale=(1, 0.1, 0.1), position=(0, 1.5, 0))

def update(self):
    if distance(self, player) < 20:
        self.look_at(player)
        if distance(self, player) > 2:
            self.position += self.forward * time.dt * self.speed
        else:
            self.attack()
            
def attack(self):
    if self.attack_cooldown <= 0:
        damage_player(self.damage)
        self.attack_cooldown = 1
    else:
        self.attack_cooldown -= time.dt

def take_damage(self, amount):
    self.health -= amount
    hit_sound.play()
    self.health_bar.scale_x = self.health / (3 * self.strength)
    if self.health <= 0:
        self.die()

def die(self):
    explosion(self.position)
    destroy(self)
    if self in enemies:
        enemies.remove(self)

def spawn_enemy(): strength = random.randint(1, 5) position = Vec3(random.randint(-100, 100), 0, random.randint(-100, 100)) enemy = Enemy(position, strength) enemies.append(enemy) invoke(spawn_enemy, delay=random.randint(5, 10)) # Spawn new enemy every 5-10 seconds

------------------- Player Actions -------------------

def damage_player(amount): if game_over: return player.health -= amount if player.health <= 0: end_game()

def end_game(): global game_over game_over = True Text(text="Game Over", origin=(0, 0), scale=5, color=color.red) application.pause()

def input(key): if key == 'left mouse down': shoot() if key == 'r': reload_weapon() if key == 'shift': # Sprint start_sprint() if key == 'space': # Dash dash()

def shoot(): if hasattr(player, 'weapon'): shoot_sound.play() print(f"Shooting with {player.weapon}")

def reload_weapon(): reload_sound.play() print(f"Reloading {player.weapon}")

def start_sprint(): sprint_sound.play() player.speed = player.sprint_speed invoke(stop_sprint, delay=5) # Sprint lasts for 5 seconds

def stop_sprint(): player.speed = 5

def dash(): if player.dash_cooldown <= 0: dash_sound.play() player.position += player.forward * player.dash_distance player.dash_cooldown = 3 else: player.dash_cooldown -= time.dt

------------------- UI -------------------

ammo_text = Text(text='', position=(-0.85, 0.45), origin=(0, 0), scale=2) weapon_text = Text(text="Weapon: None", position=(-0.85, 0.4), origin=(0, 0), scale=2) health_bar_bg = Entity(parent=camera.ui, model='quad', color=color.black, scale=(0.5, 0.03), position=(-0.6, 0.4)) health_bar = Entity(parent=health_bar_bg, model='quad', color=color.green, scale=(1, 1), position=(-0.25, 0))

------------------- Multiplayer -------------------

You can use networking libraries like socket for full multiplayer support, but Ursina doesn't have built-in multiplayer

This feature would require complex changes for synchronization between players and network code.

------------------- Main Update Loop -------------------

def update(): if game_over: return

ammo_text.text = f'Ammo: {weapon_stats.get(player.weapon, {}).get("ammo", 0)}' if hasattr(player, 'weapon') else "Ammo: 0"
health_bar.scale_x = max(player.health / 100, 0)

# Update loot drops
for loot in loot_drops[:]:
    if player.intersects(loot).hit:
        loot.pickup()
        loot_drops.remove(loot)

# Update enemies
for enemy in enemies[:]:
    enemy.update()

# Cooldowns
if player.dash_cooldown > 0:
    player.dash_cooldown -= time.dt

------------------- Start Loot Drop and Enemy Spawn Timers -------------------

invoke(spawn_loot_drop, delay=30) invoke(spawn_enemy, delay=5)

------------------- Start Game -------------------

enemies = [] app.run()

Popular repositories Loading

  1. Prince Prince Public

    Non

  2. prince123-ally prince123-ally Public

    Config files for my GitHub profile.