import pygame, random, sys, time pygame.init() WIDTH, HEIGHT = 1280, 720 # screen size WORLD_WIDTH = 100000 WORLD_HEIGHT = 90000 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Psychological Forest Survival - Giant World") clock = pygame.time.Clock() WHITE=(255,255,255) BLACK=(0,0,0) RED=(255,0,0) GREEN=(0,255,0) BLUE=(0,0,255) ORANGE=(255,140,0) YELLOW=(255,255,0) SKYDAY=(135,206,235) SKYNIGHT=(10,10,40) DARKGRAY=(30,30,30) day_length=120 start_time=time.time() # Player starts somewhere in giant world player_world_x = WORLD_WIDTH // 2 player_world_y = WORLD_HEIGHT // 2 player_speed=10 player_size=50 player_health=100 # Camera camera_x=0 camera_y=0 campfire_lit=False campfire_pos=None inventory={"skins":[], "backpacks":[], "flashlights":[]} # Flame Warden (boss with endless HP) flamewarden_health=float('inf') flamewarden_world_x=random.randint(0,WORLD_WIDTH) flamewarden_world_y=random.randint(0,WORLD_HEIGHT) flamewarden_speed=3 flamewarden_size=150 events_triggered=[] phone_open=False minigames_open=False current_minigame=None reflex_score=0 avoid_player_pos=[WIDTH//2,HEIGHT//2] avoid_obstacles=[] puzzle_items=[] puzzle_selected=None campfire_size=60 def day_night_cycle(): elapsed=(time.time()-start_time)%day_length ratio=elapsed/day_length screen.fill(SKYDAY if ratio<0.5 else SKYNIGHT) def world_to_screen(wx, wy): return int(wx - camera_x), int(wy - camera_y) def draw_player(): x = WIDTH//2 - player_size//2 y = HEIGHT//2 - player_size//2 pygame.draw.rect(screen,ORANGE,(x,y,player_size,player_size)) def draw_flamewarden(): sx, sy = world_to_screen(flamewarden_world_x, flamewarden_world_y) pygame.draw.circle(screen,RED,(sx,sy),flamewarden_size) pygame.draw.circle(screen,ORANGE,(sx,sy),flamewarden_size-20) pygame.draw.circle(screen,YELLOW,(sx,sy),flamewarden_size-40) def draw_campfire(): if campfire_lit: sx, sy = world_to_screen(campfire_pos[0], campfire_pos[1]) pygame.draw.circle(screen,ORANGE,(sx,sy),campfire_size) pygame.draw.circle(screen,RED,(sx,sy),campfire_size//2) def move_player(keys): global player_world_x, player_world_y if keys[pygame.K_w]: player_world_y -= player_speed if keys[pygame.K_s]: player_world_y += player_speed if keys[pygame.K_a]: player_world_x -= player_speed if keys[pygame.K_d]: player_world_x += player_speed player_world_x = max(0, min(WORLD_WIDTH, player_world_x)) player_world_y = max(0, min(WORLD_HEIGHT, player_world_y)) def update_camera(): global camera_x, camera_y camera_x = player_world_x - WIDTH//2 camera_y = player_world_y - HEIGHT//2 def flamewarden_ai(): global flamewarden_world_x, flamewarden_world_y dx = player_world_x - flamewarden_world_x dy = player_world_y - flamewarden_world_y dist = max(1,(dx**2 + dy**2)**0.5) flamewarden_world_x += flamewarden_speed * dx / dist flamewarden_world_y += flamewarden_speed * dy / dist def trigger_random_events(): if random.randint(0,300)==1 and "noise" not in events_triggered: print("[EVENT] You hear crackling fire in the distance…") events_triggered.append("noise") def draw_ui(): font=pygame.font.SysFont(None,30) hp=font.render(f"Health: {player_health}",True,WHITE) t=int(time.time()-start_time) tm=font.render(f"Time: {t}s",True,WHITE) screen.blit(hp,(10,10)) screen.blit(tm,(10,40)) def open_avatar_marketplace(): running=True font=pygame.font.SysFont(None,40) while running: screen.fill(DARKGRAY) title=font.render("AVATAR MARKETPLACE",True,WHITE) screen.blit(title,(WIDTH//2-200,50)) menu=font.render("1-Skin 2-Backpack 3-Flashlight ESC-Exit",True,WHITE) screen.blit(menu,(WIDTH//2-300,HEIGHT//2)) pygame.display.flip() for e in pygame.event.get(): if e.type==pygame.QUIT: pygame.quit(); sys.exit() if e.type==pygame.KEYDOWN: if e.key==pygame.K_ESCAPE: return if e.key==pygame.K_1: inventory["skins"].append("Skin_"+str(random.randint(1,200))) print("[MARKET] Skin purchased.") if e.key==pygame.K_2: inventory["backpacks"].append("Backpack_"+str(random.randint(1,100))) print("[MARKET] Backpack purchased.") if e.key==pygame.K_3: inventory["flashlights"].append("Flashlight_"+str(random.randint(1,50))) print("[MARKET] Flashlight purchased.") def phone_interface(): global minigames_open font=pygame.font.SysFont(None,40) while phone_open: screen.fill(BLACK) t=font.render("IN-GAME PHONE",True,WHITE) menu=font.render("Press M for MINIGAMES | ESC to close phone",True,WHITE) screen.blit(t,(WIDTH//2-120,50)) screen.blit(menu,(WIDTH//2-300,HEIGHT//2)) pygame.display.flip() for e in pygame.event.get(): if e.type==pygame.QUIT: pygame.quit(); sys.exit() if e.type==pygame.KEYDOWN: if e.key==pygame.K_ESCAPE: return if e.key==pygame.K_m: minigames_open=True open_minigames() def open_minigames(): font=pygame.font.SysFont(None,40) while minigames_open: screen.fill(DARKGRAY) t=font.render("MINIGAMES",True,WHITE) menu=font.render("1-Reflex 2-Avoid 3-Puzzle ESC-Exit",True,WHITE) screen.blit(t,(WIDTH//2-100,50)) screen.blit(menu,(WIDTH//2-300,HEIGHT//2)) pygame.display.flip() for e in pygame.event.get(): if e.type==pygame.QUIT: pygame.quit(); sys.exit() if e.type==pygame.KEYDOWN: if e.key==pygame.K_ESCAPE: return if e.key==pygame.K_1: play_reflex() if e.key==pygame.K_2: play_avoid() if e.key==pygame.K_3: play_puzzle() def play_reflex(): global reflex_score reflex_score=0 font=pygame.font.SysFont(None,40) running=True while running: screen.fill(BLACK) t=font.render(f"Tap SPACE! Score: {reflex_score}",True,WHITE) screen.blit(t,(WIDTH//2-200,HEIGHT//2)) pygame.display.flip() for e in pygame.event.get(): if e.type==pygame.QUIT: pygame.quit(); sys.exit() if e.type==pygame.KEYDOWN: if e.key==pygame.K_ESCAPE: return if e.key==pygame.K_SPACE: reflex_score+=1 def play_avoid(): global avoid_player_pos, avoid_obstacles avoid_player_pos=[WIDTH//2,HEIGHT//2] avoid_obstacles=[] font=pygame.font.SysFont(None,40) running=True while running: screen.fill(BLACK) pygame.draw.rect(screen,GREEN,(*avoid_player_pos,40,40)) if random.randint(0,10)==1: avoid_obstacles.append([random.randint(0,WIDTH),0]) for o in avoid_obstacles: pygame.draw.rect(screen,RED,(*o,40,40)) o[1]+=7 if abs(o[0]-avoid_player_pos[0])<40 and abs(o[1]-avoid_player_pos[1])<40: return keys=pygame.key.get_pressed() if keys[pygame.K_LEFT]: avoid_player_pos[0]-=7 if keys[pygame.K_RIGHT]: avoid_player_pos[0]+=7 if keys[pygame.K_UP]: avoid_player_pos[1]-=7 if keys[pygame.K_DOWN]: avoid_player_pos[1]+=7 if keys[pygame.K_ESCAPE]: return pygame.display.flip() clock.tick(60) def play_puzzle(): global puzzle_items puzzle_items=[random.randint(1,4) for _ in range(6)] font=pygame.font.SysFont(None,40) running=True while running: screen.fill(DARKGRAY) t=font.render("Forest Puzzle – Match icons! ESC to exit.",True,WHITE) screen.blit(t,(WIDTH//2-300,50)) for i,val in enumerate(puzzle_items): pygame.draw.rect(screen,BLUE,(100+i*150,300,100,100)) pygame.display.flip() for e in pygame.event.get(): if e.type==pygame.QUIT: pygame.quit(); sys.exit() if e.type==pygame.KEYDOWN and e.key==pygame.K_ESCAPE: return while True: if not phone_open: day_night_cycle() keys=pygame.key.get_pressed() move_player(keys) update_camera() flamewarden_ai() trigger_random_events() draw_player() draw_flamewarden() draw_campfire() draw_ui() pygame.display.flip() clock.tick(60) for event in pygame.event.get(): if event.type==pygame.QUIT: pygame.quit(); sys.exit() if event.type==pygame.KEYDOWN: if event.key==pygame.K_f: campfire_lit=True campfire_pos=[player_world_x,player_world_y] print("[INFO] Campfire lit.") if event.key==pygame.K_m: open_avatar_marketplace() if event.key==pygame.K_q: print("[EVENT] Your car ignites and becomes burnt logs.") if event.key==pygame.K_p: phone_open=True phone_interface() phone_open=False

html.cafe - a realtime HTML editor and host

Edit the html in the top panel, see the result here.
Save your page and get a link to view it live, anywhere.