{"id":141,"date":"2026-03-24T14:05:48","date_gmt":"2026-03-24T14:05:48","guid":{"rendered":"https:\/\/theroyalscode.com\/students\/d_harkless\/?p=141"},"modified":"2026-03-24T14:05:48","modified_gmt":"2026-03-24T14:05:48","slug":"free-friday-3-20-26","status":"publish","type":"post","link":"https:\/\/theroyalscode.com\/students\/d_harkless\/2026\/03\/24\/free-friday-3-20-26\/","title":{"rendered":"Free Friday 3\/20\/26"},"content":{"rendered":"\n<p>Today in class, I continued my Tetris game.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"304\" height=\"629\" src=\"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-content\/uploads\/2026\/03\/image-5.png\" alt=\"\" class=\"wp-image-142\" srcset=\"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-content\/uploads\/2026\/03\/image-5.png 304w, https:\/\/theroyalscode.com\/students\/d_harkless\/wp-content\/uploads\/2026\/03\/image-5-145x300.png 145w\" sizes=\"auto, (max-width: 304px) 100vw, 304px\" \/><\/figure>\n\n\n\n<p>This is the code for the blocks<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class LBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=1)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(0, 2), Position(1, 0), Position(1, 1), Position(1, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: &#91;Position(0, 1), Position(1, 1), Position(2, 1), Position(2, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: &#91;Position(1, 0), Position(1, 1), Position(1, 2), Position(2, 0)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: &#91;Position(0, 0), Position(0, 1), Position(1, 1), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 3)\n\nclass JBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=2)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(0, 0), Position(1, 0), Position(1, 1), Position(1, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: &#91;Position(0, 1), Position(0, 2), Position(1, 1), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: &#91;Position(1, 0), Position(1, 1), Position(1, 2), Position(2, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: &#91;Position(0, 1), Position(1, 1), Position(2, 0), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 3)\n\nclass IBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=3)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(1, 0), Position(1, 1), Position(1, 2), Position(1, 3)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: &#91;Position(0, 2), Position(1, 2), Position(2, 2), Position(3, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: &#91;Position(2, 0), Position(2, 1), Position(2, 2), Position(2, 3)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: &#91;Position(0, 1), Position(1, 1), Position(2, 1), Position(3, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 3)\n\nclass OBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=4)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(0, 0), Position(0, 1), Position(1, 0), Position(1, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 4)\n\nclass SBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=5)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(0, 1), Position(0, 2), Position(1, 0), Position(1, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: &#91;Position(0, 1), Position(1, 1), Position(1, 2), Position(2, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: &#91;Position(1, 1), Position(1, 2), Position(2, 0), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: &#91;Position(0, 0), Position(1, 0), Position(1, 1), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 3)\n\nclass TBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=6)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(0, 1), Position(1, 0), Position(1, 1), Position(1, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: &#91;Position(0, 1), Position(1, 1), Position(1, 2), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: &#91;Position(1, 0), Position(1, 1), Position(1, 2), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: &#91;Position(0, 1), Position(1, 0), Position(1, 1), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 3)\n\nclass ZBlock(Block):\n\n\u00a0 \u00a0 def __init__(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 super().__init__(id=7)\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.cells =\u00a0{\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0: &#91;Position(0, 0), Position(0, 1), Position(1, 1), Position(1, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: &#91;Position(0, 2), Position(1, 1), Position(1, 2), Position(2, 1)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: &#91;Position(1, 0), Position(1, 1), Position(2, 1), Position(2, 2)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: &#91;Position(0, 1), Position(1, 0), Position(1, 1), Position(2, 0)],\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.move(0, 3)<\/code><\/pre>\n\n\n\n<p>This is the code for the keys<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while True: \u00a0# game loop\n\n\u00a0 \u00a0 for event in pygame.event.get():\n\n\u00a0 \u00a0 \u00a0 \u00a0 if event.type == pygame.QUIT:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 pygame.quit()\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sys.exit()\n\n\u00a0 \u00a0 \u00a0 \u00a0 if event.type == pygame.KEYDOWN:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if event.key == pygame.K_LEFT:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 game.move_left()\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if event.key == pygame.K_RIGHT:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 game.move_right()\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if event.key == pygame.K_DOWN:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 game.move_down()\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if event.key == pygame.K_UP:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 game.rotate()\n\n\u00a0 \u00a0 \u00a0 \u00a0 if event.type == GAME_UPDATE:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Game.move_down()<\/code><\/pre>\n\n\n\n<p>This is the code that keeps the blocks inside the game<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def block_inside(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 tiles = self.current_block.get_cell_positions()\n\n\u00a0 \u00a0 \u00a0 \u00a0 for tile in tiles:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if not self.grid.is_inside(tile.row, tile.column):\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return False\n\n\u00a0 \u00a0 \u00a0 \u00a0 return True<\/code><\/pre>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<p>This is the code that rotates the blocks<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def rotate(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.current_block.rotate()\n\n\u00a0 \u00a0 \u00a0 \u00a0 if not self.block_inside() or not self.block_fits():\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Self.current_block.undo_rotation()<\/code><\/pre>\n\n\n\n<p>This is the code that undo&#8217;s the rotation<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def undo_rotation(self):\n\n\u00a0 \u00a0 \u00a0 \u00a0 self.rotation_state -= 1\n\n\u00a0 \u00a0 \u00a0 \u00a0 if self.rotation_state &lt; 0:\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.rotation_state = len(self.cells) - 1<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today in class, I continued my Tetris game. This is the code for the blocks This is the code for the keys This is the code that keeps the blocks inside the game \u00a0 This is the code that rotates the blocks This is the code that undo&#8217;s the rotation<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-141","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/posts\/141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/comments?post=141"}],"version-history":[{"count":1,"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/posts\/141\/revisions"}],"predecessor-version":[{"id":143,"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/posts\/141\/revisions\/143"}],"wp:attachment":[{"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/media?parent=141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/categories?post=141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/theroyalscode.com\/students\/d_harkless\/wp-json\/wp\/v2\/tags?post=141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}