Guest User

Untitled

a guest
Feb 24th, 2025
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.43 KB | None | 0 0
  1. import pygame
  2. import sys
  3.  
  4. # Pygame initialisieren
  5. pygame.init()
  6.  
  7. # **Fullscreen-Modus aktivieren**
  8. W, H = pygame.display.Info().current_w, pygame.display.Info().current_h
  9. fenster = pygame.display.set_mode((W, H), pygame.FULLSCREEN)
  10. pygame.display.set_caption("Jump and Run")
  11.  
  12. # **Hintergrund laden**
  13. hintergrund = pygame.image.load("C:/PythonProgramme/Bilder/hintergrund.png").convert()
  14. hintergrund = pygame.transform.scale(hintergrund, (W, H))
  15.  
  16. # Konstanten für die Spielwelt
  17. BODEN_OFFSET = 180 # Passe diesen Wert an, bis der Charakter auf dem gezeichneten Boden steht
  18. BODEN_Y = H - BODEN_OFFSET # Der neue Boden ist nun höher als der Bildschirmrand
  19.  
  20. # **Plattformen definieren** - Positionen relativ zum neuen Boden
  21. plattformen = [
  22. pygame.Rect(W // 4, BODEN_Y - 200, 200, 20), # Erste Plattform
  23. pygame.Rect(W // 2, BODEN_Y - 350, 200, 20), # Zweite Plattform
  24. pygame.Rect(3 * W // 4, BODEN_Y - 500, 200, 20), # Dritte Plattform
  25. ]
  26.  
  27. # **Animationen laden**
  28. charakter_animationen = {
  29. "idle": [pygame.image.load("C:/PythonProgramme/Bilder/idle.png").convert_alpha()],
  30. "laufen": [
  31. pygame.image.load("C:/PythonProgramme/Bilder/laufen_1.png").convert_alpha(),
  32. pygame.image.load("C:/PythonProgramme/Bilder/laufen_2.png").convert_alpha(),
  33. ],
  34. "rennen": [
  35. pygame.image.load("C:/PythonProgramme/Bilder/rennen_1.png").convert_alpha(),
  36. pygame.image.load("C:/PythonProgramme/Bilder/rennen_2.png").convert_alpha(),
  37. ],
  38. "schleichen": [
  39. pygame.image.load("C:/PythonProgramme/Bilder/schleichen_1.png").convert_alpha(),
  40. pygame.image.load("C:/PythonProgramme/Bilder/schleichen_2.png").convert_alpha(),
  41. ],
  42. "springen": [pygame.image.load("C:/PythonProgramme/Bilder/springen.png").convert_alpha()],
  43. }
  44.  
  45. # **Charaktergröße beibehalten (700x550)**
  46. CHARAKTER_BREITE = 700
  47. CHARAKTER_HOEHE = 550
  48. for key in charakter_animationen:
  49. charakter_animationen[key] = [
  50. pygame.transform.smoothscale(img, (CHARAKTER_BREITE, CHARAKTER_HOEHE)) for img in charakter_animationen[key]
  51. ]
  52.  
  53. # **Startposition des Charakters**
  54. start_x = W // 4
  55. spieler_rect = pygame.Rect(0, 0, CHARAKTER_BREITE, CHARAKTER_HOEHE) # Größe beibehalten
  56. spieler_rect.bottom = BODEN_Y
  57. spieler_rect.x = start_x
  58.  
  59. # Kollisionsbox-Offset (anpassen nach Bedarf)
  60. KOLLISION_OFFSET_X = 250 # Offset von links
  61. KOLLISION_BREITE = 70 # Breite der Kollisionsbox
  62. KOLLISION_HOEHE = 100 # Höhe der Kollisionsbox
  63.  
  64. # **Geschwindigkeiten**
  65. geschwindigkeit = 5
  66. laufgeschwindigkeit = 10
  67. schleichgeschwindigkeit = 3
  68. luftgeschwindigkeit = 4
  69.  
  70. # **Animation & Bewegung**
  71. aktueller_status = "idle"
  72. aktuelles_bild_index = 0
  73. letztes_update = pygame.time.get_ticks()
  74. animations_speed = 200
  75. richtung_links = False
  76.  
  77. # **Sprungvariablen**
  78. springt = False
  79. sprunghöhe = 18
  80. schwerkraft = 0.8
  81. y_geschwindigkeit = 0
  82.  
  83. # **Kollisionsbox des Spielers**
  84. def get_kollisionsbox():
  85. if richtung_links:
  86. # Wenn der Charakter nach links schaut, Offset von rechts berechnen
  87. return pygame.Rect(
  88. spieler_rect.right - (KOLLISION_OFFSET_X + KOLLISION_BREITE),
  89. spieler_rect.bottom - KOLLISION_HOEHE,
  90. KOLLISION_BREITE,
  91. KOLLISION_HOEHE
  92. )
  93. else:
  94. # Wenn der Charakter nach rechts schaut
  95. return pygame.Rect(
  96. spieler_rect.x + KOLLISION_OFFSET_X,
  97. spieler_rect.bottom - KOLLISION_HOEHE,
  98. KOLLISION_BREITE,
  99. KOLLISION_HOEHE
  100. )
  101.  
  102. # **Kollisionserkennung für Plattformen**
  103. def auf_plattform():
  104. kollisionsbox = get_kollisionsbox()
  105. fußbox = pygame.Rect(
  106. kollisionsbox.x,
  107. kollisionsbox.bottom - 10,
  108. kollisionsbox.width,
  109. 20
  110. )
  111.  
  112. for plattform in plattformen:
  113. if fußbox.colliderect(plattform):
  114. return plattform
  115. if kollisionsbox.bottom >= BODEN_Y:
  116. return "boden"
  117. return None
  118.  
  119. # DEBUG: Hilfsfunktion zum Zeichnen der Kollisionsbox
  120. def zeichne_kollisionsbox():
  121. kollisionsbox = get_kollisionsbox()
  122. pygame.draw.rect(fenster, (255, 0, 0), kollisionsbox, 2) # Rote Box
  123. fußbox = pygame.Rect(
  124. kollisionsbox.x,
  125. kollisionsbox.bottom - 10,
  126. kollisionsbox.width,
  127. 20
  128. )
  129. pygame.draw.rect(fenster, (0, 255, 0), fußbox, 2) # Grüne Box für Füße
  130.  
  131. # **Spiel-Loop**
  132. running = True
  133. while running:
  134. for event in pygame.event.get():
  135. if event.type == pygame.QUIT:
  136. running = False
  137. if event.type == pygame.KEYDOWN and event.key == pygame.K_F11:
  138. pygame.display.toggle_fullscreen()
  139.  
  140. tasten = pygame.key.get_pressed()
  141. neues_status = "idle"
  142.  
  143. # **Springen**
  144. plattform_kollision = auf_plattform()
  145. if tasten[pygame.K_UP] and plattform_kollision:
  146. springt = True
  147. y_geschwindigkeit = -sprunghöhe
  148.  
  149. # **Bewegung während Sprung und Fallen**
  150. spieler_rect.y += y_geschwindigkeit
  151. y_geschwindigkeit += schwerkraft
  152.  
  153. # **Bewegung und Status-Updates**
  154. if not springt:
  155. if tasten[pygame.K_LEFT] and tasten[pygame.K_LSHIFT]:
  156. spieler_rect.x -= laufgeschwindigkeit
  157. neues_status = "rennen"
  158. richtung_links = True
  159. elif tasten[pygame.K_RIGHT] and tasten[pygame.K_LSHIFT]:
  160. spieler_rect.x += laufgeschwindigkeit
  161. neues_status = "rennen"
  162. richtung_links = False
  163. elif tasten[pygame.K_LEFT]:
  164. spieler_rect.x -= schleichgeschwindigkeit if tasten[pygame.K_DOWN] else geschwindigkeit
  165. neues_status = "schleichen" if tasten[pygame.K_DOWN] else "laufen"
  166. richtung_links = True
  167. elif tasten[pygame.K_RIGHT]:
  168. spieler_rect.x += schleichgeschwindigkeit if tasten[pygame.K_DOWN] else geschwindigkeit
  169. neues_status = "schleichen" if tasten[pygame.K_DOWN] else "laufen"
  170. richtung_links = False
  171. else:
  172. if tasten[pygame.K_LEFT]:
  173. spieler_rect.x -= luftgeschwindigkeit
  174. richtung_links = True
  175. if tasten[pygame.K_RIGHT]:
  176. spieler_rect.x += luftgeschwindigkeit
  177. richtung_links = False
  178. neues_status = "springen"
  179.  
  180. # **Plattform-Kollision überprüfen**
  181. plattform_kollision = auf_plattform()
  182. if plattform_kollision:
  183. if plattform_kollision == "boden":
  184. spieler_rect.bottom = BODEN_Y
  185. y_geschwindigkeit = 0
  186. springt = False
  187. else:
  188. spieler_rect.bottom = plattform_kollision.top
  189. y_geschwindigkeit = 0
  190. springt = False
  191. elif spieler_rect.bottom >= BODEN_Y: # Überprüfen, ob der Boden erreicht wurde
  192. springt = False
  193. y_geschwindigkeit = 0
  194.  
  195. # **Animation aktualisieren**
  196. if neues_status != aktueller_status:
  197. aktueller_status = neues_status
  198. aktuelles_bild_index = 0
  199. letztes_update = pygame.time.get_ticks()
  200.  
  201. # **Frame-Wechsel für Animation**
  202. jetzt = pygame.time.get_ticks()
  203. if jetzt - letztes_update > animations_speed:
  204. aktuelles_bild_index += 1
  205. if aktuelles_bild_index >= len(charakter_animationen[aktueller_status]):
  206. aktuelles_bild_index = 0
  207. letztes_update = jetzt
  208.  
  209. # **Figur im Fenster halten**
  210. if spieler_rect.left < 0:
  211. spieler_rect.left = 0
  212. if spieler_rect.right > W:
  213. spieler_rect.right = W
  214.  
  215. # **Zeichnen**
  216. fenster.blit(hintergrund, (0, 0))
  217.  
  218. # Plattformen zeichnen
  219. for plattform in plattformen:
  220. pygame.draw.rect(fenster, (100, 100, 100), plattform)
  221.  
  222. # **Charakter zeichnen**
  223. aktuelles_bild = charakter_animationen[aktueller_status][aktuelles_bild_index]
  224. if richtung_links:
  225. aktuelles_bild = pygame.transform.flip(aktuelles_bild, True, False)
  226.  
  227. # Berechne die Position des Charakterbildes relativ zur Kollisionsbox
  228. kollisionsbox = get_kollisionsbox()
  229. charakter_y = kollisionsbox.bottom - aktuelles_bild.get_height() + 180 # Charakter sitzt auf der Kollisionsbox
  230. charakter_x = kollisionsbox.centerx - (aktuelles_bild.get_width() // 2) # Charakter ist zentriert über der Kollisionsbox
  231.  
  232. # Zeichne den Charakter an der berechneten Position
  233. fenster.blit(aktuelles_bild, (charakter_x, charakter_y))
  234.  
  235. # Debug: Kollisionsbox zeichnen (zum Testen)
  236. zeichne_kollisionsbox()
  237.  
  238. pygame.display.flip()
  239. pygame.time.Clock().tick(60)
  240.  
  241. pygame.quit()
  242. sys.exit()
  243.  
Add Comment
Please, Sign In to add comment