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"}]