Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss19:pygame_beispielprogramm_mit_hitbox_eric

Dies ist eine alte Version des Dokuments!


#! /usr/bin/env python

import os import random import pygame

# Class for the orange dude class Player(object):

  
  def __init__(self):
      self.rect = pygame.Rect(32, 32, 16, 16)
  def move(self, dx, dy):
      
      # Move each axis separately. Note that this checks for collisions both times.
      if dx != 0:
          self.move_single_axis(dx, 0)
      if dy != 0:
          self.move_single_axis(0, dy)
  
  def move_single_axis(self, dx, dy):
      
      # Move the rect
      self.rect.x += dx
      self.rect.y += dy
      # If you collide with a wall, move out based on velocity
      for w in range(len(walls)):
          for wall in range(len(walls)):
              if self.rect.colliderect(walls[wall].rect):
                  if dx > 0: # Moving right; Hit the left side of the wall
                      self.rect.right = walls[wall].rect.left
                  if dx < 0: # Moving left; Hit the right side of the wall
                      self.rect.left = walls[wall].rect.right
                  if dy > 0: # Moving down; Hit the top side of the wall
                      self.rect.bottom = walls[wall].rect.top
                  if dy < 0: # Moving up; Hit the bottom side of the wall
                      self.rect.top = walls[wall].rect.bottom
                   #deletes walls   
                  #del walls[wall]
                  #break

# Nice class to hold a wall rect class Wall(object):

  
  def __init__(self, pos):
      walls.append(self)
      self.rect = pygame.Rect(pos[0], pos[1], 16, 16)

# Initialise pygame os.environ[„SDL_VIDEO_CENTERED“] = „1“ pygame.init()

# Set up the display pygame.display.set_caption(„Get to the red square!“) screen = pygame.display.set_mode1)

clock = pygame.time.Clock() walls = [] # List to hold the walls player = Player() # Create the player

# Holds the level layout in a list of strings. level = [ „WWWWWWWWWWWWWWWWWWWW“, „W W“, „W WWWWWW W“, „W WWWW W W“, „W W WWWW W“, „W WWW WWWW W“, „W W W W W“, „W W W WWW WW“, „W WWW WWW W W W“, „W W W W W W“, „WWW W WWWWW W W“, „W W WW W“, „W W WWWW WWW W“, „W W E W W“, „WWWWWWWWWWWWWWWWWWWW“, ] #Generates random level #levelsize = 30

#x = y = 0 #for e in range(levelsize): # for i in range(levelsize): # if random.randint(0,10)⇐5: # Wall2) # else: # end_rect = pygame.Rect(x, y, 16, 16) # x += 16 # y += 16 # x = 0

# Parse the level string above. W = wall, E = exit x = y = 0 for row in level:

  for col in row:
      if col == "W":
          Wall((x, y))
      if col == "E":
          end_rect = pygame.Rect(x, y, 16, 16)
      x += 16
  y += 16
  x = 0

running = True while running:

  
  clock.tick(60)
  
  for e in pygame.event.get():
      if e.type == pygame.QUIT:
          running = False
      if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
          running = False
  
  # Move the player if an arrow key is pressed
  key = pygame.key.get_pressed()
  if key[pygame.K_LEFT]:
      player.move(-10, 0)
  if key[pygame.K_RIGHT]:
      player.move(10, 0)
  if key[pygame.K_UP]:
      player.move(0, -10)
  if key[pygame.K_DOWN]:
      player.move(0, 10)
  
  # Just added this to make it slightly fun ;)
  if player.rect.colliderect(end_rect):
      print("You win!")
      break
  
  # Draw the scene
  screen.fill((0, 0, 0))
  for wall in walls:
      pygame.draw.rect(screen, (255, 0, 255), wall.rect)
  pygame.draw.rect(screen, (255, 0, 0), end_rect)
  pygame.draw.rect(screen, (255, 200, 0), player.rect)
  pygame.display.flip()
  
  #print ("Size: ",len(walls))
1) 500,500
2) x, y
ss19/pygame_beispielprogramm_mit_hitbox_eric.1559045521.txt.gz · Zuletzt geändert: 2019/05/28 14:12 von eric_m