def testMove(self): map = Game(1, 13) bullet = Bullet(0, 0, map, 2, 2, "right") x, y = bullet.currPos self.assertEqual([x, y], [2, 2]) bullet.move() x, y = bullet.currPos self.assertEqual([x, y], [3, 2])
def test_bullet_collision_with_brick(self): terrain = BrickTerrain(150, 150) enemy_bullet = Bullet(150, 141, 5, 500, 1, Direction.DOWN) self.assertFalse(terrain.contains(enemy_bullet)) enemy_bullet.move(); self.assertTrue(terrain.contains(enemy_bullet))
def test_player_tank_collision_with_enemy_bullet(self): # x, y, speed, owner_id, attack, direction enemy_bullet = Bullet(86, 100, 5, 500, 1, Direction.RIGHT) self.assertFalse(self.player.contains(enemy_bullet)) enemy_bullet.move() self.assertFalse(self.player.contains(enemy_bullet)) enemy_bullet.move() self.assertTrue(self.player.contains(enemy_bullet))
class Player(object): def __init__(self, surface): self.gun_type = 1 self.player = pygame.image.load("res/player gunner" + str(self.gun_type) + ".png") self.bullet = Bullet(surface, self.gun_type) self.surface = surface self.player_posx = 100 self.player_posy = 400 self.check_change_gun = 1 self.check = False self.fire_bullet = False self.bullet_posx = 480 def render(self): self.surface.blit(self.player,(self.player_posx, 720 - self.player_posy)) if self.check == True: self.player = pygame.image.load("res/player gunner" + str(self.gun_type) + ".png") def change_weapon(self): if pygame.key.get_pressed()[K_z]: self.gun_type = 1 if pygame.key.get_pressed()[K_x]: self.gun_type = 2 def update(self): self.change_weapon() if self.check_change_gun != self.gun_type: self.check = True self.check_change_gun = self.gun_type else: self.check = False self.fire() self.bullet_posx = self.bullet.bullet_posx def fire(self): if pygame.key.get_pressed()[K_SPACE]: self.fire_bullet = True if self.fire_bullet == True: self.bullet.render() self.bullet.move() else: self.bullet.bullet_posx = 480 if self.bullet.check_bullet() == True: self.fire_bullet = False
class Game: def __init__(self, x, y, size): # Initialize global variables # Set up the screen self.wn = turtle.Screen() self.wn.bgcolor("black") self.wn.title("Space Invaders with Classes :D") # Draw boarder self.border_pen = turtle.Turtle() # Initialize object self.border_pen.speed(0) self.border_pen.color("white") self.border_pen.penup() self.border_pen.setposition(x, y) # Bottom left self.border_pen.pensize(3) self.border_pen.pendown() for side in range(4): self.border_pen.fd(size) self.border_pen.lt(90) # Left turn self.border_pen.hideturtle() # Initialize game def init(self): self.player = Player(x_start, y_start, player_color, player_shape) # Create the player self.bullet = Bullet() self.set_movement() # Create keyboard bindings def set_movement(self): turtle.listen() turtle.onkey( self.player.move_left, "Left") # When pressing left arrow, uses move_left function turtle.onkey( self.player.move_right, "Right") # When pressing left arrow, uses move_left function turtle.onkey(self.bullet.fire, "space") # Main game loop def play(self): self.init() while True: self.bullet.move()
class Game: running = True screen = None background = None player = None bullet = None enemies = None explosion = None caption = None game_text = None score = None stage = None def start(self): pygame.init() self.stage = Stage(self, 1) self.screen = pygame.display.set_mode((800, 600)) self.background = Background(self) self.background.load() self.player = Player(self) self.player.load() self.bullet = Bullet(self) self.bullet.load() self.enemies = Enemies(self) self.enemies.load() self.game_text = GameText(self) self.game_text.load() self.explosion = Explosion(self) self.explosion.load() self.caption = Caption(self) self.caption.load() self.score = Score(self) self.score.load() while self.running: self.screen.fill((0, 0, 0)) self.background.show() self.handle_event() def handle_event(self): for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: self.player.move_left() if event.key == pygame.K_RIGHT: self.player.move_right() if event.key == pygame.K_SPACE: self.bullet.fire(self.player.x, self.player.y) if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: self.player.stop_move() self.player.move() self.bullet.move() self.enemies.move() self.score.show() self.win() pygame.display.update() def win(self): if self.enemies.finished(): self.game_text.show_win() def loose(self): self.game_text.show_loose() def pause(self): pass def show_help(self): pass
def main(): # Jalankan pygame pygame.init() # Instance Object bullet = Bullet('./src/bullet.png', './src/laser.wav', (0, 480)) game_over = GameOver('freesansbold.ttf', 64, (200, 250)) music = Music('./src/background.wav') player = Player('./src/player.png', (370, 480)) score = Score('freesansbold.ttf', 32, (10, 10)) screen = Screen('Space Invaders', './src/background.png', './src/ufo.png', (800, 600)) # Buat Layar display = screen.make_window() screen.make_caption_icon() # Jalankan music music.play_bg_music() # Buat Musuh total_enemy = 6 enemies = [] for i in range(total_enemy): enemies.append(Enemy('./src/enemy.png', './src/explosion.wav')) enemies[i].set_location((0, 735), (50, 150)) # Jalankan Game running = True while running: screen.show_screen(display) # Cek Exit Game for event in pygame.event.get(): running = player.is_exit_game(event) # Pergerakan Player keys = pygame.key.get_pressed() player.move(keys) player.shoot(keys, bullet, display) # Musuh Menang for i in range(total_enemy): if enemies[i].is_enemy_win(): for j in range(total_enemy): enemies[j].gone() game_over.show(display) break enemies[i].move() # Musuh Mati collision = bullet.is_collision(enemies[i]) enemies[i].death(bullet, score, collision) # Summon Musuh enemies[i].draw(display) # Summon Object bullet.move(display) player.draw(display) score.show(display) pygame.display.update()