You've already forked juegos-python
Create repo
This commit is contained in:
220
Stack_Tower/Stacks.py
Normal file
220
Stack_Tower/Stacks.py
Normal file
@@ -0,0 +1,220 @@
|
||||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
# Stack Tower
|
||||
# Language - Python
|
||||
# Modules - pygame, sys, random
|
||||
#
|
||||
# Controls - Mouse Click
|
||||
#
|
||||
# By - Jatin Kumar Mandav
|
||||
#
|
||||
# Website - https://jatinmandav.wordpress.com
|
||||
#
|
||||
# YouTube Channel - https://www.youtube.com/channel/UCdpf6Lz3V357cIZomPwjuFQ
|
||||
# Twitter - @jatinmandav
|
||||
#
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
import pygame
|
||||
import sys
|
||||
import random
|
||||
|
||||
pygame.init()
|
||||
|
||||
width = 400
|
||||
height = 500
|
||||
display = pygame.display.set_mode((width, height))
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
background = (23, 32, 42)
|
||||
|
||||
white = (236, 240, 241)
|
||||
|
||||
# Color Codes
|
||||
color = [(120, 40, 31), (148, 49, 38), (176, 58, 46), (203, 67, 53), (231, 76, 60), (236, 112, 99), (241, 148, 138), (245, 183, 177), (250, 219, 216), (253, 237, 236),
|
||||
(254, 249, 231), (252, 243, 207), (249, 231, 159), (247, 220, 111), (244, 208, 63), (241, 196, 15), (212, 172, 13), (183, 149, 11), (154, 125, 10), (125, 102, 8),
|
||||
(126, 81, 9), (156, 100, 12), (185, 119, 14), (202, 111, 30), (214, 137, 16), (243, 156, 18), (245, 176, 65), (248, 196, 113),(250, 215, 160), (253, 235, 208), (254, 245, 231),
|
||||
(232, 246, 243), (162, 217, 206), (162, 217, 206),
|
||||
(115, 198, 182), (69, 179, 157), (22, 160, 133),
|
||||
(19, 141, 117), (17, 122, 101), (14, 102, 85),
|
||||
(11, 83, 69),
|
||||
(21, 67, 96), (26, 82, 118), (31, 97, 141),
|
||||
(36, 113, 163), (41, 128, 185), (84, 153, 199),
|
||||
(127, 179, 213), (169, 204, 227), (212, 230, 241),
|
||||
(234, 242, 248),
|
||||
(251, 238, 230), (246, 221, 204), (237, 187, 153),
|
||||
(229, 152, 102), (220, 118, 51), (211, 84, 0),
|
||||
(186, 74, 0), (160, 64, 0), (135, 54, 0),
|
||||
(110, 44, 0)
|
||||
]
|
||||
|
||||
colorIndex = 0
|
||||
|
||||
brickH = 10
|
||||
brickW = 100
|
||||
|
||||
score = 0
|
||||
speed = 3
|
||||
|
||||
|
||||
# Single Brick Class
|
||||
class Brick:
|
||||
def __init__(self, x, y, color, speed):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.w = brickW
|
||||
self.h = brickH
|
||||
self.color = color
|
||||
self.speed = speed
|
||||
|
||||
def draw(self):
|
||||
pygame.draw.rect(display, self.color, (self.x, self.y, self.w, self.h))
|
||||
|
||||
def move(self):
|
||||
self.x += self.speed
|
||||
if self.x > width:
|
||||
self.speed *= -1
|
||||
if self.x + self.w < 1:
|
||||
self.speed *= -1
|
||||
|
||||
|
||||
# Complete Stack
|
||||
class Stack:
|
||||
def __init__(self):
|
||||
global colorIndex
|
||||
self.stack = []
|
||||
self.initSize = 25
|
||||
for i in range(self.initSize):
|
||||
newBrick = Brick(width/2 - brickW/2, height - (i + 1)*brickH, color[colorIndex], 0)
|
||||
colorIndex += 1
|
||||
self.stack.append(newBrick)
|
||||
|
||||
def show(self):
|
||||
for i in range(self.initSize):
|
||||
self.stack[i].draw()
|
||||
|
||||
def move(self):
|
||||
for i in range(self.initSize):
|
||||
self.stack[i].move()
|
||||
|
||||
def addNewBrick(self):
|
||||
global colorIndex, speed
|
||||
|
||||
if colorIndex >= len(color):
|
||||
colorIndex = 0
|
||||
|
||||
y = self.peek().y
|
||||
if score > 50:
|
||||
speed += 0
|
||||
elif score%5 == 0:
|
||||
speed += 1
|
||||
|
||||
newBrick = Brick(width, y - brickH, color[colorIndex], speed)
|
||||
colorIndex += 1
|
||||
self.initSize += 1
|
||||
self.stack.append(newBrick)
|
||||
|
||||
def peek(self):
|
||||
return self.stack[self.initSize - 1]
|
||||
|
||||
def pushToStack(self):
|
||||
global brickW, score
|
||||
b = self.stack[self.initSize - 2]
|
||||
b2 = self.stack[self.initSize - 1]
|
||||
if b2.x <= b.x and not (b2.x + b2.w < b.x):
|
||||
self.stack[self.initSize - 1].w = self.stack[self.initSize - 1].x + self.stack[self.initSize - 1].w - b.x
|
||||
self.stack[self.initSize - 1].x = b.x
|
||||
if self.stack[self.initSize - 1].w > b.w:
|
||||
self.stack[self.initSize - 1].w = b.w
|
||||
self.stack[self.initSize - 1].speed = 0
|
||||
score += 1
|
||||
elif b.x <= b2.x <= b.x + b.w:
|
||||
self.stack[self.initSize - 1].w = b.x + b.w - b2.x
|
||||
self.stack[self.initSize - 1].speed = 0
|
||||
score += 1
|
||||
else:
|
||||
gameOver()
|
||||
for i in range(self.initSize):
|
||||
self.stack[i].y += brickH
|
||||
|
||||
brickW = self.stack[self.initSize - 1].w
|
||||
|
||||
# Game Over
|
||||
def gameOver():
|
||||
loop = True
|
||||
|
||||
font = pygame.font.SysFont("Agency FB", 60)
|
||||
text = font.render("Game Over!", True, white)
|
||||
|
||||
textRect = text.get_rect()
|
||||
textRect.center = (width/2, height/2 - 80)
|
||||
|
||||
while loop:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
close()
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_q:
|
||||
close()
|
||||
if event.key == pygame.K_r:
|
||||
gameLoop()
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
gameLoop()
|
||||
display.blit(text, textRect)
|
||||
|
||||
pygame.display.update()
|
||||
clock.tick()
|
||||
|
||||
# Displaying the Score on Screen
|
||||
def showScore():
|
||||
font = pygame.font.SysFont("Forte", 30)
|
||||
text = font.render("Score: " + str(score), True, white)
|
||||
display.blit(text, (10, 10))
|
||||
|
||||
|
||||
# Close the Window
|
||||
def close():
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
|
||||
# The Main Game Loop
|
||||
def gameLoop():
|
||||
global brickW, brickH, score, colorIndex, speed
|
||||
loop = True
|
||||
|
||||
brickH = 10
|
||||
brickW = 100
|
||||
colorIndex = 0
|
||||
speed = 3
|
||||
|
||||
score = 0
|
||||
|
||||
stack = Stack()
|
||||
stack.addNewBrick()
|
||||
|
||||
while loop:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
close()
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_q:
|
||||
close()
|
||||
if event.key == pygame.K_r:
|
||||
gameLoop()
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
stack.pushToStack()
|
||||
stack.addNewBrick()
|
||||
|
||||
|
||||
display.fill(background)
|
||||
|
||||
stack.move()
|
||||
stack.show()
|
||||
|
||||
showScore()
|
||||
|
||||
pygame.display.update()
|
||||
clock.tick(60)
|
||||
|
||||
gameLoop()
|
||||
Reference in New Issue
Block a user