Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import os
- import sys
- import random
- from pygame.locals import *
- WHITE = (255, 255, 255)
- BLACK = (0, 0, 0)
- width = 1067
- height = 600
- # tao khung hien thi game
- display_surf = pygame.display.set_mode((width, height))
- pygame.display.set_caption("Game Shooter")
- fps = 5 # so frame tren giay
- fps_clock = pygame.time.Clock()
- class Chicken:
- def __init__(self, position, radius):
- self.position = position
- self.radius = radius
- def draw(self):
- for element in self.position:
- center = map(int, element)
- pygame.draw.circle(display_surf, WHITE, tuple(center), self.radius)
- def spawn(self):
- x = random.randrange(10, width - 10)
- self.position.append([x, 0])
- def move(self, speed):
- for element in range(len(self.position)):
- self.position[element][1] += speed
- class Bullet:
- def __init__(self, position, radius):
- self.position = position
- self.radius = radius
- def draw(self):
- for element in self.position:
- center = map(int, element)
- pygame.draw.circle(display_surf, WHITE, tuple(center), self.radius)
- def spawn(self, x, y):
- self.position.append([x, y])
- def move(self, speed):
- for element in range(len(self.position)):
- self.position[element][1] -= speed
- class Ship:
- def __init__(self, w, h, x, y, speed):
- self.width = w
- self.height = h
- self.x = x
- self.y = y
- self.dir_x = 1
- self.dir_y = 0
- self.speed = speed
- def draw(self):
- pygame.draw.rect(display_surf, WHITE, (self.x, self.y, self.width, self.height))
- def move(self):
- self.x = self.x + self.x * self.dir_x * self.speed
- self.y = self.y + self.y * self.dir_y * self.speed
- def shoot(self, bullet):
- bullet.x = self.x
- bullet.y = self.y
- bullet.draw()
- bullet.move(5)
- class Scoreboard:
- def __init__(self, x, y, font, size, score):
- self.x = x
- self.y = y
- self.font = font
- self.size = size
- self.score = score
- def display(self):
- font = pygame.font.Font(self.font, self.size)
- display_score = font.render("Score: " + str(self.score), True, WHITE)
- display_surf.blit(display_score, (self.x, self.y))
- class Game:
- def __init__(self, ship, chicken, bullet, scoreboard, speed):
- self.ship = ship
- self.chicken = chicken
- self.bullet = bullet
- self.scoreboard = scoreboard
- self.speed = speed
- def draw_arena(self):
- display_surf.fill(BLACK)
- pygame.draw.rect(display_surf, WHITE, (0, 0, width, height), 10)
- self.ship.draw()
- self.chicken.draw()
- self.bullet.draw()
- self.scoreboard.display()
- def bullet_hit_chicken(self):
- for element in range(len(self.chicken.position)):
- for _bullet in range(len(self.bullet.position)):
- if self.bullet.position[_bullet][0] == int(self.chicken.position[element][0]) and \
- self.bullet.position[_bullet][1] == int(self.chicken.position[element][1]):
- self.chicken.position.pop(element)
- self.bullet.position.pop(_bullet)
- self.scoreboard.score += 10
- def ship_hit_floor(self):
- if self.ship.y >= height:
- self.ship.y = height
- elif self.ship.y <= 0:
- self.ship.y = 0
- elif self.ship.x >= width:
- self.ship.x = width
- elif self.ship.x <= 0:
- self.ship.x = 0
- def ship_hit_chicken(self):
- for element in range(len(self.chicken.position)):
- if self.ship.x == int(self.chicken.position[element][0]) and self.ship.y == int(self.chicken.position[element][0]):
- return True
- return False
- def chicken_hit_floor(self):
- for _chicken in range(len(self.chicken.position)):
- if self.chicken.position[_chicken][1] >= height:
- return True
- return False
- def update(self):
- self.chicken.move(1)
- self.bullet.move(1)
- self.chicken.spawn()
- self.ship.move()
- for new_bullet in range(len(self.bullet.position)):
- if self.bullet.position[new_bullet][1] <= 0:
- self.bullet.position.pop(new_bullet)
- self.bullet.spawn(self.ship.x, self.ship.y)
- self.bullet_hit_chicken()
- self.ship_hit_floor()
- def main():
- pygame.init()
- ship = Ship(50, 50, width/2, height/2, 1)
- chicken = Chicken([[0, 0]], 20)
- bullet = Bullet([[width/2, height]], 10)
- scoreboard = Scoreboard(width - 100, 10, None, 30, 0)
- die = False
- game = Game(ship, chicken, bullet, scoreboard, 1)
- while True:
- if game.ship_hit_chicken() or game.chicken_hit_floor():
- die = True
- for event in pygame.event.get():
- if event.type == pygame.QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
- pygame.quit()
- sys.exit()
- elif event.type == KEYDOWN and event.key == K_a:
- ship.dir_y = 0
- ship.dir_x = -1
- elif event.type == KEYDOWN and event.key == K_d:
- ship.dir_y = 0
- ship.dir_x = 1
- elif event.type == KEYDOWN and event.key == K_w:
- ship.dir_y = -1
- ship.dir_x = 0
- elif event.type == KEYDOWN and event.key == K_s:
- ship.dir_y = 1
- ship.dir_x = 0
- if die:
- pygame.quit()
- sys.exit()
- game.draw_arena()
- game.update()
- pygame.display.update()
- fps_clock.tick(fps)
- if __name__ == "__main__":
- main()
Add Comment
Please, Sign In to add comment