From 03b674367ef363a61b9f4cb7af610887f6910fc5 Mon Sep 17 00:00:00 2001 From: flifloo Date: Wed, 4 May 2022 10:19:10 +0200 Subject: [PATCH] Add hit bottom check and auto Tetrominoe swap --- Models/Game.cs | 71 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 19 deletions(-) diff --git a/Models/Game.cs b/Models/Game.cs index e236529..abbb891 100644 --- a/Models/Game.cs +++ b/Models/Game.cs @@ -1,38 +1,71 @@ -using System.ComponentModel; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; namespace Tetris.Models; -public class Party : INotifyPropertyChanged -{ - private int _score; - +public class Game : INotifyPropertyChanged { + private Random _random = new Random(); + private string _userName; - public Party(string userName) - { - _userName = userName; - } - - public string UserName - { + public string UserName { get => _userName; - set - { + set { _userName = value; OnPropertyChanged("UserName"); } } - public int Score - { + private int _score; + + public int Score { get => _score; - set - { + set { _score = value; OnPropertyChanged("Score"); } } + private Grid _grid; + + public Grid Grid => _grid; + + private Tetrominoe? _currentTetrominoe; + public Tetrominoe? CurrentTetrominoe => _currentTetrominoe; + + private Tetrominoe? _nextTetrominoe; + public Tetrominoe? NextTetrominoe => _nextTetrominoe; + + public Game(string userName, Grid grid) { + _userName = userName; + _grid = grid; + _currentTetrominoe = GetNewTetrominoe(); + _nextTetrominoe = GetNewTetrominoe(); + } + + public bool HitBottom() { + if (_currentTetrominoe == null) + return false; + + return !_grid.CanGo(_currentTetrominoe, _currentTetrominoe.Coordinates + new Size(0, 1)); + } + + public void PrintTetrominoe() { + if (_currentTetrominoe == null) + return; + + _grid.PrintTetrominoe(_currentTetrominoe); + _currentTetrominoe = _nextTetrominoe; + _nextTetrominoe = GetNewTetrominoe(); + } + + public Tetrominoe GetNewTetrominoe() { + List tetrominoes = TetrominoeParser.List(); + return new Tetrominoe(_grid, tetrominoes[_random.Next(tetrominoes.Count)]); + } + public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) @@ -40,4 +73,4 @@ public class Party : INotifyPropertyChanged if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } -} \ No newline at end of file +}