Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import randint
- from pygame import*
- win_width = 800
- win_height = 600
- x_start, y_start = 20, 10
- img_file_back = 'cave.png'
- img_file_hero = 'm1.png'
- img_file_enemy = 'enemy.png'
- C_GREEN = (32, 128, 32)
- class Hero(sprite.Sprite):
- def __init__(self, filename, x_speed=0, y_speed=0, x=x_start, y=y_start, width=120, height=120):
- sprite.Sprite.__init__(self)
- self.image = transform.scale(image.load(filename), (width, height)).convert_alpha()
- self.rect = self.image.get_rect()
- self.rect.x = x
- self.rect.y = y
- self.x_speed = x_speed
- self.y_speed = y_speed
- # NEW
- def gravitate(self):
- self.y_speed += 0.25
- def jump(self, y):
- if self.stands_on:
- self.y_speed = y
- def update(self):
- self.rect.x += self.x_speed
- # Touching check: Platforms
- # Just checking, they don't disappear!
- platforms_touched = sprite.spritecollide(self, barriers, False)
- # Processing movement: R
- if self.x_speed > 0:
- for p in platforms_touched:
- self.rect.right = min(self.rect.right, p.rect.left)
- # Processing movement: L
- elif self.x_speed < 0:
- for p in platforms_touched:
- self.rect.left = max(self.rect.left, p.rect.right)
- self.gravitate()
- self.rect.y += self.y_speed
- platforms_touched = sprite.spritecollide(self, barriers, False)
- if self.y_speed > 0:
- for p in platforms_touched:
- self.y_speed = 0
- if p.rect.top < self.rect.bottom:
- self.rect.bottom = p.rect.top
- self.stands_on = p
- elif self.y_speed < 0:
- self.stands_on = False
- for p in platforms_touched:
- self.y_speed = 0
- self.rect.top = max(self.rect.top, p.rect.bottom)
- class Wall(sprite.Sprite):
- def __init__(self, x=20, y=0, width=120, height=120, color=C_GREEN):
- sprite.Sprite.__init__(self)
- self.image = Surface([width, height])
- self.image.fill(color)
- self.rect = self.image.get_rect()
- self.rect.x = x
- self.rect.y = y
- class Enemy(sprite.Sprite):
- def __init__(self, x=20, y=0, filename=img_file_enemy, width=100, height=100):
- sprite.Sprite.__init__(self)
- self.image = transform.scale(image.load(filename), (width, height)).convert_alpha()
- self.rect = self.image.get_rect()
- self.rect.x = x
- self.rect.y = y
- # NEW
- def update(self):
- self.rect.x += randint(-5, 5)
- self.rect.y += randint(-5, 5)
- display.set_caption("ARCADE")
- window = display.set_mode([win_width, win_height])
- back = transform.scale(image.load(img_file_back).convert(), (win_width, win_height))
- all_sprites = sprite.Group()
- barriers = sprite.Group()
- enemies = sprite.Group()
- player = Hero(img_file_hero)
- all_sprites.add(player)
- w1 = Wall(50, 150, 480, 20)
- barriers.add(w1)
- all_sprites.add(w1)
- w2 = Wall(700, 50, 50, 360)
- barriers.add(w2)
- all_sprites.add(w2)
- w3 = Wall(350, 380, 640, 20)
- barriers.add(w3)
- all_sprites.add(w3)
- w4 = Wall(-200, 590, 1600, 20)
- barriers.add(w4)
- all_sprites.add(w4)
- e1 = Enemy(50, 480)
- all_sprites.add(e1)
- enemies.add(e1)
- e2 = Enemy(400, 480)
- all_sprites.add(e2)
- enemies.add(e2)
- run = True
- finished = False
- while run:
- for e in event.get():
- if e.type == QUIT:
- run = False
- elif e.type == KEYDOWN:
- if e.key == K_LEFT:
- player.x_speed = -5
- elif e.key == K_RIGHT:
- player.x_speed = 5
- elif e.key == K_UP:
- player.jump(-7)
- elif e.type == KEYUP:
- if e.key == K_LEFT:
- player.x_speed = 0
- elif e.key == K_RIGHT:
- player.x_speed = 0
- if not finished:
- window.blit(back, (0,0))
- all_sprites.update()
- all_sprites.draw(window)
- display.update()
- time.delay(20)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement