Help completing Tetris in Delightex

Hello, I’ve trying to program Tetris in Delightex but I can’t figure out how to proceed with making different shapes and rotating them. Can anyone continue where I left off Tetris and add the missing code to make it functional? I would love to see a fully functional Tetris built in Delightex. Feel free to ask me anything.

You should be able to paste this into any blank project and it should work
code:
CoBlocksPart.block:1:QDhDDDDDDDDDDDDD4BBZD4BBXF4BBVH4BBbD4BBRN4BBdD4BBbF4BBfD4BBhBD4BBVP4BBTR4BBjBD6CsetVariableRjBDRlBDRnBDyBrepeatRnBDRpBDqBonKeyZpBDDZtBDDqGassignEmptyListToVariableJvBqBpauseJtBZtBDDZxBDDiBforkJzB4BBzBD4BC1BD4BBvBJ4BCxBH4BBrBN4BCtBL4BD3BD4BB5BD4BBjBZ4BClBH4BC5BD4BC7BD4BDrBT4BCzBD4BC1BH4BDlBX4BCXlB4BB7BD4BCpBV4BCrBT4BDbjB4BCjBV4BDXlB4BCjBZ4BDTpBqBvalueoBC5BiCvariableKyoBC1BiBnameoBCzBKziBbodyZvBDDqBcountoBCxBoBCxBqBstate6BPRESSEDyBbuttonSupBiBdownBqCcollisionyBamountoBCfiBDOWNiBleftJbJbqBrightJZJZJZJZ4BBwEnF4BBZD4BB8E1FJbJbJb4BBbD4BBZF4BBdD4BC0CxD4BC2CzD4BC4C1DRfDyDchangeVariableRfDRhBD4BCiDjE4BCkDzD4BCmDzDiCsimpleIfRdDRfD6BforeverJfS-5K0a0.54BDoD/D4BBmD9D4BBZD4BC6DD4BBgE3E4BC+DLS104BDVD4BBXD4BDRJ4BBTH4BDZDpBbDDDDoBCjByBnumberoBChBoBChBqDthenStatementJfqCcondition4BCdDJf4BCZH6BactionsxBdDDDDD4BBnBD4BBpBD4BBrBD4BB2ChE4BB4CjEJtBJtBJtB4BB0C/DyCcomparisonZrBDD4BB6CnEZvBDD4BB6IrK4BB8ItK4BB2InK4BBgJxK4BBmD3E4BBzBD6EcreateItemStatementZzBDDiDsetDirectionR1BDiCsetColorR1BDR3BDR5BD4BCgH5I4BCiH7I4BCkH1DR5BD4DB4FxHD4BC9BD4DB2FzHDRhCD4DBgGhID4BC1BD4DB+F/HDRlCDRnCDRpCDRrCDRtCD6BlistAddRtCD4BCvCD4BBxCD4DB+HvKD4DB1CDD4BB5CD4BBuInL4DBvCND4BBgE7G4BCwIL4BBkE9G4BC0IHS20K14BDmE5G4DBkE3GDoBC3C4BCgJ1LqCoperationqBEQUALoBCzC4BCzCD4BD2EpH4DB0EnHDoBC3C4BCwJlMoBC3C4BCnCR4DB6JvMD4BC4JvM4BB+J1M4BC8JH4BDyJnM4BBwJlM4DBmK7MD4BCkKvM4BDyFnI4DBwFlID4DBRpCD4BB7CD6CitemModelIdyBSquareiCpositionoBC3CoBC3C4BC4KtNiBitemoBC1C4BC1CDqCdirectionoBC1CoBC1CoBC1C4BCrCLoBC1CoBC1CJ1C4BC6FtI4BC1CDJ3CJ3CJ3C6DbooleanConstantJ1CJ1C4BCqG9I4BClCRJ1CJ1CJ1CJ1CoBC1C4BCWpDiBmoveoBCzCJzCoBCzCoBCzC4BCiBzDZzCDD4BCoH9J4BC3CD4BC5CD4BCkN9PiBlistoBC5CZ5CDDJ9CJ9CJ9C6DsceneItemByNameJ7CZ7CDDJ/CJ/CJ/CJ/CJ/C4BBgL9NZ/CDDanotJhD4BCuOtR4BCsOvM4BCyOvR4BC0OxR4BBwLtOZ/CDDJjD4BC8OtR4BC6OvM4BCgPvR4BCiPxRJ7CJ7CJ7C4BBkM9OJ7CJ7CJ7C4BB8I1L4BB6MzP4BBgJ5LZ7CDDiElistContainsItemR9CDCJ9CJ9CJ9C4BB9CD4DBiQ/SD4DB8P7SD4BCsQtT4BCqQH4BCwQ9P4DBoQlTD4BBvCT4BBwQvT4BBqQpT4BC6Q5T4BC8Q9P4DB0QxTD4BCgR7I4BCiR7IR9CD4BB2PzS4BCkIhL4BB0PxS4DB/CDDa1.0a2.0iBtrueR9CD4BCyIvL4DBoQlTD4BBkQjT4DBvCTD4BC+R9P4BCgSxR4BCiS/UR/CD4BCmSlV4BCoS9P4BCqSnVR/CDRhDDRjDD4BBiRlU4BCwJD4BBgRhU4DB8H9KD4BByF1I4BC8S9P4BC6SH4BCgTpBKxoBC9CoBC9C4BCkT/VoBC9C4BCoTjWqCItem nameoBC7C4BCuTnWoBC7CoBC7CoBC7C6B#404040oBC5C4BC6TxW4BDoP/R4BBmP9RoBC5CiBLESSoBC3C6BoperandoBC1C4BC2EpH4BD4PrS4BB2PpS6BGREATERoBCzC4BC0UlXoBCzCoBCzC4BCmF3HS994BDqQ5S4DBoQ3SDS19qBfalse4BBqV3X4DBwK9MD4BB8QrT4BCsVH4BByV/X4DB4KlNDoBCxCoBCxC4BC+FtI4BC4VnYoBCxCJxCJxCJxCJxCJxCJxCJxCJxCJxCJxCJxCJxCZxCDD4BCgRzTJ1CJ1CJ1CR1CDZ3CDD4BCsRlUJ7CJ7CJ7CJ7CR7CDpB9CDDDD4BC6R9U4BCuJxMoBClDoBClD4BCoKrNoBClDoBClDoBClD4BCwKzNJlDJlDJlDJlDJlD4BCwYzb4BCyYzb4BCwYD4BC2Yzb4BC0YL4BC6YtT4BC4YH4BC+Y1b4BCgZzb4BCiZ3b4BCkZtT4BCiZH4BBySjV4BBwWhZ4BB2SnVZzCDD4BCwZtR4BCyZvR4BC0ZnV4DB6OpRD4BBwMhP4BBkT1V4BBiXzZ4BBoT5VZzCDD4BCiatR4BCgaH4BCma5I4BCoanV4DBuP7RD4BBkNzP4BB4TnW4BBuc9e4BB8TrW4BB6Xpa4BBgUvWZxCDDJ1CJ1CJ1CJ1CJ1CJ1CJ1CJ1C4BCqbtR4BCsbvR4BCub9P4BCsbH4BCybpBa0.0S906B1000000RlCDRnCDRpCD4DBwa5cD4BC+ShL4BBua3c4BCqMzO4BCrCDoBCtCRtCDRvCDRxCD4DBibzdD4BCwTvL4BBgbxd4BC8MtP4BC5BboBCzCRzCDJ1CR1CDR3CDR5CD4BB4bxe4BCmUhL4BB2bte4DBmJ9LD4BCwdpgB4BCyd9P4DBqdhgBD4BC2d7I4BC4dpgB4BC6d9P4DBydlgBD4BB+dzgB4DBkT5VD4BBwZnc4BCgeH4BBme7gB4DBsThWDoBC5C4BCoe/gBoBC5CJ5CyCarithmeticZ3CDDJ7C4BB4exhB4DB+T3WD4BBqald4BC6eH4BBgf5hB4DBmU/WDoBC9C4BCif9hBoBC9CJ9CZ9CDDJhD4BBwfviB4DB2U1XD4BBqerhB4BB2f3iB4DB8U9XD4BBobre4BC4fH4BB+f/iB4DBkVlYDoBClDoBClDoBClD4BCwQzT6B#FF3D3DoBCjD4BCqgBrjBoBCjD4BCugBvjBoBCjDoBCjD4BCkTlWoBCjDoBCjDoBCjD4BCsTtWJjDJjDJjD4BCohB9P4DB6f5iBD4BCoYpb4BB4f5iB4BCwhBpBoBChDoBChD4BCiUhXoBChDoBChDoBChD4BCqUpXJhDJhDJhD4BCmiB9P4DB4gB1jBD4BCmZlc4BB2gB1jB4BCuiBpBoBC/CoBC/C4BCgV9XoBC/CoBC/CoBC/C4BCoVlYoBC/CoBC/CoBC/C4BCwVtYJ/CJ/CJ/CR/CDJhDJhDJhDJhDJhDJhDJhDJhDJhDJhDJhD4BCkkBtR4BCikBH4BCokBjnBoBC9C4BCokBjnBaSUMoBC7CJ7CJ7CJ7CJ7CJ7CJ7CJ7C4BCglBtR4BC+kBH4BCklB5IoBC1C4BCklB3nByCDIFFERENCEoBCzCJzCJzCJzCJzCJzCJzCJzCJzCJzCJzCJzC4BCkmBtR4BCmmBvR4BComBnV4DBub5dD4BBkZxb4BCumBtT4BCsmBH4BCymBtT4BCwmBH4BC2mB5T4BC4mB9P4DBwmBxoBD4BC8mB5I4BC+mBpgB4BCgnB9P4DB4mB1oBDa180J/BJ/BJ/B4BCsnB5T4BCunB9P4DBmnB/oBD4BCynBtpB4BC0nBpgB4BC2nB9P4DBunBlpBDJ7BJ7BJ7B4BCgoBpgB4BCioB9P4DB6nBvpBD4BCmoB9pB4BCooB5T4BCqoB9P4DBioB1pBD4BCuoBjqB4BCwoBpgB4BCyoB9P4DBqoB7pBD4BC6Yta4BC0oBnqBoBC1BoBC1B4BC6oBtqBoBC1B4BC+oBxqB4BCkpBtR4BCipBH4BCopB5IoBCvB4BCopB1qBa-20oBCtB4BCupB5qB4BC0pBtR4BCypBH4BC4pB5IoBCnB4BC4pB9qBiB0.15oBClB4BC+pBhrBS-1oBCjB4BCkqBlrBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjBJjB4BCsrB9P4BCqrBH4BCwrBpB4BCyrBtT4BCwrBH4BC2rBtT4BC0rBH4BC6rBtT4BC4rBH4BC+rBtT4BC8rBH4BCisBtT4BCgsBH4BCmsBtT4BCksBH4BCqsBtT4BCosBH

