Free Friday (4/12/24)

Uncategorized1 Comment on Free Friday (4/12/24)

Free Friday (4/12/24)

Today I started a Tetris clone in python using pygame. I started off by creating a repository using git so I could work on this project from home. I then found a good tutorial online (https://www.techwithtim.net/tutorials/game-development-with-python/tetris-pygame/tutorial-1) To help me and I followed the first lesson.

Here’s the window so far but underneath there are already over 150 lines of code:

import pygame
import random

#https://www.techwithtim.net/tutorials/game-development-with-python/tetris-pygame/tutorial-1
# creating the data structure for pieces
# setting up global vars
# functions
# - create_grid
# - draw_grid
# - draw_window
# - rotating shape in main
# - setting up the main

"""
10 x 20 square grid
shapes: S, Z, I, O, J, L, T
represented in order by 0 - 6
"""

pygame.font.init()

# 1GLOBALS VARS
screen_width = 800
screen_height = 700
play_width = 300 # meaning 300 // 10 = 30 width per block
play_height = 600 # meaning 600 // 20 = 20 height per block
block_size = 30

top_left_x = (screen_width - play_width) // 2
top_left_y = screen_height - play_height


# SHAPE FORMATS

S = [['.....',
'......',
'..00..',
'.00...',
'.....'],
['.....',
'..0..',
'..00.',
'...0.',
'.....']]

Z = [['.....',
'.....',
'.00..',
'..00.',
'.....'],
['.....',
'..0..',
'.00..',
'.0...',
'.....']]

I = [['..0..',
'..0..',
'..0..',
'..0..',
'.....'],
['.....',
'0000.',
'.....',
'.....',
'.....']]

O = [['.....',
'.....',
'.00..',
'.00..',
'.....']]

J = [['.....',
'.0...',
'.000.',
'.....',
'.....'],
['.....',
'..00.',
'..0..',
'..0..',
'.....'],
['.....',
'.....',
'.000.',
'...0.',
'.....'],
['.....',
'..0..',
'..0..',
'.00..',
'.....']]

L = [['.....',
'...0.',
'.000.',
'.....',
'.....'],
['.....',
'..0..',
'..0..',
'..00.',
'.....'],
['.....',
'.....',
'.000.',
'.0...',
'.....'],
['.....',
'.00..',
'..0..',
'..0..',
'.....']]

T = [['.....',
'..0..',
'.000.',
'.....',
'.....'],
['.....',
'..0..',
'..00.',
'..0..',
'.....'],
['.....',
'.....',
'.000.',
'..0..',
'.....'],
['.....',
'..0..',
'.00..',
'..0..',
'.....']]

shapes = [S, Z, I, O, J, L, T]
shape_colors = [(0, 255, 0), (255, 0, 0), (0, 255, 255), (255, 255, 0), (255, 165, 0), (0, 0, 255), (128, 0, 128)]
# index 0 - 6 represent shape


class Piece(object):
def __init__(self, x, y, shape):
self.x = x
self.y = y
self.shape = shape
self.color = shape_colors[shapes.index(shape)]
self.rotiation = 0

def create_grid(locked_positions={}):
grid = [[(0,0,0) for x in range(10)] for x in range(20)]

for i in range(len(grid)):
for j in range(len(grid[i])):
if (j, i) in locked_positions:
c = locked_positions[(j, i)]
grid[i][c] = c
return grid


def convert_shape_format(shape):
pass

def valid_space(shape, grid):
pass

def check_lost(positions):
pass

def get_shape():
return Piece(5, 0, random.choice(shapes))

def draw_text_middle(text, size, color, surface):
pass

def draw_grid(surface, grid):
for i in range(len(grid)):
for j in range(len(grid[i])):
pygame.draw.rect(surface, grid[i][j], (top_left_x + j*block_size, top_left_y + i*block_size, block_size, block_size), 0)

pygame.draw.rect(surface, (255, 0, 0), (top_left_x, top_left_y, play_width, play_height), 4)

def clear_rows(grid, locked):
pass

def draw_next_shape(shape, surface):
pass

def draw_window(surface, grid):
surface.fill((0,0,0))

pygame.font.init()
font = pygame.font.SysFont('comicsans', 60)
label = font.render('Tetris', 1, (255,255,255))

surface.blit(label, (top_left_x + play_width / 2 - (label.get_width()/2), 30))
draw_grid(surface, grid)
pygame.display.update()


def main(win):

locked_positions = {}
grid = create_grid(locked_positions)

change_piece = False
run = True
current_piece = get_shape()
next_piece = get_shape()
clock = pygame.time.Clock()
fall_time = 0

while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
current_piece.x -= 1
if not(valid_space(current_piece, grid)):
current_piece += 1
if event.key == pygame.K_RIGHT:
current_piece.x += 1
if not(valid_space(current_piece, grid)):
current_piece -= 1
if event.key == pygame.K_DOWN:
current_piece.y += 1
if not(valid_space(current_piece, grid)):
current_piece.y -= 1
if event.key == pygame.K_UP:
current_piece.rotiation += 1
if not(valid_space(current_piece, grid)):
current_piece -= 1

draw_window(win, grid)


def main_menu(win):
main(win)
pass

win = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('Tetris')
main_menu(win) # start game
Hello! My name's Anthony, I'm 18, and I'm super passionate about everything computers, but I love game & software development the most. I'm hardworking, and I'm always looking for something to create or tasks to complete. I'm also always excited to learn something new!

One thought on “Free Friday (4/12/24)

Leave a Reply to Mr. Wilmoth Cancel reply

Your email address will not be published. Required fields are marked *

Back To Top