You've already forked juegos-python
Create repo
This commit is contained in:
223
Space_Invaders/space invaders.py
Normal file
223
Space_Invaders/space invaders.py
Normal file
@@ -0,0 +1,223 @@
|
||||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
# Space Invaders
|
||||
# Language - Python
|
||||
# Modules - pygame, sys, time
|
||||
#
|
||||
# Controls - Left and Right Keys to Move, Space to shoot
|
||||
#
|
||||
# By - Jatin Kumar Mandav
|
||||
#
|
||||
# Website - https://jatinmandav.wordpress.com
|
||||
#
|
||||
# YouTube Channel - https://www.youtube.com/channel/UCdpf6Lz3V357cIZomPwjuFQ
|
||||
# Twitter - @jatinmandav
|
||||
#
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
import pygame
|
||||
import sys
|
||||
import time
|
||||
|
||||
# -------------- Initialization ------------
|
||||
pygame.init()
|
||||
|
||||
width = 700
|
||||
height = 500
|
||||
|
||||
display = pygame.display.set_mode((width, height))
|
||||
clock = pygame.time.Clock()
|
||||
pygame.display.set_caption("Space Invaders")
|
||||
|
||||
ship_width = 40
|
||||
ship_height = 30
|
||||
|
||||
# -------------- Colours -----------------
|
||||
background = (74, 35, 90)
|
||||
white = (244, 246, 247)
|
||||
yellow = (241, 196, 15)
|
||||
orange = (186, 74, 0)
|
||||
green = (35, 155, 86)
|
||||
white1 = (253, 254, 254)
|
||||
dark_gray = (23, 32, 42)
|
||||
|
||||
|
||||
# -------------- Space-Ship Class --------------
|
||||
class SpaceShip:
|
||||
def __init__(self, x, y, w, h, colour):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.w = w
|
||||
self.h = h
|
||||
self.colour = colour
|
||||
|
||||
def draw(self):
|
||||
pygame.draw.rect(display, yellow, (self.x + self.w/2 - 8, self.y - 10, 16, 10))
|
||||
pygame.draw.rect(display, self.colour, (self.x, self.y, self.w, self.h))
|
||||
pygame.draw.rect(display, dark_gray, (self.x + 5, self.y + 6, 10, self.h - 10))
|
||||
pygame.draw.rect(display, dark_gray, (self.x + self.w - 15, self.y + 6, 10, self.h - 10))
|
||||
|
||||
|
||||
# ----------------- Bullet Class -------------
|
||||
class Bullet:
|
||||
def __init__(self, x, y):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.d = 10
|
||||
self.speed = -5
|
||||
|
||||
def draw(self):
|
||||
pygame.draw.ellipse(display, orange, (self.x, self.y, self.d, self.d))
|
||||
|
||||
def move(self):
|
||||
self.y += self.speed
|
||||
|
||||
def hit(self, x, y, d):
|
||||
if x < self.x < x + d:
|
||||
if y + d > self.y > y:
|
||||
return True
|
||||
|
||||
|
||||
# ------------------ Alien Class ---------------
|
||||
class Alien:
|
||||
def __init__(self, x, y, d):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.d = d
|
||||
self.x_dir = 1
|
||||
self.speed = 3
|
||||
|
||||
def draw(self):
|
||||
pygame.draw.ellipse(display, green, (self.x, self.y, self.d, self.d))
|
||||
pygame.draw.ellipse(display, dark_gray, (self.x + 10, self.y + self.d/3, 8, 8), 2)
|
||||
pygame.draw.ellipse(display, dark_gray, (self.x + self.d - 20, self.y + self.d/3, 8, 8), 2)
|
||||
pygame.draw.rect(display, dark_gray, (self.x, self.y+self.d-20, 50, 7))
|
||||
|
||||
def move(self):
|
||||
self.x += self.x_dir*self.speed
|
||||
|
||||
def shift_down(self):
|
||||
self.y += self.d
|
||||
|
||||
|
||||
# ------------------- Saved ------------------
|
||||
def saved():
|
||||
font = pygame.font.SysFont("Wide Latin", 22)
|
||||
font_large = pygame.font.SysFont("Wide Latin", 43)
|
||||
text2 = font_large.render("Congratulations!", True, white1)
|
||||
text = font.render("You Prevented the Alien Invasion!", True, white1)
|
||||
display.blit(text2, (60, height/2))
|
||||
display.blit(text, (45, height/2 + 100))
|
||||
pygame.display.update()
|
||||
time.sleep(3)
|
||||
|
||||
|
||||
# -------------------- Death ----------------
|
||||
def GameOver():
|
||||
font = pygame.font.SysFont("Chiller", 50)
|
||||
font_large = pygame.font.SysFont("Chiller", 100)
|
||||
text2 = font_large.render("Game Over!", True, white1)
|
||||
text = font.render("You Could not Prevent the Alien Invasion!", True, white1)
|
||||
display.blit(text2, (180, height/2-50))
|
||||
display.blit(text, (45, height/2 + 100))
|
||||
|
||||
|
||||
# --------------------- The Game ------------------
|
||||
def game():
|
||||
invasion = False
|
||||
ship = SpaceShip(width/2-ship_width/2, height-ship_height - 10, ship_width, ship_height, white)
|
||||
|
||||
bullets = []
|
||||
num_bullet = 0
|
||||
for i in range(num_bullet):
|
||||
i = Bullet(width/2 - 5, height - ship_height - 20)
|
||||
bullets.append(i)
|
||||
|
||||
x_move = 0
|
||||
|
||||
aliens = []
|
||||
num_aliens = 8
|
||||
d = 50
|
||||
for i in range(num_aliens):
|
||||
i = Alien((i+1)*d + i*20, d+20, d)
|
||||
aliens.append(i)
|
||||
|
||||
while not invasion:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_q:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
if event.key == pygame.K_RIGHT:
|
||||
x_move = 5
|
||||
|
||||
if event.key == pygame.K_LEFT:
|
||||
x_move = -5
|
||||
|
||||
if event.key == pygame.K_SPACE:
|
||||
num_bullet += 1
|
||||
i = Bullet(ship.x + ship_width/2 - 5, ship.y)
|
||||
bullets.append(i)
|
||||
|
||||
if event.type == pygame.KEYUP:
|
||||
x_move = 0
|
||||
|
||||
display.fill(background)
|
||||
|
||||
for i in range(num_bullet):
|
||||
bullets[i].draw()
|
||||
bullets[i].move()
|
||||
|
||||
for alien in list(aliens):
|
||||
alien.draw()
|
||||
alien.move()
|
||||
for item in list(bullets):
|
||||
if item.hit(alien.x, alien.y, alien.d):
|
||||
bullets.remove(item)
|
||||
num_bullet -= 1
|
||||
aliens.remove(alien)
|
||||
num_aliens -= 1
|
||||
|
||||
if num_aliens == 0:
|
||||
saved()
|
||||
invasion = True
|
||||
|
||||
for i in range(num_aliens):
|
||||
if aliens[i].x + d >= width:
|
||||
for j in range(num_aliens):
|
||||
aliens[j].x_dir = -1
|
||||
aliens[j].shift_down()
|
||||
|
||||
if aliens[i].x <= 0:
|
||||
for j in range(num_aliens):
|
||||
aliens[j].x_dir = 1
|
||||
aliens[j].shift_down()
|
||||
|
||||
try:
|
||||
if aliens[0].y + d > height:
|
||||
GameOver()
|
||||
pygame.display.update()
|
||||
time.sleep(3)
|
||||
invasion = True
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
ship.x += x_move
|
||||
|
||||
if ship.x < 0:
|
||||
ship.x -= x_move
|
||||
if ship.x + ship_width > width:
|
||||
ship.x -= x_move
|
||||
|
||||
ship.draw()
|
||||
|
||||
pygame.display.update()
|
||||
clock.tick(60)
|
||||
|
||||
# ----------------- Calling the Game Function ---------------------
|
||||
game()
|
||||
Reference in New Issue
Block a user