1 Like

The Cursed Tetris Minigame Ep.15 is also made with CoBlocks, so maybe you can find some CoBlocks useful there.

try this added code:
CoBlocksPart.block:1:QDhDDDDDDDDDDDDD4BBZD4BBXF4BBVH4BBbD4BBRN4BBdD4BBbF4BBfD4BBhBD4BBVP4BBTR4BBjBD6CsetVariableRjBDRlBDRnBDyBrepeatRnBDRpBDqBonKeyZpBDDZtBDDqGassignEmptyListToVariableJvBqBpauseJtBZtBDDZxBDDiBforkJzB4BBzBD4BC1BD4BBvBJ4BCxBH4BBrBN4BCtBL4BD3BD4BB5BD4BBjBZ4BClBH4BC5BD4BC7BD4BDrBT4BCzBD4BC1BH4BDlBX4BCXlB4BB7BD4BCpBV4BCrBT4BDbjB4BCjBV4BDXlB4BCjBZ4BDTpBqBvalueoBC5BiCvariableKyoBC1BiBnameoBCzBKziBbodyZvBDDqBcountoBCxBoBCxBqBstate6BPRESSEDyBbuttonSupBiBdownBqCcollisionyBamountoBCfiBDOWNiBleftJbJbqBrightJZJZJZJZ4BBwEnF4BBZD4BB8E1FJbJbJb4BBbD4BBZF4BBdD4BC0CxD4BC2CzD4BC4C1DRfDyDchangeVariableRfDRhBD4BCiDjE4BCkDzD4BCmDzDiCsimpleIfRdDRfD6BforeverJfS-5K0a0.54BDoD/D4BBmD9D4BBZD4BC6DD4BBgE3E4BC+DLS104BDVD4BBXD4BDRJ4BBTH4BDZDxBbDDDDDoBClByBnumberoBCjBoBCjBqDthenStatementJhBqCcondition4BCfDJhB4BCbH6BactionsZfDD4BBjBD4BBlBD4BBnBD4BB2C9D4BB4C/D4BByH5IJpBJpBJpB4BB2C9DyCcomparisonZnBDD4BB8ClEZrBDD4BB8IpK4BB+IrK4BBvBD6EcreateItemStatementZvBDDiDsetDirectionRxBDiCsetColorRxBDRzBDR1BDJ3B4BC+GzI4BCgH1I4BCiH1DR1BD4DB2FrHD4BC5BD4DB0FtHDR9BD4DB+F7HD4BCxBD4DB8F5HDRhCDRjCD6CnewParallelZjCDD4BCnCD4BBpCD4DB2H/JD4DBtCDD4BBxCD4BBmI3K4DBnCND4BB4DrG4BCoIL4BB8DtG4BCsIH4BBoH3JS20K14BDgErG4DB+DpGDoBCvC4BC6InLqCoperationqBEQUALoBCrC4BCrCD4BDwE7G4DBuE5GDoBCvC4BCqJ3LoBCvC4BC/BR4DB0JhMD4BCyJhM4BB4JnM4BC2JH4BDvCD4BDxCD4BEzCD6CitemModelIdyBSquareiCpositionoBCvCoBCvC4BCoK1MiBitemoBCtC4BCtCDqCdirectionoBCtCoBCtCoBCtC4BCjCLoBCtCoBCtCoBCtCJtC4BCqF1H4BCtCDJvCJvCJvC6DbooleanConstantJtCJtC4BC6FlI4BC9BRJtCJtCJtCJtCoBCtC4BCWhDiBmoveoBCrCqBfirsthBpCDDDyBsecondJtCqCremainingBZpCDDJtCJtCJtC6DsceneItemByNameJrCZrCDDJvCJvCJvCJvCJvCJvC4BBqK3MZvCDDanotJxC4BC4NnQ4BC2NhM4BC8NpQ4BC+NrQ4BB6KnNZvCDDJzC4BCmOnQ4BCkOhM4BCqOpQ4BCsOrQJrCJrCJrC4BBiRrT4BBsR1T4BByL7N4BBrCD4BB2LhO4BBtCD4DB6OnRD4DB0OjRD4BCkP1R4BCiPH4BCoP3R4DBgPvRD4BB/BV4BBoP5R4BBiPzR4BCyPjS4BC0P3R4DBsP7RD4BC4P1I4BC6P1I4BC8PpSRvCD4BBwO/Q4BCkHzJ4BBuO9Q4DBxCDDa1.0a2.0iBtrueRvCD4BCyHhK4DBiPxRD4BB+OvR4DBhCTD4BC4Q3R4BC6QrQ4BC8QrTRxCDRzCDR1CD6BlistAddR1CDR3CDKxoBC3CoBC3C4BCsRhUoBC3C4BCwRlUqCItem nameCoBCzC4BC4RpUoBCzCoBCzCoBCzC6B#5B8518oBCxC4BCkSzUqB0.0014BD0NhQ4BByN/PoBCvCiBLESSoBCtC6BoperandoBCrC4BCrCD4BDkOvQ4BBiOtQ6BGREATERoBCrC4BCgTpVoBCrCoBCrC4BC7BRS994BD+SlV4BB8SjV4DByT5VD4BCwThM4BD+OlR4DB8OjRD4DBuJ3LD4BBtCD4BDmPzR4DBkPxRDJxCJxCJxCJxCJxCJxCJxCJxCJxCJxCJxCJxCZxCDD4BCgPzRJ1CJ1CJ1CiElistContainsItemRzCDZ1CDD4BCuPlSJ5CJ5CJ5CJ5CR5CDJ7CoBC7CoBC7C4BCuKnNZ7CDD4BCkQhT4BCgB9D4BCuErH4BCiW/YiBlistoBC9CJ9C4BCyQtT4BC9CD4BCyWvZ4BC0WvZ4BCyWD4BC4WvZ4BC2WL4BC8W1R4BC6WH4BCgXxZ4BCiXvZ4BCkXzZ4BCmX1R4BCkXH4BB4QjT4BByU9W4BB8QnTZtCDD4BCyXnQ4BC0XpQ4BC2Xha4DBsN3PD4BB0BhE4BBqR3T4BBkVxX4BBuR7TZvCDD4BCkYnQ4BCiYH4BCoYzI4BCqYha4DBgOpQD4BBoCzE4BBqV1XJtCJtCJtC4BBmSxU4BBgWrY4BBqS1UZtCDDRxCDJzCJzCJzC4BBzCDZ1CDD6CbinaryLogicZ3CDDa0.0S906B1000000R1CDR3CDR5CD4DBsYlbD4BCgRzJ4BBqYjbqBfalse4BCuIlL4BC5CDoBC7CR7CDR9CDR/CD4DBgZ/bD4BC0RhK4BB+Y9b4BCgJ/L4BCnCboBChDRhDD4BC+a/d4BCgb3R4BCibhaR/CDRhDDRjDD4BB6Z9c4BCuSD4BB4Z5c4DBkRlUD4BBsFvI4BC0b3R4BCybH4BC4bpBqDshowInfoPanelZ9CDD4BBuatd4BCiTD4BBsapd4DB0axdD4BCoTnW4DByaxdD4BBqcrf4DBgShVD4BB8X/a4BCscH4BByczf4DBoSpVDoBClD4BC0c3foBClDJlDyCarithmeticZjDDDJnD4BBkdpgB4DB6S/VD4BB2Y9b4BCmdH4BBsdxgB4DBiTnWDoBCpD4BCud1gBoBCpDJpDZpDDDJtD4BDkZvc4DBiZtcDS194BBiethB4DB4TjXD4BB0Zhd4BCkeH4BBqe1hB4DBgUrXDoBCvDoBCvD4BC8MpQ4BCwe9hBoBCvD4BBvDD4BCxD0Q4BBxDDoBCzDoBCzDoBCzD4BCiKzNaANDoBCxD4BCgGvJoBCxDoBCxD4BC0SjWoBCxDoBCxDoBCxD4BC8SrWJxDJxDJxD4BCggB3R4DBye/hBD4BCmX1a4BBwe/hB4BCogBpBoBCvDoBCvD4BCyT/WoBCvDoBCvDoBCvD4BC6TnXJvDJvDJvD4BC+gB3R4DBwf7iBD4BCkYxb4BBuf7iB4BCmhBpBpBtDDDDD4BCubhf4BC6TtXoBC1DoBC1D4BC2UpYoBC1DoBC1DoBC1D4BC+UxYJ1DJ1DJ1DJ1DJ1DqBtitleoBCzDqBimageiBtextoBCvDJvDJvDJvDRvDDJxDZxDDDJ1DJ1DJ1DJ1DJ1DJ1DJ1D4BCqjBnQ4BCojBH4BCujB9mBoBCxD4BCujB9mBaSUMoBCvDJvDJvDJvDJvDJvDJvDJvD4BCmkBnQ4BCkkBH4BCqkBzIoBCpD4BCqkBxnByCDIFFERENCEoBCnD4BBienhB4BB0mB5pB4BBmerhB4BBgiBllB4BBqevhBZnDDDJrDJrDJrDJrDJrDJrDJrDJrD4BCwlBnQ4BCylBpQ4BC0lB3R4BCylBH4BC4lBpBJhDJhD4BC+lBnQ4BCgmBpQ4BCimBha4DB4bxeD4BBgQ7S4BComBha4DB6kBznBD4BCudnW4DB4kBxnBD4BCwmBjS4BCymB3R4DBqmBhpBD4BC2mBzI4BC4mBvpB4BC6mB3R4DBymBnpBDa180J3CJ3CJ3C4BCmnBjS4BConB3R4DBgnBxpBD4BCsnB/pB4BCunBvpB4BCwnB3R4DBonB3pBDJzCJzCJzCRzCDJ1CR1CDR3CDR5CD4BB0mBtpB4BCofzJ4BBymBppB4DB2VtYD4BCsoBlrB4BCuoB3R4DBmoB9qBD4BCyoB1I4BC0oBvpB4BC2oB3R4DBuoBhrBD4BC6oBvrB4BC8oBxrB4BCoX9Z4BC3CDoBC5CoBC5C4BCkU7WoBC5C4BCgQ3SoBC5C4BCqpBhsB6B#FF3D3DoBC3C4BCwpBlsB4BC2pBnQ4BC0pBH4BC6pBzIoBCxC4BC6pBpsBa-20oBCvC4BCgqBtsB4BCmqBnQ4BCkqBH4BCqqBzI4BBsqBzsB4DBigBpiBD4BBmpBvrB4BByqB7sB4DBogBxiBD4BBkmBvoB4BC0qBH4BB6qBjtB4DBwgB5iBDoBCtCoBCtCoBCtC4BCiWtY6B#FFC72EoBCrC4BCmrBvtBoBCrC4BCqrBztByBErfolg6FUnterste Reihe komplettJnCyDnumberConstantJlCJlCJlCRlCDJnCZnCDDJrCJrCJrCJrCJrCJrCJrCJrCoBCrCoBCrC4BC8fliBoBCrCoBCrCoBCrC4BCkgBtiBoBCrCoBCrCoBCrC4BCsgB1iBJrCJrCJrCRrCDJtCJtCJtCJtC4BC6tB3R4BC8tBzD4BC+tBpB4BCguBha4DB2jB5lBD4BB+Xja4BCmuBha4DB4sB7uBD4BCslBnW4DB2sB5uBD4BCuuB1R4BCsuBH4BCyuB1R4BCwuBH4BC2uB1R4BC0uBH4BC6uB1R4BC4uBHJ3BJ3BJ3BJ3BJ3BJ3BJ3BJ3BJ3BJ3BJ3B4BC0vBnQ4BC2vBpQ4BC4vBha4DBulB9mBD4BB2Znb4BC+vB1R4BC8vBH4BCiwB1R4BCgwBH4BCwe5f4BC0E9FoBCrBoBCrB4BCsb1coBCrB4BCoXxY4BC0wBvpB4BC2wB3R4DBuwBzxBD4BC6wBhyB4BC8wBjS4BC+wB3R4DB2wB5xBD4BCixBnyB4BCkxBvpB4BCmxB3R4DB+wB/xBD4BC0f3gB4BCoxBryBoBClBJlBJlBJlBJlBRlBDJnBZnBDDoBCrB4BC8xBlzBiB0.15oBCpB4BCiyBpzBS-1oBCnB4BCoyBtzBJnBJnBJnB4BC0yB3R4BC2yBzI4BC4yBpB4BC6yBha4DBwoBtpBD4BB4c3d4BCgzBha4DByxBvyBD4BCmqBnW4DBwxBtyBDJhBJhBJhBJhBJhBJhB4BC0zB3R4BCyzBH4BC4zBpB4BCkiB9iB4BCoIhJoBCboBCb4BCgf5foBCb4BC8a1b4BCo0B1R4BCm0BH4BCs0B1R4BCq0BH4BCw0B1R4BCu0BHJPJPJPJPRPDJRZRDD4BCi1B3R4BCk1B11B4BCm1BpB4BCo1Bha4DB+qBrrBD4BBmf1f4BCu1Bha4DBg0Bt0BD4BC0sBnW4DB+zBr0BDS404BCikBvkB4BCmKzKoBCPoBCP4BC2cjdoBCP4BC6cndJPJPJPJPZPDDJTZTDD4BC02B3R4BC22Bp3B4BC42BpB4BC62Bha4DBs1B71BD4BCguBnW4DBq1B51BD4BCi3Bha4DB01Bj2BD4BCouBnW4DBy1Bh2BDS60oBCR4BCsiB7iBoBCR4BCwiB/iBoBCR4BC0iBjjBoBCR4BCwe/eJRRRDJTRTDJVRVDJXZXDD4BCs4Bha4DBiuB5uBD4BBqiBjjB4BCy4Bha4DBouB/uBD4BBwiBpjB4BC44Bha4DBuuBlvBD4BB2iBvjB4BC+4Bha4DBw3Bn4BD4BCkwBnW4DBu3Bl4BD4BCwnBpoB4BC0NtOoBCb4BC2nBvoB4BC6NzOoBCb4BC8nB1oB4BCgO5OoBCboBCb4BC4kBxlBoBCb4BC0gBthBJbJbJbJbJbJbJbJbJbJbRbDJdZdDD4BC66B3R4BC86B57B4BC+6BpB4BCg7B3R4BCi7B77B4BCk7BpB4BCm7B3R4BCo7B97B4BCq7BpB4BCs7Bha4DBixBzxBD4BBqlB9lB4BCy7Bha4DBk6B16BD4BC4yBnW4DBi6Bz6BDS80a100a1204BCqqB3qB4BCuQ7QoBCPoBCP4BCmnBznBoBCP4BCqnB3nBJPJPJPJPRPDJRRRD4BC88B3R4BC+8Bt9B4BCg9BpB4BCi9Bha4DB4yBjzBD4BBgnBtnB4BCo9Bha4DB+yBpzBD4BBmnBznBa1404BC6rBlsB4BC+RpSoBCN4BCgsBrsB4BCkSvSoBCNJNJNJNJNJNJN4BCo+B3R4BCq+Bz+B4BCs+BpB4BCu+B3R4BCw+B9mB4BCy+BpBa160

