diff --git a/App.xaml b/App.xaml
index 5ac26ee..fd080c9 100644
--- a/App.xaml
+++ b/App.xaml
@@ -1,9 +1,8 @@
-
+
\ No newline at end of file
diff --git a/App.xaml.cs b/App.xaml.cs
index 3213dd3..e0d82d7 100644
--- a/App.xaml.cs
+++ b/App.xaml.cs
@@ -1,15 +1,10 @@
-using System;
-using System.Collections.Generic;
-using System.Configuration;
-using System.Data;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows;
+using System.Windows;
-namespace Tetris {
- ///
- /// Interaction logic for App.xaml
- ///
- public partial class App : Application {
- }
-}
+namespace Tetris;
+
+///
+/// Interaction logic for App.xaml
+///
+public partial class App : Application
+{
+}
\ No newline at end of file
diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs
index b9d746b..4a05c7d 100644
--- a/AssemblyInfo.cs
+++ b/AssemblyInfo.cs
@@ -7,4 +7,4 @@ using System.Windows;
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
-)]
+)]
\ No newline at end of file
diff --git a/Models/Game.cs b/Models/Game.cs
index a72d73c..e236529 100644
--- a/Models/Game.cs
+++ b/Models/Game.cs
@@ -1,37 +1,43 @@
-using System;
-using System.ComponentModel;
+using System.ComponentModel;
namespace Tetris.Models;
-public class Party : INotifyPropertyChanged {
- public event PropertyChangedEventHandler PropertyChanged;
+public class Party : INotifyPropertyChanged
+{
+ private int _score;
- private String _userName;
+ private string _userName;
- public String UserName {
+ public Party(string userName)
+ {
+ _userName = userName;
+ }
+
+ public string UserName
+ {
get => _userName;
- set {
+ set
+ {
_userName = value;
OnPropertyChanged("UserName");
}
}
- private int _score = 0;
-
- public int Score {
+ public int Score
+ {
get => _score;
- set {
+ set
+ {
_score = value;
OnPropertyChanged("Score");
}
}
- public Party(String userName) {
- _userName = userName;
- }
+ public event PropertyChangedEventHandler PropertyChanged;
- protected virtual void OnPropertyChanged(string propertyName) {
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
-}
+}
\ No newline at end of file
diff --git a/Models/Grid.cs b/Models/Grid.cs
index b98cb0c..1e1504f 100644
--- a/Models/Grid.cs
+++ b/Models/Grid.cs
@@ -1,44 +1,49 @@
-using System;
-using System.Drawing;
-using Color = System.Drawing.Color;
+using System.Drawing;
-namespace Tetris.Models;
+namespace Tetris.Models;
-public class Grid {
- private Color[,] _grid;
+public class Grid
+{
+ private readonly Color[,] _grid;
- public Point MinGrid => new Point(0,0);
- public Point MaxGrid => new Point(_grid.GetLength(0)-1, _grid.GetLength(1)-1);
-
- public Grid(Color[,] grid) {
+ public Grid(Color[,] grid)
+ {
_grid = grid;
}
- public bool CanGo(Tetrominoe tetrominoe, Point point) {
- bool[,] shape = tetrominoe.Shape;
+ public Point MinGrid => new(0, 0);
+ public Point MaxGrid => new(_grid.GetLength(0) - 1, _grid.GetLength(1) - 1);
+
+ public bool CanGo(Tetrominoe tetrominoe, Point point)
+ {
+ var shape = tetrominoe.Shape;
if (point.X < MinGrid.X || point.Y < MinGrid.Y)
return false;
-
- else if ((point.X + tetrominoe.Shape.GetLength(0)) > MaxGrid.X || (point.Y + tetrominoe.Shape.GetLength(1)) > MaxGrid.Y)
+
+ if (point.X + tetrominoe.Shape.GetLength(0) > MaxGrid.X || point.Y + tetrominoe.Shape.GetLength(1) > MaxGrid.Y)
return false;
-
+
for (uint x = 0; x < shape.GetLength(0); x++)
- for (uint y = 0; y < shape.GetLength(1); y++) {
- Point s = point + new Size((int) x, (int) y);
- if (shape[x, y] && _grid[s.X, s.Y] != Color.Empty)
- return false;
- }
-
+ for (uint y = 0; y < shape.GetLength(1); y++)
+ {
+ var s = point + new Size((int)x, (int)y);
+ if (shape[x, y] && _grid[s.X, s.Y] != Color.Empty)
+ return false;
+ }
+
return true;
}
- public override string ToString() {
- String s = "";
- for (uint y = 0; y < _grid.GetLength(1); y++) {
+ public override string ToString()
+ {
+ var s = "";
+ for (uint y = 0; y < _grid.GetLength(1); y++)
+ {
for (uint x = 0; x < _grid.GetLength(0); x++)
- s += _grid[x,y].Name + "\t";
+ s += _grid[x, y].Name + "\t";
s += "\n";
}
+
return s;
}
-}
+}
\ No newline at end of file
diff --git a/Models/Tetrominoe.cs b/Models/Tetrominoe.cs
index b793280..5d6227b 100644
--- a/Models/Tetrominoe.cs
+++ b/Models/Tetrominoe.cs
@@ -1,65 +1,22 @@
-using System;
-using System.ComponentModel;
+using System.ComponentModel;
using System.Drawing;
-namespace Tetris.Models;
-
-public class Tetrominoe {
- public event PropertyChangedEventHandler PropertyChanged;
-
- private Grid _grid;
-
- private bool[,] _shape;
- public bool[,] Shape {
- get {
- bool[,] shape = (bool[,]) _shape.Clone();
- for (int i = 0; i < _orientation; i++)
- shape = _rotateLeft(shape);
- return shape;
- }
- }
-
- private Point _coordinates;
- public Point Coordinates {
- get => _coordinates;
- set {
- if (! _grid.CanGo(this, value))
- return;
- _coordinates = value;
- OnPropertyChanged("Coordinates");
- }
- }
-
- private short _orientation = 0;
- public short Orientation {
- get => _orientation;
- set {
- if (value > 3)
- value = 0;
- else if (value < 0)
- value = 3;
-
- short oldOrientation = _orientation;
- _orientation = value;
-
- Point newCoords = _coordinates;
- //ToDo edit position ?
- //ToDo move position when hot a wall
-
- if (!_grid.CanGo(this, newCoords)) {
- _orientation = oldOrientation;
- } else {
- OnPropertyChanged("Orientation");
- }
- }
- }
+namespace Tetris.Models;
+public class Tetrominoe
+{
private Color _color;
- public Color Color {
- get;
- }
- public Tetrominoe(Grid grid, bool[,] shape, Point coordinates, short orientation, Color color) {
+ private Point _coordinates;
+
+ private readonly Grid _grid;
+
+ private short _orientation;
+
+ private readonly bool[,] _shape;
+
+ public Tetrominoe(Grid grid, bool[,] shape, Point coordinates, short orientation, Color color)
+ {
_grid = grid;
_shape = shape;
_coordinates = coordinates;
@@ -70,44 +27,104 @@ public class Tetrominoe {
// ToDO: ascpect technique test
}
- private bool[,] _rotateLeft(bool[,] shape) {
- bool[,] rotatedArr = new bool[shape.GetLength(1), shape.GetLength(0)];
-
- for (int i=shape.GetLength(0)-1;i>=0;--i)
- for (int j=0;j _coordinates;
+ set
+ {
+ if (!_grid.CanGo(this, value))
+ return;
+ _coordinates = value;
+ OnPropertyChanged("Coordinates");
+ }
+ }
+
+ public short Orientation
+ {
+ get => _orientation;
+ set
+ {
+ if (value > 3)
+ value = 0;
+ else if (value < 0)
+ value = 3;
+
+ var oldOrientation = _orientation;
+ _orientation = value;
+
+ var newCoords = _coordinates;
+ //ToDo edit position ?
+ //ToDo move position when hot a wall
+
+ if (!_grid.CanGo(this, newCoords))
+ _orientation = oldOrientation;
+ else
+ OnPropertyChanged("Orientation");
+ }
+ }
+
+ public Color Color { get; }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ private bool[,] _rotateLeft(bool[,] shape)
+ {
+ var rotatedArr = new bool[shape.GetLength(1), shape.GetLength(0)];
+
+ for (var i = shape.GetLength(0) - 1; i >= 0; --i)
+ for (var j = 0; j < shape.GetLength(1); ++j)
+ rotatedArr[j, shape.GetLength(0) - 1 - i] = shape[i, j];
return rotatedArr;
}
-
- public void RotateLeft() {
+
+ public void RotateLeft()
+ {
Orientation -= 1;
}
- public void RotateRight() {
+ public void RotateRight()
+ {
Orientation += 1;
}
- public void GoRight() {
+ public void GoRight()
+ {
Coordinates += new Size(1, 0);
}
- public void GoLeft() {
+ public void GoLeft()
+ {
Coordinates -= new Size(1, 0);
}
- public void GoDown() {
+ public void GoDown()
+ {
Coordinates += new Size(0, 1);
}
-
- protected virtual void OnPropertyChanged(string propertyName) {
+
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
- public override string ToString() {
- String s = "";
- for (uint y = 0; y < Shape.GetLength(1); y++) {
+ public override string ToString()
+ {
+ var s = "";
+ for (uint y = 0; y < Shape.GetLength(1); y++)
+ {
for (uint x = 0; x < Shape.GetLength(0); x++)
if (Shape[x, y])
s += "x";
@@ -115,6 +132,7 @@ public class Tetrominoe {
s += " ";
s += "\n";
}
+
return s;
}
-}
+}
\ No newline at end of file
diff --git a/Resources/icon.ico b/Resources/icon.ico
new file mode 100644
index 0000000..1aaab21
Binary files /dev/null and b/Resources/icon.ico differ
diff --git a/Resources/tetris.png b/Resources/tetris.png
new file mode 100644
index 0000000..3fb9254
Binary files /dev/null and b/Resources/tetris.png differ
diff --git a/Tetris.csproj b/Tetris.csproj
index d9bfab2..c70bc94 100644
--- a/Tetris.csproj
+++ b/Tetris.csproj
@@ -5,6 +5,14 @@
enable
true
net6.0-windows
+ Resources\icon.ico
+
+
+
+ Always
+
+
+
diff --git a/Views/GameWindow.xaml b/Views/GameWindow.xaml
new file mode 100644
index 0000000..66e917f
--- /dev/null
+++ b/Views/GameWindow.xaml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Views/GameWindow.xaml.cs b/Views/GameWindow.xaml.cs
new file mode 100644
index 0000000..236afea
--- /dev/null
+++ b/Views/GameWindow.xaml.cs
@@ -0,0 +1,17 @@
+using System.Runtime.InteropServices;
+using System.Windows;
+
+namespace Tetris.Views;
+
+public partial class GameWindow : Window
+{
+ public GameWindow()
+ {
+ AttachConsole(-1);
+ InitializeComponent();
+ // new GameManager((int)Width, (int)Height, ImageControl);
+ }
+
+ [DllImport("kernel32.dll")]
+ private static extern bool AttachConsole(int dwProcessId);
+}
\ No newline at end of file
diff --git a/Views/MainWindow.xaml b/Views/MainWindow.xaml
index 805184a..8993ed9 100644
--- a/Views/MainWindow.xaml
+++ b/Views/MainWindow.xaml
@@ -3,12 +3,14 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:Tetris"
xmlns:viewsModels="clr-namespace:Tetris.ViewsModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance viewsModels:ViewModel, IsDesignTimeCreatable=True}"
Title="MainWindow" Height="450" Width="800">
-
+
+
-
+
\ No newline at end of file
diff --git a/Views/MainWindow.xaml.cs b/Views/MainWindow.xaml.cs
index 6deee64..90e910c 100644
--- a/Views/MainWindow.xaml.cs
+++ b/Views/MainWindow.xaml.cs
@@ -1,27 +1,29 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Runtime.InteropServices;
using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
using Tetris.ViewsModels;
-namespace Tetris.Views {
- ///
- /// Interaction logic for MainWindow.xaml
- ///
- public partial class MainWindow : Window {
- public MainWindow() {
- DataContext = new ViewModel();
- InitializeComponent();
- }
+namespace Tetris.Views;
+
+///
+/// Interaction logic for MainWindow.xaml
+///
+public partial class MainWindow : Window
+{
+ public MainWindow()
+ {
+ AttachConsole(-1);
+ DataContext = new ViewModel();
+ InitializeComponent();
}
-}
+
+ [DllImport("kernel32.dll")]
+ private static extern bool AttachConsole(int dwProcessId);
+
+ private void StartButton_OnClick(object sender, RoutedEventArgs e)
+ {
+ Console.WriteLine("Start game...");
+ new GameWindow().Show();
+ Close();
+ }
+}
\ No newline at end of file
diff --git a/ViewsModels/ViewModel.cs b/ViewsModels/ViewModel.cs
index 7d12ac7..e65e2bd 100644
--- a/ViewsModels/ViewModel.cs
+++ b/ViewsModels/ViewModel.cs
@@ -1,12 +1,14 @@
using System.ComponentModel;
-namespace Tetris.ViewsModels;
+namespace Tetris.ViewsModels;
-public class ViewModel : INotifyPropertyChanged {
+public class ViewModel : INotifyPropertyChanged
+{
public event PropertyChangedEventHandler PropertyChanged;
-
- protected virtual void OnPropertyChanged(string propertyName) {
+
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
-}
+}
\ No newline at end of file