Skip to content
This repository has been archived by the owner on Jul 27, 2023. It is now read-only.

Introduction

Rong "Mantle" Bao edited this page Jun 26, 2021 · 8 revisions

The CmTetris project started in the hope to create a WPF game in which players can work out a complete periodic table of elements out of the standard tetrominos (which is also known as tetriminos) following the classic Tetris rules. In order to do so the whole project is divided into 3 individual parts, as shown below.

1. SimpleTetris

This is the first part of the project, and also the first part implemented. The aim of this project is to demonstrate a simple Tetris game with MVVM designing patterns as the foundation of the whole project.

More details about this project can be found in the related wiki page.

The final result of this project can be found here. Not recommended to play this part, as it serves only as a demonstration but not production.

Controls

  • A: Move left
  • D: Move right
  • S: Move down
  • Space: Rotate
  • Esc: Pause

2. Tetriminify

GUI of Tetriminify 1.1.0.0

Figure: GUI of Tetriminify 1.1.0.0 with a generated tiling pattern (lower right) and falling orders (lower left) on display. A: Empty block. U: Unavailable block. L, C, I: L-shaped tetrimino, cubic tetrimino, linear tetrimino

A tool to generate tetromino tiling patterns and tetrimino falling orders for arbitrary given templates.

This is the second part of the project. The goal of this project is to create an algorithm to give plans on dividing arbitrary patterns into a closest tetrimino stacking pattern (i.e. tiling a pattern) which will be used as the core algorithm in generating the game map.

This algorithm mainly contains two components: the Tetriminify.Generator namespace and the Tetriminify.Sorter namespace. The former focuses on tiling arbitrary user-provided templates, and if it is not possible to tile the given template, it will also provide proper error messages.

The latter focuses on sorting tetrimino falling orders so that a in-game solution to the given list of generated tetriminos is possible. For example, you will not be able to finish the game if the game requires you to place a tetrimino to a specific place but all blocks around it are all occupied. Guaranteed by the algorithm, the Sorter will emit a possible order of tetriminos in which players can successfully finish the game. It is also polymorphic because it will randomly choose an order from all possible orders, which is also promised by its algorithm. These made it very suitable to be used in a game.

This project provides a GUI and users can interact with the tool to generate their own tetris patterns and falling orders.

More details about this project can be found at the corresponding wiki page.

3. Periotris

Important: Periotris has been moved to Periotris.Net where future development will be made.

Screenshot of Periotris

Figure: In-game screenshot of Periotris 1.5.2.1 with 'Colors' and 'Assistance grid' options enabled

A Tetris game based on the theme of the Periodic Table of Elements.

This is the final project of the collection, currently, which implements a fully-functional production-quality Tetris game with the periodic table. The name 'periotris' is taken after 'periodic' and 'tetris', which are the core features of the game. This game contains a wide variety of features, including 'Quick fix' and 'Assistance grid'. This MVVM application has evolved for many versions and it is currently both tested in and widely accepted by my classmates and chemistry teachers in my school. The game is described as 'challenging and very helpful for remembering the periodic table' by most of the players. Currently I plan to add more features to it in the future.

Chemistry teacher Mr. Xu tests the game Figure: Our chemistry teacher Mr. Long-di Xu tests Periotris 1.4.0.0 in Colorless Mode. (IMAGE Copyright (C) 2021 宁波效实中学 徐珑迪. All rights reserved. Image not for other uses.)

This project is completely playable.

More details about this project can be found at the corresponding wiki page.

Controls

  • A || Left arrow: Move left
  • D || Right arrow: Move right
  • S || Down arrow: Move down
  • W || Up arrow: Rotate
  • Space: Instant drop to the lowest
  • Esc: Pause
Clone this wiki locally