Hi @Adam and @pavlina!

Thanks for pointing out my game as an example. It is indeed a very good sample for you to work on the basic codes to make your Tetris game function. :slight_smile:

Let me briefly explain how my game works:
Basically, this is a Tetris game but the Tetris blocks gain physics properties once they are released. Press the down arrow key to move the block down and spacebar to rotate it clockwise by 90°.

Below I’ll talk about the flow of my CoBlocks code and how you can modify it as your own:

  1. ‘randBlock’ function: This function creates a random Tetris block, e.g. straight, L-shaped, S-shaped etc. The blocks are pre-made in the scene and are kept invisible / out of field of view. So when you put ‘create copy of [item]’ into variable blockCopy, you get a new copy of the sample block in the original scene. Then, the block copy attaches to the invisible carrier called ‘Attach’, given it has its previous children (i.e. previous block copies) deleted. After that, the block constantly goes down for a unit every 0.5 second, such that when it hits the ground / another block, it is released and physics is added. How you can modify this is that you set an if-statement – if the distance between the block at the bottom (same x- and y-coordinates) is less than 0.01 metre, the block detaches from the parent ‘Attach’ and a new copy randomly chosen from the samples is created, attaching to the ‘Attach’ carrier and returns to the first position.
  2. ‘collisionCond’ function: This function defines the condition for confirming the Tetris block has reached the bottom. The most important point is that you have to set the condition such that the block on the very top of the column is responsible for detecting collision. You will have to constantly update it in your code.
  3. When Play clicked: The main flow of my code is a bit different from what you would expect in your game. To ensure the game works properly, I suggest you make a 2D array, such that it stores the coordinate of every block, e.g. the coordinate of a block at the bottom left corner is (0,0), the one next to it is (1,0), while the one above it is (0,1), etc. Then your condition to clear a row is if a whole row of the array is occupied.
  4. Final features: Before you finish, don’t forget to set the controls and the game-over conditions. Controls include accelerating the block downwards with down arrow key, as well as rotating it with spacebar. Whereas the game ends when the blocks overflow, i.e. the coordinate of the block does not fit into the pre-set array.

Hope this helps! If you got any more questions, free free to ask! :slight_smile:

Regards,
NixonLiStudentAccount X CoRichardLi :heart:

P.S. Check out my games web for more fun games and useful materials!

Hey @CoRichard_Li and @pavlina,

Thanks so much for your suggestions—I really appreciate your input!

For my Tetris project, I’ve built everything from scratch using an array of pixels with color-changing squares. Since I’m not using Delightex shapes, movements, or collisions, I’ve programmed my own system based entirely on math to calculate the positions of the squares, similar to how the original Tetris works. I’ve also kept the starting scene completely empty except for the camera, and I’d love to keep it that way.

Thanks again for your help! Let me know if you have any thoughts or ideas—I’m happy to discuss.