How to Create a Tetris Game Using Python in Pygame
Tetris Game Using Python
In this blog post, we’ll walk through creating a Tetris game in Python using the Pygame library. We’ll cover the code, explain each part step by step, and provide output visuals to help you understand how it works.
Download New Real Time Projects :-Click here
1. Introduction to Tetris and Pygame
Tetris is a classic puzzle game where blocks of various shapes fall from the top, and the player arranges them to clear lines. Python, with its Pygame library, makes it easy to create such a game.
2. Setting Up Pygame
First, install Pygame if you haven’t already. Run the following command in your terminal or command prompt:
pip install pygame
Then, import Pygame and initialize it in your script.
import pygame
import random
pygame.init()
3. Defining Colors and Shapes
We’ll use a grid-based approach for the game. Define colors and the shapes of Tetris blocks:
colors = [
(0, 0, 0), # Background
(120, 37, 179), # Purple
(100, 179, 179), # Cyan
(80, 34, 22), # Brown
(80, 134, 22), # Green
(180, 34, 22), # Red
(180, 34, 122), # Pink
]
class Figure:
figures = [
[[1, 5, 9, 13], [4, 5, 6, 7]], # I-shape
[[4, 5, 9, 10], [2, 6, 5, 9]], # Z-shape
# Add more shapes here
]
4. Creating the Game Components
Create a Tetris_Game
class to handle the grid, falling blocks, and game logic:
class Tetris_Game:
def __init__(self, height, width):
self.height = height
self.width = width
self.field = [[0] * width for _ in range(height)]
self.figure = None
self.state = "start"
def new_figure(self):
self.figure = Figure(3, 0)
5. Implementing Game Logic
Implement key functionalities like block movement, collision detection, and line clearing:
def go_down(self):
self.figure.y += 1
if self.intersects():
self.figure.y -= 1
self.freeze()
def intersects(self):
# Check for collisions with walls or existing blocks
pass
def break_lines(self):
# Remove filled lines and increase score
pass
6. Adding the Main Game Loop
Set up the game loop to handle user inputs and render the game screen:
screen = pygame.display.set_mode((400, 500))
pygame.display.set_caption("Tetris_Game")
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# Handle key inputs
7. Testing and Running the Game
Save the script and run it:
python tetris_game.py
PHP PROJECT:-Â CLICK HERE
8. Full Code
Here’s the complete code:
import pygame
import random
colors = [
(0, 0, 0),
(120, 37, 179),
(100, 179, 179),
(80, 34, 22),
(80, 134, 22),
(180, 34, 22),
(180, 34, 122),
]
class Figure:
x = 0
y = 0
figures = [
[[1, 5, 9, 13], [4, 5, 6, 7]],
[[4, 5, 9, 10], [2, 6, 5, 9]],
[[6, 7, 9, 10], [1, 5, 6, 10]],
[[1, 2, 5, 9], [0, 4, 5, 6], [1, 5, 9, 8], [4, 5, 6, 10]],
[[1, 2, 6, 10], [5, 6, 7, 9], [2, 6, 10, 11], [3, 5, 6, 7]],
[[1, 4, 5, 6], [1, 4, 5, 9], [4, 5, 6, 9], [1, 5, 6, 9]],
[[1, 2, 5, 6]],
]
def __init__(self, x, y):
self.x = x
self.y = y
self.type = random.randint(0, len(self.figures) - 1)
self.color = random.randint(1, len(colors) - 1)
self.rotation = 0
def image(self):
return self.figures[self.type][self.rotation]
def rotate(self):
self.rotation = (self.rotation + 1) % len(self.figures[self.type])
class Tetris_Game:
level = 2
score = 0
state = "start"
field = []
height = 0
width = 0
x = 100
y = 60
zoom = 20
figure = None
def __init__(self, height, width):
self.height = height
self.width = width
self.field = []
self.score = 0
self.state = "start"
for i in range(height):
new_line = []
for j in range(width):
new_line.append(0)
self.field.append(new_line)
def new_figure(self):
self.figure = Figure(3, 0)
def intersects(self):
intersection = False
for i in range(4):
for j in range(4):
if i * 4 + j in self.figure.image():
if i + self.figure.y > self.height - 1 or \
j + self.figure.x > self.width - 1 or \
j + self.figure.x < 0 or \
self.field[i + self.figure.y][j + self.figure.x] > 0:
intersection = True
return intersection
def break_lines(self):
lines = 0
for i in range(1, self.height):
zeros = 0
for j in range(self.width):
if self.field[i][j] == 0:
zeros += 1
if zeros == 0:
lines += 1
for i1 in range(i, 1, -1):
for j in range(self.width):
self.field[i1][j] = self.field[i1 - 1][j]
self.score += lines ** 2
def go_space(self):
while not self.intersects():
self.figure.y += 1
self.figure.y -= 1
self.freeze()
def go_down(self):
self.figure.y += 1
if self.intersects():
self.figure.y -= 1
self.freeze()
def freeze(self):
for i in range(4):
for j in range(4):
if i * 4 + j in self.figure.image():
self.field[i + self.figure.y][j + self.figure.x] = self.figure.color
self.break_lines()
self.new_figure()
if self.intersects():
self.state = "gameover"
def go_side(self, dx):
old_x = self.figure.x
self.figure.x += dx
if self.intersects():
self.figure.x = old_x
def rotate(self):
old_rotation = self.figure.rotation
self.figure.rotate()
if self.intersects():
self.figure.rotation = old_rotation
# Initialize the game engine
pygame.init()
# Define some colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (128, 128, 128)
size = (400, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Tetris_Game")
# Loop until the user clicks the close button.
done = False
clock = pygame.time.Clock()
fps = 25
game = Tetris_Game(20, 10)
counter = 0
pressing_down = False
while not done:
if game.figure is None:
game.new_figure()
counter += 1
if counter > 100000:
counter = 0
if counter % (fps // game.level // 2) == 0 or pressing_down:
if game.state == "start":
game.go_down()
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
game.rotate()
if event.key == pygame.K_DOWN:
pressing_down = True
if event.key == pygame.K_LEFT:
game.go_side(-1)
if event.key == pygame.K_RIGHT:
game.go_side(1)
if event.key == pygame.K_SPACE:
game.go_space()
if event.key == pygame.K_ESCAPE:
game.__init__(20, 10)
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
pressing_down = False
screen.fill(WHITE)
for i in range(game.height):
for j in range(game.width):
pygame.draw.rect(screen, GRAY, [game.x + game.zoom * j, game.y + game.zoom * i, game.zoom, game.zoom], 1)
if game.field[i][j] > 0:
pygame.draw.rect(screen, colors[game.field[i][j]],
[game.x + game.zoom * j + 1, game.y + game.zoom * i + 1, game.zoom - 2, game.zoom - 1])
if game.figure is not None:
for i in range(4):
for j in range(4):
p = i * 4 + j
if p in game.figure.image():
pygame.draw.rect(screen, colors[game.figure.color],
[game.x + game.zoom * (j + game.figure.x) + 1,
game.y + game.zoom * (i + game.figure.y) + 1,
game.zoom - 2, game.zoom - 2])
font = pygame.font.SysFont('Calibri', 25, True, False)
font1 = pygame.font.SysFont('Calibri', 65, True, False)
text = font.render("Score: " + str(game.score), True, BLACK)
text_game_over = font1.render("Game Over", True, (255, 125, 0))
text_game_over1 = font1.render("Press ESC", True, (255, 215, 0))
screen.blit(text, [0, 0])
if game.state == "gameover":
screen.blit(text_game_over, [20, 200])
screen.blit(text_game_over1, [25, 265])
pygame.display.flip()
clock.tick(fps)
pygame.quit()
tetris python code copy and paste
how to create a tetris game using python in pygame
tetris python code without-pygame
tetris game code c++
how to create a tetris game using python
create a tetris game using python
tetris python code github
tetris game using pygame
tetris code
how to create a tetris game using python in pygame
tetris game using python
games in python
tetris code copy and paste
tetris game using python pdf
tetris game using python github
how to create a tetris game using python in pygame
create a tetris game using python github
tetris game using python for beginners
Post Comment