Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Tetris mit Python

Der folgende Sketch ist nicht in der Arduino IDE geschrieben worden!!! Er is in Python geschrieben, einer anderen Programmiersprache. Python ist im Netz frei dowloadbar (ich nutze die version 3.8 und PyCharm als IDE(integrated development eviroment)).Der Code ist zwar noch nicht fertig und auch noch nicht komplett beschriftet, es stecken jedoch bis zu diesem Zeitpunkt bereits mehr als 6 std. Arbeit drin. 

 

import pygame        #Hier wird pygame importiert. Durch den import kann man z.B. ein fenster auf dem Bildschirm erstellen
import random       # Hier wird random importier. Durch diesen Import hat man nun die möglichkeit auf weitere befehle wie dem random befehl zuzugreifen.

pygame.font.init()

# Festlegung von Variabeln
s_width = 800  # wie briet der bildschirm sein soll
s_height = 700  # wie hoch der bildschirm sein soll
play_width = 300  # 300 // 10 = 30  breite pro block
play_height = 600  # 600 // 20 = 30 höhe pro block
block_size = 30  # die blockgröße beträgt 30

top_left_x = (s_width - play_width) // 2  # wo sich die fenster tatsächlich befinden
top_left_y = s_height - play_height

# repräsentierung der Formen. Diese werden in einer 2 Demensionalen Liste gespeichert, wodurch es möglich ist die verschiedenen drehrichtungen der Formen unter einer Variablen zu speichern.

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..',
      '.00..',
      '..0..',
      '.....']
     ]

shapes = [S, Z, I, O, J, L, T] # erstellen einer Liste mit allen Formen für einen einfacheren zugriff
shape_colors = [(0,255, 0), (255, 0, 0), (0, 255, 255), (255, 255, 0), (255, 165, 0), (0, 0, 255), (128, 0, 128)] #Hier werden die Farben der einzelnen Formen im RBG Code angegeben
# index 0 - 6 repräsentieren die Formen. Man fängt bei der 0 an zu zählen

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.rotation = 0

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

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

def convert_shape_format(shape):
    positions = []
    format = shape.shape[shape.rotation % len(shape.shape)]

    for i, in line enumerate(format):
        row = list(line)

def valid_space():
    pass

def check_lost():
    pass

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

def draw_text_middle():
    pass

def draw_grid(surface, grid):
    sx = top_left_x
    sy = top_left_y

    for i in range(len(grid)):
        pygame.draw.line(surface, (128,128,128), (sx, sy+ i*block_size), (sx+play_width, sy+ i*block_size))
        for j in range(len(grid[i])):
            pygame.draw.line(surface, (128,128,128), (sx + j*block_size, sy),(sx + j*block_size, sy + play_height))


def draw_next_shape():
    pass

def clear_rows():
    pass

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

    pygame.font.inin()
    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))

    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), 5)


    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.tipe == pygame.QUIT:
                run = False

            if event.tipe == 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.rotation += 1
                    if not(valid_space(valid_space())):
                        current_piece -= 1
        draw_window(win, grid)


def main_menu(win):
    main(win)


win = pygame.display.set_mode((s_width, s_height))
pygame.display.set_caption('Tetris')                    #Benennung des Fensters 
main_menu(win)

Erstellt: Emil Nisse Rathscheck (30.04.2020) Letzte Änderung: Emil Nisse Rathscheck (30.04.2020)