py

pygame default spiel

Keine Vorschau vorhanden

Code-Snapshot

Dies ist der veröffentlichte Zustand. Spätere Änderungen am Code überschreiben diese Veröffentlichung nicht automatisch.

[{"text":"Projekt","spriteCssClass":"fa fa-folder","code":null,"isMain":null,"items":[{"text":"main.py","spriteCssClass":"fa fa-file-code-o","code":"import pygame\nfrom pygame.locals import *\n\npygame.init()\n\nWIDTH = 320\nHEIGHT = 200\nscreen = pygame.display.set_mode((WIDTH, HEIGHT))\npygame.display.set_caption('Projekt-Labor')\n\nclock = pygame.time.Clock()\nfont = pygame.font.Font(None, 18)\nbig_font = pygame.font.Font(None, 28)\n\n# ------------------------------------------------------------\n# Dieses Projekt ist eine offene Spiel- und App-Vorlage.\n# Es startet bereits mit Bewegung, Kollision, Punkten, Ziel und Partikeln.\n# Viele Systeme sind absichtlich noch einfach gehalten.\n# Nutze die TODO-Stellen, um daraus dein eigenes Spiel zu bauen.\n# ------------------------------------------------------------\n\nSTATE_PLAYING = 'playing'\nSTATE_GAME_OVER = 'game_over'\n\ngame_state = STATE_PLAYING\nrunning = True\n\n# Spieler: Position wird in normalen Zahlen gespeichert.\nplayer_x = 50\nplayer_y = 100\nplayer_w = 14\nplayer_h = 14\nplayer_speed = 2.0\nplayer_color = (80, 220, 255)\n\nmove_left = False\nmove_right = False\nmove_up = False\nmove_down = False\n\n# Zielobjekt: Einsammeln gibt Punkte.\ngoal_x = 250\ngoal_y = 100\ngoal_size = 12\n\nscore = 0\ntimer = 45 * 100\nflash_timer = 0\n\n# Hindernisse: Diese Liste kann später zu Gegnern, Schaltern oder Wänden werden.\nobstacles = [\n    {'x': 130, 'y': 35, 'w': 18, 'h': 130, 'vx': 0.7},\n    {'x': 190, 'y': 20, 'w': 12, 'h': 70, 'vx': -0.5}\n]\n\n# Partikel werden als kleine Daten-Dictionaries gespeichert.\nparticles = []\n\n# Maus-Zielmarker: Schon vorhanden, aber noch nicht für alle Ideen genutzt.\nmouse_x = WIDTH / 2\nmouse_y = HEIGHT / 2\nmouse_active = False\n\n\ndef make_rect(x, y, w, h):\n    rect = pygame.Rect(0, 0, w, h)\n    rect.topleft = (x, y)\n    return rect\n\n\ndef reset_round():\n    global player_x, player_y, goal_x, goal_y, score, timer, game_state, particles\n    player_x = 50\n    player_y = 100\n    goal_x = 250\n    goal_y = 100\n    score = 0\n    timer = 45 * 100\n    game_state = STATE_PLAYING\n    particles = []\n\n\ndef add_burst(x, y, amount):\n    # TODO: Experimentiere mit anderen Formen, Farben und Bewegungen.\n    i = 0\n    while i < amount:\n        vx = (i % 5) - 2\n        vy = (i % 3) - 1\n        particles.append({'x': x, 'y': y, 'vx': vx * 0.7, 'vy': vy * 0.7, 'life': 25})\n        i += 1\n\n\ndef move_goal():\n    global goal_x, goal_y\n    goal_x = 25 + (score * 47) % (WIDTH - 50)\n    goal_y = 30 + (score * 31) % (HEIGHT - 60)\n\n\ndef update_player():\n    global player_x, player_y\n    old_x = player_x\n    old_y = player_y\n\n    if move_left:\n        player_x -= player_speed\n    if move_right:\n        player_x += player_speed\n    if move_up:\n        player_y -= player_speed\n    if move_down:\n        player_y += player_speed\n\n    if player_x < 0:\n        player_x = 0\n    if player_x > WIDTH - player_w:\n        player_x = WIDTH - player_w\n    if player_y < 22:\n        player_y = 22\n    if player_y > HEIGHT - player_h:\n        player_y = HEIGHT - player_h\n\n    player_rect = make_rect(player_x, player_y, player_w, player_h)\n    for obstacle in obstacles:\n        obstacle_rect = make_rect(obstacle['x'], obstacle['y'], obstacle['w'], obstacle['h'])\n        if player_rect.colliderect(obstacle_rect):\n            # Ein sehr einfacher Kollisions-Ruecksprung.\n            # TODO: Verbessere das Kollisionsgefuehl.\n            player_x = old_x\n            player_y = old_y\n            add_burst(player_x + player_w / 2, player_y + player_h / 2, 6)\n\n\ndef update_obstacles():\n    for obstacle in obstacles:\n        obstacle['x'] += obstacle['vx']\n        if obstacle['x'] < 10 or obstacle['x'] > WIDTH - obstacle['w'] - 10:\n            obstacle['vx'] = -obstacle['vx']\n\n\ndef update_particles():\n    remove_list = []\n    for particle in particles:\n        particle['x'] += particle['vx']\n        particle['y'] += particle['vy']\n        particle['life'] -= 1\n        if particle['life'] <= 0:\n            remove_list.append(particle)\n    for particle in remove_list:\n        if particle in particles:\n            particles.remove(particle)\n\n\ndef update_game():\n    global score, flash_timer, timer, game_state\n    if game_state != STATE_PLAYING:\n        return\n\n    timer -= 1\n    if timer <= 0:\n        timer = 0\n        game_state = STATE_GAME_OVER\n\n    update_player()\n    update_obstacles()\n    update_particles()\n\n    player_rect = make_rect(player_x, player_y, player_w, player_h)\n    goal_rect = make_rect(goal_x, goal_y, goal_size, goal_size)\n    if player_rect.colliderect(goal_rect):\n        score += 1\n        flash_timer = 10\n        add_burst(goal_x + goal_size / 2, goal_y + goal_size / 2, 14)\n        move_goal()\n\n    if flash_timer > 0:\n        flash_timer -= 1\n\n\ndef draw_hud():\n    pygame.draw.rect(screen, (20, 24, 35), pygame.Rect(0, 0, WIDTH, 22))\n    score_text = font.render('Punkte: %d' % score, True, (240, 240, 240))\n    time_text = font.render('Zeit: %d' % (timer / 100), True, (240, 240, 240))\n    screen.blit(score_text, (6, 4))\n    screen.blit(time_text, (230, 4))\n\n\ndef draw_game():\n    screen.fill((11, 13, 23))\n\n    # Hintergrundraster fuer Labor-Gefuehl.\n    x = 0\n    while x < WIDTH:\n        pygame.draw.line(screen, (20, 25, 40), (x, 22), (x, HEIGHT))\n        x += 20\n    y = 22\n    while y < HEIGHT:\n        pygame.draw.line(screen, (20, 25, 40), (0, y), (WIDTH, y))\n        y += 20\n\n    if mouse_active:\n        pygame.draw.circle(screen, (90, 90, 140), (mouse_x, mouse_y), 8, 1)\n\n    # Ziel\n    goal_rect = make_rect(goal_x, goal_y, goal_size, goal_size)\n    pygame.draw.rect(screen, (255, 210, 70), goal_rect)\n    pygame.draw.rect(screen, (255, 255, 180), goal_rect, 1)\n\n    # Hindernisse\n    for obstacle in obstacles:\n        obstacle_rect = make_rect(obstacle['x'], obstacle['y'], obstacle['w'], obstacle['h'])\n        pygame.draw.rect(screen, (255, 90, 110), obstacle_rect)\n\n    # Partikel\n    for particle in particles:\n        pygame.draw.circle(screen, (120, 230, 255), (particle['x'], particle['y']), 2)\n\n    # Spieler\n    player_rect = make_rect(player_x, player_y, player_w, player_h)\n    pygame.draw.rect(screen, player_color, player_rect)\n    pygame.draw.rect(screen, (230, 255, 255), player_rect, 1)\n\n    if flash_timer > 0:\n        pygame.draw.circle(screen, (255, 255, 180), (player_x + player_w / 2, player_y + player_h / 2), 18, 1)\n\n    draw_hud()\n\n    hint = font.render('Pfeile/WASD bewegen, Maus setzt Marker, R startet neu', True, (150, 160, 190))\n    screen.blit(hint, (6, HEIGHT - 16))\n\n    if game_state == STATE_GAME_OVER:\n        overlay = pygame.Rect(30, 55, 260, 90)\n        pygame.draw.rect(screen, (18, 20, 32), overlay)\n        pygame.draw.rect(screen, (255, 210, 70), overlay, 2)\n        title = big_font.render('Zeit vorbei!', True, (255, 230, 130))\n        info = font.render('Baue jetzt dein eigenes Spiel daraus.', True, (230, 230, 240))\n        restart = font.render('Druecke R fuer Neustart.', True, (190, 210, 255))\n        screen.blit(title, (95, 68))\n        screen.blit(info, (52, 103))\n        screen.blit(restart, (92, 128))\n\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n\n        elif event.type == pygame.KEYDOWN:\n            if event.key == K_LEFT or event.key == K_a:\n                move_left = True\n            elif event.key == K_RIGHT or event.key == K_d:\n                move_right = True\n            elif event.key == K_UP or event.key == K_w:\n                move_up = True\n            elif event.key == K_DOWN or event.key == K_s:\n                move_down = True\n            elif event.key == K_r:\n                reset_round()\n\n        elif event.type == pygame.KEYUP:\n            if event.key == K_LEFT or event.key == K_a:\n                move_left = False\n            elif event.key == K_RIGHT or event.key == K_d:\n                move_right = False\n            elif event.key == K_UP or event.key == K_w:\n                move_up = False\n            elif event.key == K_DOWN or event.key == K_s:\n                move_down = False\n\n        elif event.type == pygame.MOUSEBUTTONDOWN:\n            mouse_active = True\n            pos = pygame.mouse.get_pos()\n            mouse_x = pos[0]\n            mouse_y = pos[1]\n            add_burst(mouse_x, mouse_y, 8)\n\n        elif event.type == pygame.MOUSEMOTION:\n            if mouse_active:\n                pos = pygame.mouse.get_pos()\n                mouse_x = pos[0]\n                mouse_y = pos[1]\n\n    update_game()\n    draw_game()\n    pygame.display.update()\n    clock.tick(60)\n\npygame.quit()\n","isMain":true,"items":[],"id":"_rb0y7oe7n"}],"id":"_9d4fbzu8o"}]