- Архитектура репозитория
- Ключевые проекты
- Технологический стек
- Архитектурные решения
- Демонстрация
- Запуск проектов
📁 mystudyprojects
├── 📁 BallGamesWinFormsApp # Библиотека игр с физикой объектов
│ ├── AngryBirdsWinFormsApp # Игра "Angry Birds"
│ ├── BillyardBallsWinFormsApp # Модель диффузии газа
│ └── FruitNinjaWinFormsApp # Разрезаем шары мышкой
├── 📁 GeniyIdiotConsoleApp # Шуточный тест с "диагнозом"
└── 📁 2048WinFormsApp # Клон игры 2048
Особенности:
- Два интерфейса (консольный + графический)
- Динамическая генерация тестовых вопросов
- Система оценки ответов "диагнозом"
- Хранение данных в JSON
- История результатов тестирования
- Возможность добавления и удаления вопросов и ответов
- 🔧 Пример кода:
// Пример сериализации результатов
public static void SaveTestResult(TestResult result)
{
var results = ReadTestResults();
results.Add(result);
var json = JsonSerializer.Serialize(results);
FileManager.WriteAllText(resultsPath, json);
}Особенности:
- Механика слияния одинаковых блоков
- Система подсчета очков
- Сохранение рекордов
- Адаптивный интерфейс 📌 Правила:
- Используйте стрелки для перемещения плиток
- Совмещайте одинаковые числа, чтобы получить 2048
- Игра заканчивается, когда ходы невозможны
- 🔧 Пример кода:
private void MoveRight()
{
for (int i = 0; i < mapSize; i++)
{
for (int j = mapSize - 1; j >= 0; j--)
{
if (labelsMap[i, j].Text != string.Empty)
{
for (int k = j - 1; k >= 0; k--)
{
if (labelsMap[i, k].Text == labelsMap[i, j].Text)
{
var number = int.Parse(labelsMap[i, j].Text);
score += number * 2;
labelsMap[i, j].Text = (number * 2).ToString();
labelsMap[k, j].Text = string.Empty;
}
}
}
}
}
}Особенности:
- Физика отскока мяча
- Несколько режимов игры:
- Сбиваем рандомного сгенерированный шарик другим
- Феерверк
- Модель диффузии газа
- Управление мышью/клавиатурой
- 🔧 Пример кода:
// Базовый класс
public class Ball
{
// ...
protected virtual void Go() // Полиморфизм
{
centerX += vx;
centerY += vy;
}
public virtual void Draw(Graphics graphics) // Расширяемость
{
var rectangle = new RectangleF(centerX - radius, centerY - radius, 2 * radius, 2 * radius);
graphics.FillEllipse(brush, rectangle);
}
public void Clear() // Работа с ресурсами
{
using (var g = form.CreateGraphics())
{
var oldBrush = brush;
brush = new SolidBrush(form.BackColor);
Draw(g);
brush = oldBrush;
}
}
}Особенности:
- Логика перемещения между листьями
- Поддержание стремления к лучшему результату
- Визуальная индикация правильных ходов
- Правила игры
- 🔧 Пример кода:
// Движение лягушек и увеличение счёта ходов
private void Swap(PictureBox clickedPicture)
{
var distance = Math.Abs(clickedPicture.Location.X - emptyPictureBox.Location.X) / emptyPictureBox.Size.Width;
if (distance > 2)
{
MessageBox.Show("Так ходить нельзя!");
return;
}
var location = clickedPicture.Location;
clickedPicture.Location = emptyPictureBox.Location;
emptyPictureBox.Location = location;
moveCount++;
}- C# 9.0 (ООП, события, работа с классами и наследованием)
- Windows Forms (Создание графического интерфейса, обработка событий, пользовательские контролы)
- JSON (Сериализация и десериализация данных для хранения вопросов, результатов тестирования и рекордов)
- Entity Framework (Использовалась альтернатива - ручная работа с файловой системой через System.IO и JsonSerializer, без подключения полноценной БД)
- GDI+ (Рисование графических элементов: шариков, плиток, анимаций, эффектов столкновений и частиц)
- Общая библиотека игр
public abstract class Ball
{
protected virtual void Go() // Полиморфизм
{
// Базовая физика движения
}
public void Clear() // Инкапсуляция ресурсов
{
using (var g = form.CreateGraphics())
{
// Очистка предыдущей позиции
}
}
}- Event-driven архитектура
public class BillyardBall : MoveBall
{
public event EventHandler<HitEventArgs> OnHited;
protected override void Go()
{
if (centerX <= LeftSide())
{
OnHited?.Invoke(this, new HitEventArgs(Side.Left));
}
}
}- Шаблон Repository
public static class UsersResultStorage
{
public static List<TestResult> ReadTestResults()
{
var json = FileManager.ReadAllText(resultsPath);
return JsonSerializer.Deserialize<List<TestResult>>(json);
}
}| GeniyIdiot | 2048 | Frog Puzzle |
|---|---|---|
![]() |
![]() |
![]() |
Клонировать репозиторий:
bash git clone https://github.com/PaulPomogaev/mystudyprojects.git cd mystudyprojects
Сборка в Visual Studio:
Открыть mystudyprojects.sln
Выбрать стартовый проект в Solution Explorer
Собрать решение (Ctrl+Shift+B)
Запустить (F5)
🔑 Ключевые слова C# | ООП | WinForms | Игровая разработка | JSON | SOLID | Event-driven | Физика | Многопоточность | GDI+ | Паттерны проектирования | Сериализация



