🎮ArcadeLab

Fuggler

by QuantumBolt10
209 lines8.3 KB
▶ Play
import pygame
 import random
 import sys
 # --------------------------
 # 🌍 COUNTRIES + FUGGLER COUNTS
 # --------------------------
 COUNTRIES = {
     "United Kingdom": 125000,
     "Ireland": 18000,
     "USA": 210000,
     "Canada": 42000,
     "Australia": 38000,
     "Germany": 29000,
     "France": 26000,
     "Japan": 55000,
     "China": 72000,
     "Brazil": 36000,
     "South Africa": 17000
 }
 # --------------------------
 # 🧟 ALL FUGGLER NAMES
 # --------------------------
 FUGGLER_NAMES = [
     "Original Prototype #1",
     "Wide Eyed Weirdo", "Two-Faced Freak", "Rabid Rabbit", "Oogah Boogah", "Lady Gugga",
     "Grin Grin", "Gaptooth McGoo", "Grumpy Grumps", "Sasquoosh", "Sir Belch",
     "Suspicious Fox", "Rainbow Rascal", "Munch Munch", "Tiny Terror", "Indecisive Monster",
     "Reek-O", "Fiery Fluff", "Inferno", "Stinkface", "Snortle Bork",
     "Slobber Snout", "Wart Hog", "Dizzy Dino", "Squawk Squawk", "Loop Loop",
     "Gloop Gloop", "Chomp Chomp", "Burp Burp", "Snot Rocket", "Grim Grin"
 ]
 # --------------------------
 # 🎮 FUGGLER CLASS
 # --------------------------
 class Fuggler:
     def __init__(self, name, country, is_leader=False):
         self.name = name
         self.country = country
         self.is_leader = is_leader
         self.x = 400 if is_leader else random.randint(-200, 1000)
         self.y = 300 if is_leader else random.randint(-200, 800)
         self.speed = 2.8 if is_leader else random.uniform(1.3, 2.1)
         self.direction = "forward"
         self.looking = "forward"
         self.moving = True
         self.stopped = False
         self.size = 48 if is_leader else random.randint(24, 40)
         self.color = (220, 20, 20) if is_leader else (
             random.randint(40,255), random.randint(40,255), random.randint(40,255)
         )
         self.action = "walking"
         self.timer = 0
     # Movement
     def walk_left(self):
         if not self.stopped:
             self.direction = "left"
             self.x -= self.speed
     def walk_right(self):
         if not self.stopped:
             self.direction = "right"
             self.x += self.speed
     def walk_up(self):
         if not self.stopped:
             self.direction = "up"
             self.y -= self.speed
     def walk_down(self):
         if not self.stopped:
             self.direction = "down"
             self.y += self.speed
     def run(self):
         if not self.stopped:
             s = self.speed * 1.8
             if self.direction == "left": self.x -= s
             elif self.direction == "right": self.x += s
             elif self.direction == "up": self.y -= s
             elif self.direction == "down": self.y += s
     def stop(self):
         self.stopped = True
         self.moving = False
     # Look
     def look_left(self): self.looking = "left"
     def look_right(self): self.looking = "right"
     def look_up(self): self.looking = "up"
     def look_down(self): self.looking = "down"
     def look_front(self): self.looking = "front"
     # Gross actions
     def poop(self): self.action = "pooping"
     def fart(self): self.action = "farting"
     def puke(self): self.action = "puking"
     def pee(self): self.action = "peeing"
     def burp(self): self.action = "burping"
     # Update
     def update(self, leader_x, leader_y, keys):
         self.timer += 1
         # YOU CONTROL LEADER
         if self.is_leader:
             if keys[pygame.K_LEFT]: self.walk_left()
             if keys[pygame.K_RIGHT]: self.walk_right()
             if keys[pygame.K_UP]: self.walk_up()
             if keys[pygame.K_DOWN]: self.walk_down()
             if keys[pygame.K_LSHIFT]: self.run()
             if keys[pygame.K_SPACE]: self.stop()
             if keys[pygame.K_1]: self.look_left()
             if keys[pygame.K_2]: self.look_right()
             if keys[pygame.K_3]: self.look_up()
             if keys[pygame.K_4]: self.look_down()
             if keys[pygame.K_5]: self.look_front()
             if keys[pygame.K_p]: self.poop()
             if keys[pygame.K_f]: self.fart()
             if keys[pygame.K_u]: self.puke()
             if keys[pygame.K_e]: self.pee()
             if keys[pygame.K_b]: self.burp()
         # OTHERS FOLLOW YOU
         else:
             dx = leader_x - self.x
             dy = leader_y - self.y
             dist = (dx**2 + dy**2)**0.5
             if dist > 70:
                 self.x += (dx / dist) * self.speed
                 self.y += (dy / dist) * self.speed
             # Random gross stuff
             if self.timer > random.randint(70, 200):
                 self.timer = 0
                 r = random.randint(1,5)
                 if r == 1: self.poop()
                 elif r == 2: self.fart()
                 elif r == 3: self.puke()
                 elif r == 4: self.pee()
                 elif r == 5: self.burp()
         # Keep in screen
         self.x = max(10, min(790, self.x))
         self.y = max(10, min(590, self.y))
     # Draw
     def draw(self, screen):
         pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.size)
         # Eyes
         ox, oy = 0,0
         if self.looking == "left": ox=-6
         elif self.looking == "right": ox=6
         elif self.looking == "up": oy=-6
         elif self.looking == "down": oy=6
         pygame.draw.circle(screen, (255,255,255), (int(self.x-5+ox), int(self.y-4+oy)), 4)
         pygame.draw.circle(screen, (255,255,255), (int(self.x+5+ox), int(self.y-4+oy)), 4)
         # Mouth / Action
         if self.action in ["pooping","farting","puking","peeing"]:
             pygame.draw.arc(screen, (0,0,0), [self.x-8, self.y, 16, 10], 3.14, 6.28, 3)
         else:
             pygame.draw.arc(screen, (0,0,0), [self.x-8, self.y+3, 16, 10], 0, 3.14, 3)
 # --------------------------
 # 🚀 MAIN GAME
 # --------------------------
 def main():
     pygame.init()
     screen = pygame.display.set_mode((800, 600))
     pygame.display.set_caption("AXEL'S FUGGLER WORLD")
     clock = pygame.time.Clock()
     big_font = pygame.font.SysFont("Arial", 50, bold=True)
     small_font = pygame.font.SysFont("Arial", 26)
     # CREATE ALL FUGGLERS
     all_fugglers = []
     leader = Fuggler("Original Prototype #1", "The Beginning", is_leader=True)
     all_fugglers.append(leader)
     # Spawn Fugglers from every country
     for country, _ in COUNTRIES.items():
         for _ in range(35):
             name = random.choice(FUGGLER_NAMES[1:])
             all_fugglers.append(Fuggler(name, country))
     game_state = "intro"  # intro -> playing
     while True:
         screen.fill((230, 240, 250))
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 pygame.quit()
                 sys.exit()
             # Click START
             if event.type == pygame.MOUSEBUTTONDOWN and game_state == "intro":
                 mx, my = pygame.mouse.get_pos()
                 if 220 < mx < 580 and 340 < my < 420:
                     game_state = "playing"
         # 📺 INTRO SCREEN
         if game_state == "intro":
             t1 = big_font.render("AXEL'S FUGGLER GAME", True, (190, 0, 0))
             t2 = big_font.render("🌍 WORLD EDITION 🌍", True, (0, 110, 200))
             d1 = small_font.render("YOU ARE THE FIRST FUGGLER EVER!", True, (0,0,0))
             d2 = small_font.render("EVERY FUGGLER FROM EVERY COUNTRY FOLLOWS YOU!", True, (0,0,0))
             d3 = small_font.render("Walk • Run • Poop • Fart • Puke • Pee", True, (130,0,0))
             screen.blit(t1, (120, 130))
             screen.blit(t2, (140, 200))
             screen.blit(d1, (115, 270))
             screen.blit(d2, (85, 310))
             screen.blit(d3, (130, 350))
             # START BUTTON
             pygame.draw.rect(screen, (0, 170, 0), (220, 340, 360, 80), border_radius=15)
             start_text = big_font.render("START", True, (255,255,255))
             screen.blit(start_text, (345, 350))
         # 🎮 GAMEPLAY
         elif game_state == "playing":
             keys = pygame.key.get_pressed()
             # Update + Draw all
             for f in all_fugglers:
                 f.update(leader.x, leader.y, keys)
                 f.draw(screen)
             # Controls text
             help_text = small_font.render("Arrows = Move | Shift = Run | P/F/U/E = Actions", True, (0,0,0))
             screen.blit(help_text, (12, 12))
         pygame.display.flip()
         clock.tick(30)
 if __name__ == "__main__":
     main()

Game Source: Fuggler

Creator: QuantumBolt10

Libraries: none

Complexity: complex (209 lines, 8.3 KB)

The full source code is displayed above on this page.

Remix Instructions

To remix this game, copy the source code above and modify it. Add a ARCADELAB header at the top with "remix_of: fuggler-quantumbolt10" to link back to the original. Then publish at arcadelab.ai/publish.