Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import random
- from pygame.math import Vector2
- width = 1280
- height = 720
- fps = 60
- gameName = "shooter"
- pygame.init()
- purple = (249, 132, 229)
- pink = (219, 112 ,147)
- black = (0, 0, 0)
- grey = (59, 68, 75)
- red = (227, 38, 54)
- imgdir = "./media/img"
- snddir = "./media/snd"
- screen = pygame.display.set_mode((width, height))
- pygame.display.set_caption(gameName)
- icon = pygame.image.load("hotpng.com.png")
- pygame.display.set_icon(icon)
- clock = pygame.time.Clock()
- all_sprites = pygame.sprite.Group()
- mobs = pygame.sprite.Group()
- bullets = pygame.sprite.Group()
- bg = pygame.image.load(imgdir + "/bg1.jpg")
- bg = pygame.transform.scale(bg , (width, height))
- bg_rect = bg.get_rect()
- class Bullet(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.image.load(imgdir + "/shell.png")
- self.image = pygame.transform.scale(self.image, (4, 10))
- self.image = pygame.transform.rotate(self.image, player.angle - 90)
- self.rect = self.image.get_rect()
- self.rect.center = Vector2(player.rect.center)
- self.speed = 30
- self.move = player.direction * self.speed
- def update(self):
- self.rect.center += self.move
- def drawText(screen, text, size, x, y, color,):
- fontname = "./COMIC.TTF"
- font = pygame.font.Font(fontname, size)
- textsprite = font.render(text,True, color)
- text_rect = textsprite.get_rect()
- text_rect.center = (x, y) # Переносим рамку в нужную точку
- screen.blit(textsprite, text_rect)
- class Player(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.image.load(imgdir + "/player/1.png")
- self.image = pygame.transform.scale(self.image, (100, 75))
- self.rect = self.image.get_rect()
- self.rect.center = (width/2, height/2)
- self.points = 0
- self.speed = 5
- self.copy = self.image
- self.position = Vector2(self.rect.center)
- self.angle = 0
- self.direction = Vector2(1, 0)
- self.ammo = 30
- self.anim_speed = 4
- self.frame = 0
- self.anim = []
- for i in range(1, 21):
- image = pygame.image.load(imgdir + f"/player/{i}.png")
- image = pygame.transform.scale(image, (100, 75))
- self.anim.append(image)
- def animation(self):
- self.image = self.anim[self.frame // self.anim_speed]
- self.image = pygame.transform.rotate(self.image, self.angle)
- self.rect = self.image.get_rect(center = self.rect.center)
- self.frame += 1
- if self.frame == self.anim_speed * len(self.anim):
- self.frame = 0
- def rotate(self, rotate_speed):
- self.direction.rotate_ip(-rotate_speed)
- self.angle += rotate_speed
- self.image = pygame.transform.rotate(self.copy, self.angle)
- self.rect = self.image.get_rect(center = self.rect.center)
- def update(self):
- self.animation()
- key = pygame.key.get_pressed()
- if key[pygame.K_RIGHT]:
- self.rotate(-5)
- if key[pygame.K_LEFT]:
- self.rotate(5)
- if key[pygame.K_UP]:
- self.position += self.speed * self.direction
- if key[pygame.K_DOWN]:
- self.position -= self.speed * self.direction
- self.rect.center = self.position
- if self.rect.right > width:
- self.rect.right = width
- if self.rect.left < 0:
- self.rect.left = 0
- if self.rect.top < 0:
- self.rect.top = 0
- if self.rect.bottom > height:
- self.rect.bottom = height
- class Mob_left(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- #self.image = pygame.Surface((30, 30), pygame.SRCALPHA)
- #self.image.fill(black)
- self.image = pygame.image.load(imgdir + "/enemy1/1.png")
- self.image = pygame.transform.scale(self.image, (45, 45))
- self.rect = self.image.get_rect()
- self.rect.x = 0
- self.rect.y = random.randrange(0, height)
- self.speedx = random.randrange(1, 8)
- self.speedy = random.randrange(-8, 8)
- self.copy = self.image
- self.position = Vector2(self.rect.center)
- self.angle = 0
- self.direction = Vector2(0, -1)
- self.anim_speed = 7
- self.frame = 0
- self.anim = []
- for i in range(1, 9):
- image = pygame.image.load(imgdir + f"/enemy1/{i}.png")
- image = pygame.transform.scale(image, (45, 45))
- self.anim.append(image)
- def update(self):
- self.animation()
- self.rotate(-5)
- self.rect.x += self.speedx
- self.rect.y += self.speedy
- if self.rect.right > width or self.rect.y < 0 or self.rect.y > height:
- self.rect.x = 0
- self.rect.y = random.randrange(0, height)
- self.speedx = random.randrange(1, 8)
- self.speedy = random.randrange(-8, 8)
- def animation(self):
- self.image = self.anim[self.frame // self.anim_speed]
- self.image = pygame.transform.rotate(self.image, self.angle)
- self.rect = self.image.get_rect(center = self.rect.center)
- self.frame += 1
- if self.frame == self.anim_speed * len(self.anim):
- self.frame = 0
- def rotate(self, rotate_speed):
- self.direction.rotate_ip(-rotate_speed)
- self.angle += rotate_speed
- self.image = pygame.transform.rotate(self.copy, self.angle)
- self.rect = self.image.get_rect(center = self.rect.center)
- class Mob_right(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- #self.image = pygame.Surface((30, 30))
- #self.image.fill(black)
- self.image = pygame.image.load(imgdir + "/enemy2/1.png")
- self.image = pygame.transform.scale(self.image, (45, 45))
- self.rect = self.image.get_rect()
- self.rect.x = width
- self.rect.y = random.randrange(0, height)
- self.speedx = random.randrange(1, 5)
- self.speedy = random.randrange(-5, 5)
- def update(self):
- self.rect.x += self.speedx
- self.rect.y += self.speedy
- if self.rect.left < width or self.rect.y < 0 or self.rect.y > height:
- self.rect.x = width
- self.rect.y = random.randrange(0, height)
- self.speedx = random.randrange(1, 5)
- self.speedy = random.randrange(-5, 5)
- self.anim_speed = 7
- self.frame = 0
- self.anim = []
- for i in range(1, 9):
- image = pygame.image.load(imgdir + f"/enemy2/{i}.png")
- image = pygame.transform.scale(image, (45, 45))
- self.anim.append(image)
- def animation(self):
- self.image = self.anim[self.frame // self.anim_speed]
- self.image = pygame.transform.rotate(self.image, self.angle)
- self.rect = self.image.get_rect(center=self.rect.center)
- self.frame += 1
- if self.frame == self.anim_speed * len(self.anim):
- self.frame = 0
- class Mob_up(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- #self.image = pygame.Surface((30, 30))
- #self.image.fill(black)
- self.image = pygame.image.load(imgdir + "/enemy3/1.png")
- self.image = pygame.transform.scale(self.image, (45, 45))
- self.rect = self.image.get_rect()
- self.rect.x = random.randrange(0, width)
- self.rect.y = 0
- self.speedx = random.randrange(-8, 8)
- self.speedy = random.randrange(1, 8)
- def update(self):
- self.rect.x += self.speedx
- self.rect.y += self.speedy
- if self.rect.y > height or self.rect.right > width or self.rect.x < 0:
- self.rect.x = random.randrange(0, width)
- self.rect.y = 0
- self.speedx = random.randrange(-8, 8)
- self.speedy = random.randrange(1, 8)
- self.anim_speed = 7
- self.frame = 0
- self.anim = []
- for i in range(1, 9):
- image = pygame.image.load(imgdir + f"/enemy2/{i}.png")
- image = pygame.transform.scale(image, (45, 45))
- self.anim.append(image)
- def animation(self):
- self.image = self.anim[self.frame // self.anim_speed]
- self.image = pygame.transform.rotate(self.image, self.angle)
- self.rect = self.image.get_rect(center=self.rect.center)
- self.frame += 1
- if self.frame == self.anim_speed * len(self.anim):
- self.frame = 0
- class Mob_down(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- #self.image = pygame.Surface((30, 30))
- #self.image.fill(black)
- self.image = pygame.image.load(imgdir + "/enemy5/grenade.png")
- self.image = pygame.transform.scale(self.image, (45, 45))
- self.rect = self.image.get_rect()
- self.rect.x = random.randrange(0, width)
- self.rect.y = height
- self.speedx = random.randrange(0, 5)
- self.speedy = random.randrange(-5, 5)
- def update(self):
- self.rect.x += self.speedx
- self.rect.y += self.speedy
- if self.rect.y < 0 or self.rect.right > width or self.rect.x < 0:
- self.rect.x = random.randrange(0, width)
- self.rect.y = height
- self.speedx = random.randrange(0, 5)
- self.speedy = random.randrange(-5, 5)
- player = Player()
- all_sprites.add(player)
- for i in range(6):
- mob1 = Mob_left()
- all_sprites.add(mob1)
- mobs.add(mob1)
- for i in range(6):
- mob2 = Mob_right()
- all_sprites.add(mob2)
- mobs.add(mob2)
- for i in range(6):
- mob3 = Mob_up()
- all_sprites.add(mob3)
- mobs.add(mob3)
- for i in range(6):
- mob4 = Mob_down()
- all_sprites.add(mob4)
- mobs.add(mob4)
- run = True
- while run:
- clock.tick(fps)
- all_sprites.update()
- hits = pygame.sprite.spritecollide(player, mobs, False)
- shoots = pygame.sprite.groupcollide(bullets, mobs, True, True)
- if shoots:
- player.points += 10
- player.ammo += 3
- screen.blit(bg,bg_rect)
- all_sprites.draw(screen)
- for event in pygame.event.get():
- if event.type ==pygame.QUIT:
- run = False
- if event.type ==pygame.KEYDOWN:
- if event == pygame.K_SPACE and player.ammo > 0:
- bul = Bullet()
- all_sprites.add(bul)
- bullets.add(bul)
- player.ammo -= 1
- drawText(screen, str(player.points), 30, 50, 20, red)
- drawText(screen, str(player.ammo), 30, 50, height-50, purple)
- pygame.display.flip()
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement