Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import random
- import time
- # Settings
- ticks = 60
- window_size = 800, 600
- player_size = 100, 100
- window_name = 'Game'
- show_hitboxes = False
- debug = False
- bullets = []
- meteors = []
- files = {
- 'background':'background.png',
- 'player':'player.png',
- 'bullet':'bullet.png',
- 'meteor':'meteor.png',
- 'background_music':'music.mp3',
- 'mouse':'mouse.xbm'
- }
- class Player(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.x = 350
- self.y = 500
- self.surface = pygame.image.load(files['player'])
- self.rect = self.surface.get_rect()
- def update(self):
- if show_hitboxes: pygame.draw.rect(self.surface, (255,0,0), self.rect, 1)
- self.rect.topleft = (self.x, self.y)
- window.blit(self.surface, (self.x, self.y))
- def move(self, x = 0, y = 0):
- self.x += x
- self.y += y
- class Bullet(pygame.sprite.Sprite):
- def __init__(self, player):
- pygame.sprite.Sprite.__init__(self)
- bullet_group.add(self)
- self.x = player.x + player_size[0] / 2 - 10
- self.y = player.y
- self.surface = pygame.image.load(files['bullet'])
- self.rect = self.surface.get_rect()
- #print(self, 'I got created')
- def update(self):
- #print(self.x,self.y)
- if show_hitboxes: pygame.draw.rect(self.surface, (255,0,0), self.rect, 1)
- self.rect.topleft = (self.x, self.y)
- self.y -= 5
- window.blit(self.surface, (self.x, self.y))
- self.rect = self.surface.get_rect()
- class Meteor(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- meteor_group.add(self)
- self.x = -100
- self.y = random.randint(0, 200)
- self.surface = pygame.image.load(files['meteor'])
- self.rect = self.surface.get_rect()
- self.speed = random.randint(2,5)
- def update(self):
- if show_hitboxes: pygame.draw.rect(self.surface, (255,0,0), self.rect, 1)
- self.rect.topleft = (self.x, self.y)
- window.blit(self.surface, (self.x, self.y))
- #self.rect = self.surface.get_rect()
- self.x += self.speed
- self.check_collide()
- #self.surface = pygame.transform.rotate(self.surface, random.random()*360)
- # for bullet in bullets:
- # self.rect.colliderect(bullet.rect)
- def hit(self):
- if debug: print(clock.get_time(), self, 'I\'m hit')
- def __del__(self):
- if debug: print(clock.get_time(), self, 'I\'m about to get deleted.')
- meteors.pop(meteors.index(self))
- def check_collide(self):
- pass
- #print(clock.get_time(), bool(pygame.sprite.spritecollideany(self, bullet_group)))
- # Program
- pygame.init()
- window = pygame.display.set_mode(window_size)
- pygame.display.set_caption(window_name)
- background = pygame.image.load(files['background'])
- player = Player()
- #cursor = pygame.cursors.load_xbm(files['mouse'], files['meteor'])
- #pygame.mouse.set_cursor(cursor)
- pygame.mixer.music.load(files['background_music'])
- pygame.mixer.music.play(-1)
- pygame.mixer.music.set_volume(0.25)
- clock = pygame.time.Clock()
- bullet_group = pygame.sprite.Group()
- meteor_group = pygame.sprite.Group()
- font = pygame.font.SysFont(pygame.font.get_default_font(), 40)
- shooted_frame = 30
- shoot_ticker = 0
- pygame.time.set_timer(1, 1000)
- while True:
- shoot_ticker += 1
- #pygame.display.flip()
- pygame.display.update()
- clock.tick(ticks)
- pressed_keys = pygame.key.get_pressed()
- # Controls
- #print(player.x)
- if (pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]) and player.x >= 0:
- if debug: print('Event LEFT')
- player.move(-8)
- elif (pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]) and player.x <= window_size[0] - player_size[0]:
- if debug: print('Event RIGHT')
- player.move(8)
- if pressed_keys[pygame.K_DELETE]:
- for meteor in meteors:
- if debug: print('Deleting:', meteor)
- #for i in range(0,240,20):
- #meteor.surface.set_alpha(240-i*2)
- #print(meteor.surface.get_alpha())
- #meteor.update()
- #time.sleep(0.01)
- meteors.pop(meteors.index(meteor))
- if pressed_keys[pygame.K_SPACE]:
- #print(clock.get_time())
- if shoot_ticker >= 12:
- bullets.append(Bullet(player))
- shoot_ticker = 0
- #else:
- # shooted_frame = clock.get_time()
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- if debug: print('Event QUIT')
- quit()
- elif event.type == 1:
- meteors.append(Meteor())
- #elif event.type == pygame.KDN_SPACE:
- # print('Event')
- window.blit(background, (0,0))
- for bullet in bullets:
- bullet.update()
- if bullet.y < -50:
- bullets.pop(bullets.index(bullet))
- for meteor in meteors:
- meteor.update()
- colliding = []
- window.blit(font.render(str(int(clock.get_fps())), True, (255,255,100)), (0,0))
- hits = pygame.sprite.groupcollide(bullet_group, meteor_group, False, False)
- if hits: print(clock.get_time(), hits)
- #if colliding: print(clock.get_time(), colliding)
- #if colliding:
- # print(colliding)
- player.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement