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)