Skip to content

Instantly share code, notes, and snippets.

@pathunstrom
Created December 30, 2017 02:20
Show Gist options
  • Save pathunstrom/ee8995a3a2d3e163443fedcced8f1b6d to your computer and use it in GitHub Desktop.
Save pathunstrom/ee8995a3a2d3e163443fedcced8f1b6d to your computer and use it in GitHub Desktop.
Ballistic bullets
import pygame, sys
import math
from ppb_vector import Vector2 as Vector
#Colours
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (217, 231, 249)
GOLD = (255, 255, 0)
PURPLE = (202, 90, 155)
GREEN = (23, 210, 155)
width = 800
height = 600
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode([width, height])
pygame.display.set_caption('Tanks')
running = True
#x_speed = 0
#y_speed = 0
#STEP = 5
#SPEED = 5
initial = 10
theta = math.pi/6
#time=t
dt=1
GRAVITY = Vector(0, 9)
# class for players
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface([50, 30])
self.image.fill(BLACK)
self.rect = self.image.get_rect()
self.rect.x = 575
self.rect.y = 400
self.speedx = 0
self.score = 0
def update(self, *args):
self.speedx = 0
pressed = pygame.key.get_pressed()
if pressed[pygame.K_RIGHT]:
self.speedx = 5
if pressed[pygame.K_LEFT]:
self.speedx = -5
if self.rect.left < 405:
self.rect.left = 405
if self.rect.right > 800:
self.rect.right = 800
self.rect.x += self.speedx
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.top)
all_sprites_list.add(bullet)
bullets.add(bullet)
class Player2(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface([50, 30])
self.image.fill(BLACK)
self.rect = self.image.get_rect()
self.rect.x = 180
self.rect.y = 400
self.speedx = 0
self.score = 0
def update(self, *args):
self.speedx = 0
pressed = pygame.key.get_pressed()
if pressed[pygame.K_d]:
self.speedx = 5
if pressed[pygame.K_a]:
self.speedx = -5
if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > 375:
self.rect.right = 375
self.rect.x += self.speedx
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.top)
all_sprites_list.add(bullet)
bullets.add(bullet)
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
print(f"Init Bullet {x}, {y}")
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface([10,10])
self.image.fill(BLACK)
self.position = Vector(x, y)
self.velocity_vector = Vector(-1, -1).normalize() * 75
self.rect = self.image.get_rect()
self.rect.center = tuple(self.position)
self.friction = .9922
def update(self, time_delta):
self.velocity_vector = ((self.velocity_vector) + (GRAVITY * time_delta)) * self.friction
self.position += self.velocity_vector * time_delta
self.rect.center = tuple(self.position)
print(f"Bullet at {self.position.x}, {self.position.y}")
if self.rect.left < 0 or self.rect.right> 800:
self.kill()
if self.rect.top > 500:
self.kill()
all_sprites_list = pygame.sprite.Group()
bullets = pygame.sprite.Group()
Player1 = Player()
Player2 = Player2()
all_sprites_list.add(Player1)
all_sprites_list.add(Player2)
running = True
# MAIN LOOP
while running:
time_delta = clock.tick(60) / 1000
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
Player1.shoot()
if event.key == pygame.K_q:
Player2.shoot()
screen.fill(BLUE)
pygame.draw.rect(screen, GREEN, (0, 430, 800, 170))
pygame.draw.rect(screen, GREEN, (375, 330, 30, 100))
all_sprites_list.update(time_delta)
all_sprites_list.draw(screen)
pygame.display.flip()
pygame.quit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment